Skip to content

Commit 486d3f4

Browse files
committed
Fix old reopen bug
1 parent 0e6c9ad commit 486d3f4

3 files changed

Lines changed: 6 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ A simple and efficient ModMail bot for Discord, built with `discord.py`. This bo
77
- **DM to ModMail**: Users can DM the bot to open a ticket.
88
- **Moderator Replies**: Moderators can reply directly from the modmail channel.
99
- **Slash Commands**: Includes slash commands for managing modmail.
10-
- **Session Management**: Handles user sessions with timeouts and locking.
10+
- **Session Management**: Keeps one active thread per user until a moderator closes it.
1111
- **Logging**: Logs events to a file and console.
1212

1313
## Setup
@@ -39,7 +39,6 @@ A simple and efficient ModMail bot for Discord, built with `discord.py`. This bo
3939
GUILD_ID=your_guild_id
4040
MODMAIL_CHANNEL_ID=your_modmail_channel_id
4141
LOG_LEVEL=INFO
42-
MODMAIL_RESET_SECONDS=600
4342
MODMAIL_CONFIRM_TIMEOUT_SECONDS=300
4443
```
4544

cogs/modmail.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -471,22 +471,6 @@ async def _persist_sessions_to_file(self):
471471
except Exception:
472472
logger.exception("modmail: failed to persist sessions to file")
473473

474-
def _is_session_expired(self, session: Dict[str, Any]) -> bool:
475-
reset_seconds = int(getattr(self.config, 'modmail_reset_seconds', 0) or 0)
476-
if reset_seconds <= 0:
477-
return False
478-
479-
last_activity = session.get('last_activity')
480-
if not last_activity:
481-
return False
482-
483-
try:
484-
last_dt = datetime.fromisoformat(str(last_activity))
485-
except Exception:
486-
return False
487-
488-
return (datetime.utcnow() - last_dt) > timedelta(seconds=reset_seconds)
489-
490474
def _is_session_closed(self, session: Dict[str, Any]) -> bool:
491475
state = str(session.get('state') or '').lower()
492476
return state in {'closed', 'resolved'}
@@ -585,7 +569,7 @@ async def handle_dm_message(self, message: discord.Message):
585569
thread: Optional[discord.Thread] = None
586570
session_active = False
587571
if session and isinstance(session, dict):
588-
if not self._is_session_closed(session) and not self._is_session_expired(session):
572+
if not self._is_session_closed(session):
589573
thread = await self._get_thread_from_session(session, main_channel)
590574
session_active = thread is not None
591575

@@ -597,7 +581,7 @@ async def handle_dm_message(self, message: discord.Message):
597581
pending = None
598582

599583
if pending is None:
600-
# First DM (or after close/expiry): queue this message and ask.
584+
# First DM (or after explicit close): queue this message and ask.
601585
await self._queue_pending_message(user_id, message)
602586
prompt = await self._send_modmail_confirmation_prompt(message.author)
603587
self._pending_confirmations[user_id]['prompt_message_id'] = prompt.id

utils/config.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ class Config(BaseSettings):
2020
topgg_webhook_secret: Optional[str] = Field(default=None)
2121
redis_url: Optional[str] = Field(default=None)
2222

23-
# Modmail settings
24-
modmail_channel_id: Optional[int] = Field(default=None)
25-
modmail_reset_seconds: int = Field(default=600)
26-
modmail_confirm_timeout_seconds: int = Field(default=300)
23+
# Modmail settings
24+
modmail_channel_id: Optional[int] = Field(default=None)
25+
modmail_confirm_timeout_seconds: int = Field(default=300)
2726

2827
# CodeBuddy settings
2928
question_channel_id: Optional[int] = Field(default=None)

0 commit comments

Comments
 (0)