From 2935c6da830a93be173213428042061c511b3ad8 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 19 Aug 2021 10:42:31 +0200 Subject: [PATCH] send reminder in DM if user left guild --- src/cogs/reminder.py | 29 +++++++++++++++++------------ src/utils/reminder.py | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/cogs/reminder.py b/src/cogs/reminder.py index 2ffd0e3..79608b5 100644 --- a/src/cogs/reminder.py +++ b/src/cogs/reminder.py @@ -25,21 +25,19 @@ class ReminderDiscord(commands.Cog, name="Reminder"): userID = expired[4] # personne qui a fait le rappel channel = self.client.get_channel(expired[0]) # salon du message finalEmbed = discord.Embed(description = cleanCodeStringWithMentionAndURLs(reminder), timestamp = intToDatetime(expired[3]), color = discord.Colour.random()) + guild = self.client.get_guild(expired[7]) + if expired[1] == 2 or channel == None or guild.get_member(expired[4]) is None: + user = self.client.get_user(userID) + if user == None: # si l'utilisateur n'est pas trouvé + return Reminder().suppressionReminder(expired[5]) # suppression du rappel if expired[1] == 2: # s'il faut envoyer en DM le message - user = self.client.get_user(userID) - if user == None: # si l'utilisateur n'est pas trouvé - return Reminder().suppressionReminder(expired[5]) # suppression du rappel - channel = await user.create_dm() # envoie en DM - userID = None # plus de mention - sourceMessage = None # plus de message source + channel, userID, sourceMessage = await self.reminderCheckDM(userID, expired[5]) elif channel == None: # si le salon n'existe plus - user = self.client.get_user(userID) - if user == None: # si l'utilisateur n'est pas trouvé - return Reminder().suppressionReminder(expired[5]) # suppression du rappel - channel = await user.create_dm() # envoie en DM - userID = None # plus de mention - sourceMessage = None # plus de message source + channel, userID, sourceMessage = await self.reminderCheckDM(userID, expired[5]) finalEmbed.add_field(name = "Info", value = "Message envoyé en DM car le salon n'est plus disponible.") + elif guild.get_member(expired[4]) is None: # si l'utilisateur n'est plus dans la guild + channel, userID, sourceMessage = await self.reminderCheckDM(userID, expired[5]) + finalEmbed.add_field(name = "Info", value = f"Message envoyé en DM car vous avez quitté `{guild.name}`.") else: sourceMessage = expired[6] if sourceMessage != None: # vérification message avec slash command et que si c'est pas en DM @@ -72,6 +70,13 @@ class ReminderDiscord(commands.Cog, name="Reminder"): async def __avant_reminderLoop(self): """Wait to start the loop until the whole bot is ready""" await self.client.wait_until_ready() + + async def reminderCheckDM(self, userID, reminderID): + user = self.client.get_user(userID) + if user == None: # si l'utilisateur n'est pas trouvé + return Reminder().suppressionReminder(reminderID) # suppression du rappel + channel = await user.create_dm() # envoie en DM + return channel, None, None # plus de mention et plus de message source @commands.command(name='reminder', aliases=["remind", "remindme", "rappel"]) async def _reminder(self, ctx, time, *reminder): diff --git a/src/utils/reminder.py b/src/utils/reminder.py index 0d993e4..eda5bc0 100644 --- a/src/utils/reminder.py +++ b/src/utils/reminder.py @@ -55,7 +55,7 @@ class Reminder(Database): def recuperationExpiration(self, time: int): """Récupère les reminders qui sont arrivés à expiration et ses infos.""" requete = """ - SELECT channel_id, extrarg_id, reminder_str, creation_int, user_id, id, message_id FROM reminder + SELECT channel_id, extrarg_id, reminder_str, creation_int, user_id, id, message_id, guild_id FROM reminder WHERE expiration_int < ? """ return self.affichageResultat(self.requete(requete, time))