Skip to content

Commit 33a5085

Browse files
authored
Merge branch 'master' into claude/gifted-curie-z2wprx
2 parents 37edffb + ab863db commit 33a5085

28 files changed

Lines changed: 6947 additions & 1587 deletions

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ LOG_URL=https://logviewername.herokuapp.com/
33
GUILD_ID=1234567890
44
OWNERS=Owner1ID,Owner2ID,Owner3ID
55
CONNECTION_URI=mongodb+srv://mongodburi
6+
DISABLE_AUTOUPDATES=true

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* text=auto

.github/FUNDING.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
patreon: kyber
1+
buy_me_a_coffee: modmaildev

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ body:
2020
- Heroku
2121
- Systemd
2222
- PM2
23-
- Patreon
23+
- Buy Me A Coffee / Patreon
2424
- Other
2525
validations:
2626
required: true

.gitignore

Lines changed: 65 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,29 @@
1+
#### Modmail
2+
# Plugins
3+
plugins/*
4+
!plugins/registry.json
5+
!plugins/@local
6+
7+
# Config files
8+
config.json
9+
.env
10+
11+
# Data
12+
temp/
13+
14+
### Python
115
# Byte-compiled / optimized / DLL files
216
__pycache__/
317
*.py[cod]
418
*$py.class
519

6-
# C extensions
7-
*.so
8-
9-
# Distribution / packaging
10-
.Python
11-
build/
12-
develop-eggs/
13-
dist/
14-
downloads/
15-
eggs/
16-
.eggs/
17-
lib/
18-
lib64/
19-
parts/
20-
sdist/
21-
var/
22-
wheels/
23-
pip-wheel-metadata/
24-
share/python-wheels/
25-
*.egg-info/
26-
.installed.cfg
27-
*.egg
28-
MANIFEST
29-
30-
# PyInstaller
31-
# Usually these files are written by a python script from a template
32-
# before PyInstaller builds the exe, so as to inject date/other infos into it.
33-
*.manifest
34-
*.spec
35-
3620
# Installer logs
3721
pip-log.txt
3822
pip-delete-this-directory.txt
3923

40-
# Unit test / coverage reports
41-
htmlcov/
42-
.tox/
43-
.nox/
44-
.coverage
45-
.coverage.*
46-
.cache
47-
nosetests.xml
48-
coverage.xml
49-
*.cover
50-
.hypothesis/
51-
.pytest_cache/
52-
53-
# Translations
54-
*.mo
55-
*.pot
56-
57-
# Django stuff:
58-
*.log
59-
local_settings.py
60-
db.sqlite3
61-
62-
# Flask stuff:
63-
instance/
64-
.webassets-cache
65-
66-
# Scrapy stuff:
67-
.scrapy
68-
69-
# Sphinx documentation
70-
docs/_build/
71-
72-
# PyBuilder
73-
target/
74-
75-
# Jupyter Notebook
76-
.ipynb_checkpoints
77-
78-
# IPython
79-
profile_default/
80-
ipython_config.py
81-
8224
# pyenv
8325
.python-version
8426

85-
# celery beat schedule file
86-
celerybeat-schedule
87-
88-
# SageMath parsed files
89-
*.sage.py
90-
9127
# Environments
9228
.env
9329
.venv
@@ -98,43 +34,62 @@ ENV/
9834
env.bak/
9935
venv.bak/
10036

101-
# Spyder project settings
102-
.spyderproject
103-
.spyproject
104-
105-
# Rope project settings
106-
.ropeproject
37+
#### PyCharm
38+
.idea/
10739

108-
# mkdocs documentation
109-
/site
40+
#### VS Code
41+
.vscode/
11042

111-
# mypy
112-
.mypy_cache/
113-
.dmypy.json
114-
dmypy.json
43+
### Windows
44+
# Windows thumbnail cache files
45+
Thumbs.db
46+
Thumbs.db:encryptable
47+
ehthumbs.db
48+
ehthumbs_vista.db
11549

116-
# Pyre type checker
117-
.pyre/
50+
# Dump file
51+
*.stackdump
11852

119-
# PyCharm
120-
.idea/
53+
# Folder config file
54+
[Dd]esktop.ini
12155

122-
# MacOS
123-
.DS_Store
56+
# Recycle Bin used on file shares
57+
$RECYCLE.BIN/
12458

125-
# VS Code
126-
.vscode/
59+
# Windows Installer files
60+
*.cab
61+
*.msi
62+
*.msix
63+
*.msm
64+
*.msp
12765

128-
# Node
129-
package-lock.json
130-
node_modules/
66+
# Windows shortcuts
67+
*.lnk
13168

132-
# Modmail
133-
plugins/*
134-
!plugins/registry.json
135-
!plugins/@local
136-
config.json
137-
temp/
138-
test.py
139-
stack.yml
140-
.github/workflows/build_docker.yml
69+
### macOS
70+
# General
71+
.DS_Store
72+
.AppleDouble
73+
.LSOverride
74+
75+
# Icon must end with two \r
76+
Icon
77+
78+
# Thumbnails
79+
._*
80+
81+
# Files that might appear in the root of a volume
82+
.DocumentRevisions-V100
83+
.fseventsd
84+
.Spotlight-V100
85+
.TemporaryItems
86+
.Trashes
87+
.VolumeIcon.icns
88+
.com.apple.timemachine.donotpresent
89+
90+
# Directories potentially created on remote AFP share
91+
.AppleDB
92+
.AppleDesktop
93+
Network Trash Folder
94+
Temporary Items
95+
.apdisk

CHANGELOG.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,65 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66
This project mostly adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html);
77
however, insignificant breaking changes do not guarantee a major version bump, see the reasoning [here](https://github.com/modmail-dev/modmail/issues/319). If you're a plugin developer, note the "BREAKING" section.
88

9+
# v4.2.1
10+
11+
### Added
12+
* `unsnooze_history_limit`: Limits the number of messages replayed when unsnoozing (genesis message and notes are always shown).
13+
* `snooze_behavior`: Choose between `delete` (legacy) or `move` behavior for snoozing.
14+
* `snoozed_category_id`: Target category for `move` snoozing; required when `snooze_behavior` is `move`.
15+
* Thread-creation menu: Adds an interactive select step before a thread channel is created.
16+
* Commands:
17+
* `threadmenu toggle`: Enable/disable the menu.
18+
* `threadmenu show`: List current top-level options.
19+
* `threadmenu option add`: Interactive wizard to create an option.
20+
* `threadmenu option edit/remove/show`: Manage or inspect an existing option.
21+
* `threadmenu submenu create/delete/list/show`: Manage submenus.
22+
* `threadmenu submenu option add/edit/remove`: Manage options inside a submenu.
23+
* Configuration / Behavior:
24+
* Per-option `category` targeting when creating a thread; falls back to `main_category_id` if invalid/missing.
25+
* Optional selection logging (`thread_creation_menu_selection_log`) posts the chosen option in the new thread.
26+
* Anonymous prompt support (`thread_creation_menu_anonymous_menu`).
27+
28+
### Changed
29+
- Renamed `max_snooze_time` to `snooze_default_duration`. The old config will be invalidated.
30+
- When `snooze_behavior` is set to `move`, the snoozed category now has a hard limit of 49 channels. New snoozes are blocked once it’s full until space is freed.
31+
- When switching `snooze_behavior` to `move` via `?config set`, the bot reminds admins to set `snoozed_category_id` if it’s missing.
32+
- Thread-creation menu options & submenu options now support an optional per-option `category` target. The interactive wizards (`threadmenu option add` / `threadmenu submenu option add`) and edit commands allow specifying or updating a category. If the stored category is missing or invalid at selection time, channel creation automatically falls back to `main_category_id`.
33+
34+
35+
# v4.2.0
36+
37+
Upgraded discord.py to version 2.6.3, added support for CV2.
38+
Forwarded messages now properly show in threads, rather than showing as an empty embed.
39+
40+
### Fixed
41+
- Make Modmail keep working when typing is disabled due to an outage caused by Discord.
42+
- Resolved an issue where forwarded messages appeared as empty embeds.
43+
- Fixed internal message handling and restoration processes.
44+
- Eliminated duplicate logs and notes.
45+
- Addressed inconsistent use of `logkey` after ticket restoration.
46+
- Fixed issues with identifying the user who sent internal messages.
47+
- Solved an ancient bug where closing with words like `evening` wouldn't work.
48+
- Fixed the command from being included in the reply in rare conditions.
49+
50+
### Added
51+
Commands:
52+
* `snooze`: Initiates a snooze action.
53+
* `snoozed`: Displays snoozed items.
54+
* `unsnooze`: Reverses the snooze action.
55+
* `clearsnoozed`: Clears all snoozed items.
56+
57+
Configuration Options:
58+
* `max_snooze_time`: Sets the maximum duration for snooze.
59+
* `snooze_title`: Customizes the title for snooze notifications.
60+
* `snooze_text`: Customizes the text for snooze notifications.
61+
* `unsnooze_text`: Customizes the text for unsnooze notifications.
62+
* `unsnooze_notify_channel`: Specifies the channel for unsnooze notifications.
63+
* `thread_min_characters`: Minimum number of characters required.
64+
* `thread_min_characters_title`: Title shown when the message is too short.
65+
* `thread_min_characters_response`: Response shown to the user if their message is too short.
66+
* `thread_min_characters_footer`: Footer displaying the minimum required characters.
67+
968
# v4.1.2
1069

1170
### Fixed

Pipfile

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,27 @@ verify_ssl = true
77
bandit = ">=1.7.5"
88
black = "==23.11.0"
99
pylint = "==3.0.2"
10-
typing-extensions = "==4.8.0"
10+
tomli = "==2.2.1" # Needed for black on Python < 3.11
1111

1212
[packages]
13-
aiohttp = "==3.9.0"
13+
aiohttp = "==3.13.2"
14+
async-timeout = {version = "==5.0.1", markers = "python_version < '3.11'"} # Required by aiohttp
15+
typing-extensions = ">=4.12.2" # Required by aiohttp
1416
colorama = "==0.4.6"
15-
"discord.py" = {version = "==2.3.2", extras = ["speed"]}
17+
"discord.py" = {version = "==2.6.3", extras = ["speed"]}
1618
emoji = "==2.8.0"
1719
isodate = "==0.6.1"
18-
motor = "==3.3.2"
20+
motor = "==3.7.1"
1921
natural = "==0.2.0" # Why is this needed?
2022
packaging = "==23.2"
2123
parsedatetime = "==2.6"
22-
pymongo = {extras = ["srv"], version = "*"} # Required by motor
24+
dnspython = ">=2.8,<3" # Required by pymongo
25+
pymongo = ">=4.9,<5" # Required by motor
2326
python-dateutil = "==2.8.2"
2427
python-dotenv = "==1.0.0"
2528
uvloop = {version = ">=0.19.0", markers = "sys_platform != 'win32'"}
26-
lottie = {version = "==0.7.0", extras = ["pdf"]}
29+
lottie = {version = "==0.7.2", extras = ["pdf"]}
30+
setuptools = "*" # Needed for lottie
2731
requests = "==2.31.0"
2832

2933
[scripts]

0 commit comments

Comments
 (0)