diff --git a/src/cogs/utils.py b/src/cogs/utils.py index 2ce0e81..80f7ecc 100644 --- a/src/cogs/utils.py +++ b/src/cogs/utils.py @@ -2,22 +2,22 @@ import discord import time import os import re +import shlex from discord.ext import commands, tasks from random import randint, shuffle -from datetime import datetime, timedelta +from datetime import datetime from pytz import timezone from discord_slash import cog_ext -import shlex +from utils.reminder import Reminder from utils.core import map_list_among_us, get_age, getURLsInString, getMentionInString, cleanCodeStringWithMentionAndURLs from utils.core import cleanUser, userOrNick, ageLayout, stringTempsVersSecondes, timedeltaToString, intToTimestamp, nowTimestampUTC -from utils.reminder import Reminder +from utils.core import timestampFR def setup(client): client.add_cog(Utils(client)) class Utils(commands.Cog): """Commandes essentielles.""" - def __init__(self, client): self.client = client self.customTimezone = os.environ['TIMEZONE'] @@ -140,6 +140,7 @@ class Utils(commands.Cog): await ctx.send(embed = embed) @_calc.error async def _calc_error(self, ctx, error): + print(error) await ctx.send("Tu n'as pas spécifié de calcul.") @cog_ext.cog_slash(name="calc", description = "Calculatrice.") async def __calc(self, ctx, calcul): @@ -150,44 +151,45 @@ class Utils(commands.Cog): """Informations pour bien éditer son texte.⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢""" if fromSlash == None: fromSlash = False - syntaxe = "-----------------------------------------------------\n" - syntaxe += discord.utils.escape_markdown("```Js\n") + separateur = "-----------------------------------------------------\n" + syntaxe = separateur + syntaxe += discord.utils.escape_markdown("```js\n") syntaxe += discord.utils.escape_markdown("//code en js (possible de remplacer 'js' par d'autres languages . adaptez le !)\n") syntaxe += discord.utils.escape_markdown('console.log("hi");\n') syntaxe += discord.utils.escape_markdown("```\n") - syntaxe += "```Js\n" + syntaxe += "```js\n" syntaxe += "//code en js (possible de remplacer 'js' par d'autres languages . adaptez le !)\n" syntaxe += 'console.log("hi");\n' syntaxe += "```\n" syntaxe += "Si ton code est trop long, mets le sur \n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("`code sur une seule ligne`\n") syntaxe += "`code sur une seule ligne`\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("*texte en italique*\n") syntaxe += "*texte en italique*\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("**text en gras**\n") syntaxe += "**text en gras**\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("<>\n") syntaxe += "Un lien entre crochet, ça empêche Discord de rajouté son intégration automatique (mais le lien fonctionnera toujours).\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("__texte souligné__\n") syntaxe += "__texte souligné__\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("~~texte barré~~\n") syntaxe += "~~texte barré~~\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("~~__***text en italique-gras-souligné-barré***__~~\n") syntaxe += "~~__***text en italique-gras-souligné-barré***__~~\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("\:joy: <- l'emoji ne va pas fonctionné grâce au \ \n") syntaxe += "\:joy: <- l'emoji ne va pas fonctionné grâce au \ \n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown("> cette ligne est cité\npas celle là\n") syntaxe += "> cette ligne est cité\npas celle là\n" - syntaxe += "-----------------------------------------------------\n" + syntaxe += separateur syntaxe += discord.utils.escape_markdown(">>> cette ligne est cité\ncelle là aussi (et elles le seront toutes!)\n") syntaxe += ">>> cette ligne est cité\ncelle là aussi (et elles le seront toutes!)\n" try: @@ -503,7 +505,7 @@ class Utils(commands.Cog): if fromSlash != True: messageID = ctx.message.id Reminder().ajoutReminder(messageID, ctx.channel.id, mention, reminder, now, now + seconds, ctx.author.id) - return await ctx.send(f"Ok, je t'en parles dans {timedeltaToString(seconds)} ± 1min !") + return await ctx.send(f"Ok, je t'en parles dans {timedeltaToString(seconds)} avec 1min de retard maximum.") await ctx.send(embed = embed) @cog_ext.cog_slash(name="reminder", description = "Met en place un rappel.") async def __reminder(self, ctx, time, reminder = None): @@ -539,7 +541,46 @@ class Utils(commands.Cog): finalEmbed.add_field(name = f"Lien{'s' if len(findedURLs) > 1 else ''}", value = links[:-3]) await channel.send(message, embed = finalEmbed) Reminder().suppressionReminder(expired[5]) - @_reminderLoop.before_loop async def __avant_reminderLoop(self): await self.client.wait_until_ready() + + @commands.command(name='reminderlist', aliases=["remindlist", "rl", "rappeliste"]) + async def _reminderlist(self, ctx, *utilisateur): + """Affiche la liste des rappels d'un utilisateur.⁢⁢⁢⁢⁢\n ➡ Syntaxe: {PREFIX}reminderlist/rl/remindlist/rappeliste [utilisateur] """ + fromSlash = False + if len(utilisateur) > 0: + if utilisateur[-1] == True: + fromSlash = utilisateur[-1] + utilisateur = utilisateur[:-1] + if len(utilisateur) > 0: + utilisateur = int(getMentionInString(utilisateur[0])[0][3:][:-1]) + else: + utilisateur = ctx.author.id + + reminders = Reminder().listeReminder(utilisateur) + if fromSlash != True: + await ctx.message.add_reaction(emoji = '✅') + embed = discord.Embed(description = f"**Rappel{'s' if len(reminders) > 1 else ''} de <@{utilisateur}>**", color = discord.Colour.random()) + embed.set_thumbnail(url = self.client.get_user(utilisateur).avatar_url_as(size = 32)) + if len(reminders) > 0: + for reminder in reminders: + texte = reminder[0] + if len(texte) > 1024: + texte = f"{texte[:1021]}..." + expiration = reminder[2] - int(nowTimestampUTC()) + if expiration > 0: + expiration = f"Expire dans {timedeltaToString(expiration)} +1min de retard max." + else: + expiration = f"A déjà expiré." + embed.add_field(value = texte, name = f"Fais le {timestampFR(intToTimestamp(reminder[1]))}\n{expiration}", inline = False) + else: + embed.add_field(name = "\u200b", value = "Vous n'avez aucun rappels en attente !") + await ctx.send(embed = embed) + + @cog_ext.cog_slash(name="reminderlist", description = "Affiche la liste des rappels d'un utilisateur.") + async def __reminderlist(self, ctx, utilisateur = None): + if utilisateur == None: + return await self._reminderlist(ctx, True) + else: + return await self._reminderlist(ctx, utilisateur, True) diff --git a/src/utils/reminder.py b/src/utils/reminder.py index 8cdc18d..e7c7a6c 100644 --- a/src/utils/reminder.py +++ b/src/utils/reminder.py @@ -17,7 +17,7 @@ class Reminder(Database): """ self.requete(requete) - def ajoutReminder(self, messageID, channelID, mention, reminder, creation, expiration, userID): + def ajoutReminder(self, messageID = int, channelID = int, mention = int, reminder = str, creation = int, expiration = int, userID = int): """Ajoute un reminder""" requete = """ INSERT INTO reminder ( @@ -28,7 +28,7 @@ class Reminder(Database): """ self.requete(requete, (messageID, channelID, mention, reminder, creation, expiration, userID)) - def suppressionReminder(self, id): + def suppressionReminder(self, id = int): """Supprime un reminder""" requete = """ DELETE FROM reminder @@ -36,11 +36,15 @@ class Reminder(Database): """ self.requete(requete, [id]) - def listeReminder(self, userID = None): - """Retourne la liste des reminders, si un userID est mentionné, retourne la liste de cet utilisateur""" - return + def listeReminder(self, userID = int): + """Retourne la liste des reminders d'un utilisateur""" + requete = """ + SELECT reminder_str, creation_int, expiration_int FROM reminder + WHERE user_id = ? + """ + return self.affichageResultat(self.requete(requete, [userID])) - def recuperationExpiration(self, time): + def recuperationExpiration(self, time = int): """Récupère les reminders qui sont arrivés à expiration et ses infos""" requete = """ SELECT channel_id, mention_bool, reminder_str, creation_int, user_id, id, message_id FROM reminder