Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions bot/cogs/reminders.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ async def reschedule_reminders(self) -> None:
loop = asyncio.get_event_loop()

for reminder in response:
is_valid, *_ = self.ensure_valid_reminder(reminder)
is_valid, *_ = self.ensure_valid_reminder(reminder, cancel_task=False)
if not is_valid:
continue

Expand All @@ -59,7 +59,11 @@ async def reschedule_reminders(self) -> None:
else:
self.schedule_task(loop, reminder["id"], reminder)

def ensure_valid_reminder(self, reminder: dict) -> t.Tuple[bool, discord.User, discord.TextChannel]:
def ensure_valid_reminder(
self,
reminder: dict,
cancel_task: bool = True
) -> t.Tuple[bool, discord.User, discord.TextChannel]:
"""Ensure reminder author and channel can be fetched otherwise delete the reminder."""
user = self.bot.get_user(reminder['author'])
channel = self.bot.get_channel(reminder['channel_id'])
Expand All @@ -70,7 +74,7 @@ def ensure_valid_reminder(self, reminder: dict) -> t.Tuple[bool, discord.User, d
f"Reminder {reminder['id']} invalid: "
f"User {reminder['author']}={user}, Channel {reminder['channel_id']}={channel}."
)
asyncio.create_task(self._delete_reminder(reminder['id']))
asyncio.create_task(self._delete_reminder(reminder['id'], cancel_task))

return is_valid, user, channel

Expand Down Expand Up @@ -111,12 +115,13 @@ async def _scheduled_task(self, reminder: dict) -> None:
# Now we can begone with it from our schedule list.
self.cancel_task(reminder_id)

async def _delete_reminder(self, reminder_id: str) -> None:
async def _delete_reminder(self, reminder_id: str, cancel_task: bool = True) -> None:
"""Delete a reminder from the database, given its ID, and cancel the running task."""
await self.bot.api_client.delete('bot/reminders/' + str(reminder_id))

# Now we can remove it from the schedule list
self.cancel_task(reminder_id)
if cancel_task:
# Now we can remove it from the schedule list
self.cancel_task(reminder_id)

async def _reschedule_reminder(self, reminder: dict) -> None:
"""Reschedule a reminder object."""
Expand Down