passage des methodes non asynchrone dans un fichier extene "core"
This commit is contained in:
parent
9646082083
commit
34459adc5e
7 changed files with 189 additions and 191 deletions
|
@ -6,6 +6,7 @@ from random import choice
|
|||
from datetime import datetime
|
||||
from pytz import timezone
|
||||
customTimezone = os.environ['TIMEZONE']
|
||||
from utils.core import goodTimezone, userOrNick
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(ConfrerieDuKassoulait(client))
|
||||
|
@ -91,25 +92,13 @@ class ConfrerieDuKassoulait(commands.Cog):
|
|||
channel = self.client.get_channel(742588187456831659)
|
||||
embed = discord.Embed(description = f"{message.content}")
|
||||
|
||||
embed.set_author(name = self.user_or_nick(message.author), icon_url = message.author.avatar_url)
|
||||
embed.set_author(name = userOrNick(message.author), icon_url = message.author.avatar_url)
|
||||
|
||||
if not user_suppressed:
|
||||
embed.set_footer(text = f"Channel: #{message.channel.name} | Date : {self.goodTimezone(message.created_at, 1)}\nSupprimé le {datetime.now(timezone(customTimezone)).strftime('%d/%m/%Y à %H:%M:%S')}")
|
||||
embed.set_footer(text = f"Channel: #{message.channel.name} | Date : {goodTimezone(message.created_at, 1, customTimezone)}\nSupprimé le {datetime.now(timezone(customTimezone)).strftime('%d/%m/%Y à %H:%M:%S')}")
|
||||
else:
|
||||
embed.set_footer(icon_url = user_suppressed.avatar_url, text = f"Channel: #{message.channel.name} | Date : {self.goodTimezone(message.created_at, 1)}\nSupprimé par {self.user_or_nick(user_suppressed)} le {datetime.now(timezone(customTimezone)).strftime('%d/%m/%Y à %H:%M:%S')}")
|
||||
embed.set_footer(icon_url = user_suppressed.avatar_url, text = f"Channel: #{message.channel.name} | Date : {goodTimezone(message.created_at, 1, customTimezone)}\nSupprimé par {userOrNick(user_suppressed)} le {datetime.now(timezone(customTimezone)).strftime('%d/%m/%Y à %H:%M:%S')}")
|
||||
|
||||
await channel.send(embed = embed)
|
||||
# ne fonctionne pas quand un message a été supprimé avant que le bot ai démarré
|
||||
# info sur la personne qui a supprimé ne fonctionne pas si il a supprimé un message auparavant (les logs se rajoute a un log deja existant)
|
||||
|
||||
def user_or_nick(user):
|
||||
if user.nick:
|
||||
return f"{user.nick} ({user.name}#{user.discriminator})"
|
||||
else:
|
||||
return f"{user.name}#{user.discriminator}"
|
||||
|
||||
def goodTimezone(self, date, type):
|
||||
if type == 0:
|
||||
return str(timezone(customTimezone).fromutc(date))[:-13].replace('-', '/').split()
|
||||
elif type == 1:
|
||||
return str(timezone(customTimezone).fromutc(date))[:-13].replace('-', '/').replace(' ', ' à ')
|
||||
|
|
|
@ -4,6 +4,7 @@ from discord.ext import commands
|
|||
from random import randint, choice
|
||||
from datetime import timedelta
|
||||
from discord_slash import cog_ext
|
||||
from utils.core import retirerDoublons
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(Fun(client))
|
||||
|
@ -84,8 +85,8 @@ class Fun(commands.Cog):
|
|||
user2 = list(users[1].nick)
|
||||
else:
|
||||
user2 = list(users[1].name)
|
||||
user1_CALC = self._retirerDoublons([x.lower() for x in user1])
|
||||
user2_CALC = self._retirerDoublons([x.lower() for x in user2])
|
||||
user1_CALC = retirerDoublons([x.lower() for x in user1])
|
||||
user2_CALC = retirerDoublons([x.lower() for x in user2])
|
||||
coef_amour = 0
|
||||
if len(user1_CALC) > len(user2_CALC):
|
||||
taille_du_pls_grand = len(user1_CALC)
|
||||
|
@ -107,12 +108,6 @@ class Fun(commands.Cog):
|
|||
if fromSlash != True:
|
||||
await ctx.message.add_reaction(emoji = '❌')
|
||||
await ctx.send(f"Erreur! Syntaxe : `{ctx.prefix}love <User1> [User2]`\n")
|
||||
def _retirerDoublons(self, liste):
|
||||
Newliste = []
|
||||
for element in liste:
|
||||
if element not in Newliste:
|
||||
Newliste.append(element)
|
||||
return Newliste
|
||||
@_love.error
|
||||
async def _love_error(self, ctx, error):
|
||||
await ctx.send(str(error).replace('Member "', "Le membre **").replace('" not found', "** n'as pas été trouvé."))
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
import discord
|
||||
import json
|
||||
import requests
|
||||
import time
|
||||
import feedparser
|
||||
import os
|
||||
from discord.ext import commands
|
||||
from random import choice
|
||||
from asyncpraw import Reddit
|
||||
from discord_slash import cog_ext
|
||||
from utils.core import randomImage
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(Internet(client))
|
||||
|
@ -88,25 +86,6 @@ class Internet(commands.Cog):
|
|||
else:
|
||||
return await self._memes(ctx, subreddit, True)
|
||||
|
||||
|
||||
def _random_image(self, link):
|
||||
temps_requete = int(round(time.time() * 1000))
|
||||
try:
|
||||
request_data = requests.get(link)
|
||||
except Exception as e:
|
||||
raise Exception(f"Une erreur s'est produite lors de la tentative de demande de l'API {link} : {e}")
|
||||
|
||||
if not request_data.status_code == 200:
|
||||
raise Exception(f"Code HTTP {request_data.status_code} au lieu de HTTP 200 à l'appel de {link} : {request_data.text}")
|
||||
|
||||
try:
|
||||
json_data = json.loads(request_data.text)
|
||||
except Exception as e:
|
||||
raise Exception(f"Erreur lors de la transformation les données de {link} en json : {e}")
|
||||
|
||||
temps_requete = int(round(time.time() * 1000)) - temps_requete
|
||||
return (json_data, temps_requete)
|
||||
|
||||
@commands.command(name='cat', aliases = ['chat'])
|
||||
async def _cat(self, ctx, fromSlash = False):
|
||||
"""Te montre un magnifique chat\n ➡ Syntaxe: {PREFIX}cat/chat"""
|
||||
|
@ -116,7 +95,7 @@ class Internet(commands.Cog):
|
|||
else:
|
||||
name = f"{ctx.author.name}"
|
||||
embed = discord.Embed(title = f"Poticha pour {name}", colour = discord.Colour.random())
|
||||
cat = self._random_image("http://aws.random.cat/meow")
|
||||
cat = randomImage("http://aws.random.cat/meow")
|
||||
embed.set_image(url = cat[0]['file'])
|
||||
embed.set_footer(text = f"random.cat a pris {cat[1]} ms.")
|
||||
if fromSlash != True:
|
||||
|
@ -136,7 +115,7 @@ class Internet(commands.Cog):
|
|||
else:
|
||||
name = f"{ctx.author.name}"
|
||||
embed = discord.Embed(title = f"Potichien pour {name}", colour = discord.Colour.random())
|
||||
dog = self._random_image("https://dog.ceo/api/breeds/image/random")
|
||||
dog = randomImage("https://dog.ceo/api/breeds/image/random")
|
||||
embed.set_image(url = dog[0]['message'])
|
||||
embed.set_footer(text = f"dog.ceo a pris {dog[1]} ms.")
|
||||
if fromSlash != True:
|
||||
|
@ -157,7 +136,7 @@ class Internet(commands.Cog):
|
|||
choice_of_nsfw = choice(liste_hot)
|
||||
if ctx.channel.is_nsfw():
|
||||
embed = discord.Embed(title = f"{choice_of_nsfw.capitalize()} pour {ctx.author.name}", colour = discord.Colour.random())
|
||||
nsfw = self._random_image(f'http://api.o{choice_of_nsfw}.ru/noise/')
|
||||
nsfw = randomImage(f'http://api.o{choice_of_nsfw}.ru/noise/')
|
||||
embed.set_image(url = f"http://media.o{choice_of_nsfw}.ru/{nsfw[0][0]['preview']}")
|
||||
embed.set_footer(text = f"o{choice_of_nsfw}.ru a pris {nsfw[1]} ms.")
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
|
|
|
@ -22,6 +22,7 @@ import lyricsgenius
|
|||
import time
|
||||
import os
|
||||
genius = lyricsgenius.Genius(os.environ['TOKEN_GENIUS'])
|
||||
from utils.core import ligneFormatage, userOrNick
|
||||
|
||||
# Silence useless bug reports messages
|
||||
youtube_dl.utils.bug_reports_message = lambda: ''
|
||||
|
@ -518,7 +519,7 @@ class Music(commands.Cog):
|
|||
type_de_comptage = "\n"
|
||||
for ligne in paroles.split(type_de_comptage):
|
||||
if len(f"{lignetotal}{type_de_comptage}{ligne}") < 1900:
|
||||
lignetotal = f"{lignetotal}{type_de_comptage}{self.ligne_formatage(ligne)}"
|
||||
lignetotal = f"{lignetotal}{type_de_comptage}{ligneFormatage(ligne)}"
|
||||
else:
|
||||
if premierembed == True:
|
||||
premierembed = False
|
||||
|
@ -528,10 +529,10 @@ class Music(commands.Cog):
|
|||
else:
|
||||
embed = discord.Embed(description = lignetotal, color = couleur_embed)
|
||||
await ctx.send(embed = embed)
|
||||
lignetotal = f"{self.ligne_formatage(ligne)}"
|
||||
lignetotal = f"{ligneFormatage(ligne)}"
|
||||
|
||||
temps_requete = int(round(time.time() * 1000)) - temps_requete
|
||||
footer_embed = f"Pour {self.user_or_nick(ctx.author)} par Genius en {round(temps_requete / 1000, 2)} s."
|
||||
footer_embed = f"Pour {userOrNick(ctx.author)} par Genius en {round(temps_requete / 1000, 2)} s."
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
if premierembed == True:
|
||||
premierembed = False
|
||||
|
@ -545,19 +546,6 @@ class Music(commands.Cog):
|
|||
else:
|
||||
await ctx.message.add_reaction(emoji = '❌')
|
||||
await ctx.send(f"Aucune musique demandé... `{ctx.prefix}lyrics/l/lyrics <song>`.")
|
||||
def ligne_formatage(self, ligne):
|
||||
liste_balise = [
|
||||
('[Hook', '[Accroche'), ('[Verse', '[Couplet'), ('[Chorus', '[Chœur'),
|
||||
('[Bridge', '[Pont'),('[Pre-Chorus', '[Pré-chœur'), ('[Post-Chorus', '[Post-chœur')
|
||||
]
|
||||
for balises in liste_balise:
|
||||
ligne = ligne.replace(balises[0], balises[1])
|
||||
return ligne
|
||||
def user_or_nick(self, user):
|
||||
if user.nick:
|
||||
return f"{user.nick} ({user.name}#{user.discriminator})"
|
||||
else:
|
||||
return f"{user.name}#{user.discriminator}"
|
||||
|
||||
@commands.command(name='lyricsromanized', aliases = ['lr', 'lyricromanized'], hidden = True)
|
||||
async def _lyricsromanized(self, ctx, *, song: str = None):
|
||||
|
|
|
@ -10,6 +10,7 @@ from datetime import datetime
|
|||
from pytz import timezone
|
||||
from discord_slash import cog_ext
|
||||
import shlex
|
||||
from utils.core import map_list_among_us, get_age, getURLsInString, getMentionInString, cleanCodeStringWithMentionAndURLs, cleanUser, userOrNick, ageLayout
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(Utils(client))
|
||||
|
@ -21,7 +22,6 @@ class Utils(commands.Cog):
|
|||
self.client = client
|
||||
self.customTimezone = os.environ['TIMEZONE']
|
||||
|
||||
|
||||
@commands.command(name='ping')
|
||||
async def _ping(self, ctx, *, question = '0'):
|
||||
"""Affiche mon ping.\n ➡ Syntaxe: {PREFIX}ping [help]"""
|
||||
|
@ -108,7 +108,7 @@ class Utils(commands.Cog):
|
|||
equation = f"'{equation}' arrondi à 2"
|
||||
equation = equation.replace('*', '×').replace('/', '÷').replace('>=', '≥').replace('<=', '≤')
|
||||
embed = discord.Embed(color = discord.Colour.random(), title = 'Calculatrice')
|
||||
embed.set_footer(text = self._userOrNick(ctx.author), icon_url = ctx.author.avatar_url)
|
||||
embed.set_footer(text = userOrNick(ctx.author), icon_url = ctx.author.avatar_url)
|
||||
|
||||
embed.add_field(name = 'Calcul :', value = equation, inline = False)
|
||||
embed.add_field(name = 'Réponse :', value = answer.replace('False', 'Faux').replace('True', 'Vrai'), inline = False)
|
||||
|
@ -265,28 +265,28 @@ class Utils(commands.Cog):
|
|||
else:
|
||||
map = "0"
|
||||
|
||||
if map.lower() in self._map_list_among_us("mira"):
|
||||
if map.lower() in map_list_among_us("mira"):
|
||||
image = "https://i.imgur.com/6ijrH1h.jpg"
|
||||
embed = discord.Embed(title = f"Map Mira HQ d'Among Us", color = discord.Colour.random(), description = f"[lien de l'image]({image})")
|
||||
embed.set_image(url = image)
|
||||
if fromSlash != True:
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
await ctx.send(embed = embed)
|
||||
elif map.lower() in self._map_list_among_us("polus"):
|
||||
elif map.lower() in map_list_among_us("polus"):
|
||||
image = "https://i.imgur.com/mhFmcw3.jpg"
|
||||
embed = discord.Embed(title = f"Map Polus d'Among Us", color = discord.Colour.random(), description = f"[lien de l'image]({image})")
|
||||
embed.set_image(url = image)
|
||||
if fromSlash != True:
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
await ctx.send(embed = embed)
|
||||
elif map.lower() in self._map_list_among_us("skeld"):
|
||||
elif map.lower() in map_list_among_us("skeld"):
|
||||
image = "https://i.imgur.com/OSXI4Zv.jpg"
|
||||
embed = discord.Embed(title = f"Map The Skeld d'Among Us", color = discord.Colour.random(), description = f"[lien de l'image]({image})")
|
||||
embed.set_image(url = image)
|
||||
if fromSlash != True:
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
await ctx.send(embed = embed)
|
||||
elif map.lower() in self._map_list_among_us("airship"):
|
||||
elif map.lower() in map_list_among_us("airship"):
|
||||
image = "https://i.imgur.com/cm8Wogw.png"
|
||||
embed = discord.Embed(title = f"Map Airship d'Among Us", color = discord.Colour.random(), description = f"[lien de l'image]({image})")
|
||||
embed.set_image(url = image)
|
||||
|
@ -302,22 +302,12 @@ class Utils(commands.Cog):
|
|||
args = args.split()
|
||||
del args[0]
|
||||
args = " ".join(args)
|
||||
if args.lower() in self._map_list_among_us("all"):
|
||||
if args.lower() in map_list_among_us("all"):
|
||||
await ctx.invoke(self.client.get_command("amongus"), map=args)
|
||||
else:
|
||||
await ctx.invoke(self.client.get_command("amongus"))
|
||||
else:
|
||||
await ctx.message.add_reaction(emoji = '❓')
|
||||
def _map_list_among_us(self, map):
|
||||
"""Sélecteur de map pour la commande amongus"""
|
||||
maps = {}
|
||||
maps["skeld"] = ["skeld", "the skeld", "theskeld"]
|
||||
maps["mira"] = ["mira", "mira hq", "mirahq"]
|
||||
maps["polus"] = ["polus"]
|
||||
maps["airship"] = ["airship", "air ship"]
|
||||
if map == "all":
|
||||
return maps["skeld"] + maps["mira"] + maps["polus"] + maps["airship"]
|
||||
return maps[map]
|
||||
@cog_ext.cog_slash(name="amongus", description = "Affiche la carte voulue d'Among Us.")
|
||||
async def __amongus(self, ctx, map):
|
||||
return await self._amongus(ctx, map, True)
|
||||
|
@ -344,14 +334,14 @@ class Utils(commands.Cog):
|
|||
value = str(user[0].created_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
||||
embed.add_field(name = "Compte créé le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
||||
|
||||
embed.add_field(name = "Âge du compte", value = self._ageLayout(self._get_age(user[0].created_at)))
|
||||
embed.add_field(name = "Âge du compte", value = ageLayout(get_age(user[0].created_at)))
|
||||
|
||||
embed.add_field(name = "Mention", value = user[0].mention)
|
||||
|
||||
value = str(user[0].joined_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
||||
embed.add_field(name = "Serveur rejoint le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
||||
|
||||
embed.add_field(name = "Est sur le serveur depuis", value = self._ageLayout(self._get_age(user[0].joined_at)))
|
||||
embed.add_field(name = "Est sur le serveur depuis", value = ageLayout(get_age(user[0].joined_at)))
|
||||
if fromSlash != True:
|
||||
await ctx.message.add_reaction(emoji = '✅')
|
||||
return await ctx.send(embed = embed)
|
||||
|
@ -364,90 +354,6 @@ class Utils(commands.Cog):
|
|||
else:
|
||||
return await self._whois(ctx, user, True)
|
||||
|
||||
def _get_age(self, date):
|
||||
joursRestants = datetime.now() - date
|
||||
years = joursRestants.total_seconds() / (365.242 * 24 * 3600)
|
||||
months = (years - int(years)) * 12
|
||||
days = (months - int(months)) * (365.242 / 12)
|
||||
hours = (days - int(days)) * 24
|
||||
minutes = (hours - int(hours)) * 60
|
||||
seconds = (minutes - int(minutes)) * 60
|
||||
return (int(years), int(months), int(days), int(hours), int(minutes), int(seconds))
|
||||
|
||||
def _ageLayout(self, tuple):
|
||||
time = {}
|
||||
time[0], time[1], time[2], time[3], time[4], time[5] = "an", "mois", "jour", "heure", "minute", "seconde"
|
||||
for i in range(len(tuple)):
|
||||
if tuple[i] > 1 and i != 1:
|
||||
time[i] = time[i] + "s"
|
||||
message = ""
|
||||
if tuple[5] > 0: # pour les secondes
|
||||
affichage = [5] # on affiche que : seconde
|
||||
if tuple[4] > 0:
|
||||
affichage = [4, 5] # on affiche : minute + seconde
|
||||
if tuple[3] > 0:
|
||||
affichage = [3, 4, 5] # on affiche : heure + minute + seconde
|
||||
if tuple[2] > 0:
|
||||
affichage = [2, 3, 4] # on affiche : jour + heure + minute
|
||||
if tuple[1] > 0:
|
||||
affichage = [1, 2, 3] # on affiche : mois + jour + heure
|
||||
if tuple[0] > 0:
|
||||
affichage = [0, 1, 3] # on affiche : an + mois + heure
|
||||
for i in affichage:
|
||||
message = message + f", {tuple[i]} {time[i]}"
|
||||
return message[2:]
|
||||
|
||||
def _userOrNick(self, user):
|
||||
if user == None:
|
||||
return "Utilisateur inconnu" # Mauvais copié/collé -> changement d'ID
|
||||
if user.nick:
|
||||
return f"{user.nick} ({user.name}#{user.discriminator})"
|
||||
else:
|
||||
return f"{user.name}#{user.discriminator}"
|
||||
|
||||
def _cleanUser(self, ctx, stringMessage, stringID):
|
||||
stringMessage = stringMessage.replace("<@!", "").replace(">", "").replace("<@", "")
|
||||
associatedID = self._userOrNick(ctx.author.guild.get_member(int(stringID)))
|
||||
try:
|
||||
stringMessage = stringMessage.replace(stringID, associatedID)
|
||||
except:
|
||||
pass
|
||||
return stringMessage
|
||||
|
||||
def _cleanCodeStringWithMentionAndURLs(self, string):
|
||||
string = f"`{self._removeStartEndSpacesString(string)}`"
|
||||
|
||||
findedMention = self._getMentionInString(string)
|
||||
for i in range(0, len(findedMention)):
|
||||
string = string.replace(findedMention[i], f"`{findedMention[i]}`") # conserve la mention dans le message
|
||||
|
||||
if string.startswith("``<@"): # conserve le format quand mention au début de la string
|
||||
string = string[2:]
|
||||
if string.endswith(">``"): # conserve le format quand mention à la fin de la string
|
||||
string = string[:-2]
|
||||
string = string.replace("``", "") # conserve le format quand deux mentions sont collés
|
||||
return string
|
||||
|
||||
def _getMentionInString(self, string):
|
||||
findedMention = []
|
||||
for findingMention in re.findall(r'<@[!]?\d*>', string): # récupération mention dans le string
|
||||
findedMention.append(findingMention)
|
||||
findedMention = list(dict.fromkeys(findedMention)) # suppression doublon de mention dans la liste
|
||||
return findedMention
|
||||
|
||||
def _getURLsInString(self, string):
|
||||
findedURLs = []
|
||||
for findingMention in re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', string): # récupération URLs dans le string
|
||||
findedURLs.append(findingMention)
|
||||
return findedURLs
|
||||
|
||||
def _removeStartEndSpacesString(self, string):
|
||||
while string.startswith(" "):
|
||||
string = string[1:]
|
||||
while string.endswith(" "):
|
||||
string = string[:-1]
|
||||
return string
|
||||
|
||||
@commands.command(name='sondage')
|
||||
async def _sondage(self, ctx, *args):
|
||||
"""Fais un sondage.\n ➡ Syntaxe: {PREFIX}sondage "<Question>" "<Proposition1>" "<Proposition...>" "<Proposition20>" """
|
||||
|
@ -461,7 +367,7 @@ class Utils(commands.Cog):
|
|||
if len(args) > 2:
|
||||
question = args[0]
|
||||
for i in re.findall(r'\d+', question):
|
||||
question = self._cleanUser(ctx, question, i)
|
||||
question = cleanUser(ctx, question, i)
|
||||
propositions = args[1:]
|
||||
if len(propositions) <= 20:
|
||||
message = ""
|
||||
|
@ -485,7 +391,7 @@ class Utils(commands.Cog):
|
|||
shuffle(emojis_chosen)
|
||||
for i in range(len(args[1:])):
|
||||
message += f"{emojis_chosen[i]} -> {propositions[i]}\n"
|
||||
embed = discord.Embed(title = question, description = message, color = discord.Colour.random()).set_footer(text = f"Sondage de {self._userOrNick(ctx.author)}", icon_url = ctx.author.avatar_url)
|
||||
embed = discord.Embed(title = question, description = message, color = discord.Colour.random()).set_footer(text = f"Sondage de {userOrNick(ctx.author)}", icon_url = ctx.author.avatar_url)
|
||||
sondage = await ctx.send(embed = embed)
|
||||
for i in range(len(args[1:])):
|
||||
await sondage.add_reaction(emoji = emojis_chosen[i])
|
||||
|
@ -519,9 +425,9 @@ class Utils(commands.Cog):
|
|||
else: # si titre défini
|
||||
titre = args[0]
|
||||
for findedId in re.findall(r'\d+', titre): # récupération mention dans titre
|
||||
titre = self._cleanUser(ctx, titre, findedId)
|
||||
titre = cleanUser(ctx, titre, findedId)
|
||||
args = args[1:]
|
||||
embed = discord.Embed(title = titre, description = self._cleanCodeStringWithMentionAndURLs(args[0]), color = discord.Colour.random()).set_footer(text = f"Sondage de {self._userOrNick(ctx.author)}", icon_url = ctx.author.avatar_url)
|
||||
embed = discord.Embed(title = titre, description = cleanCodeStringWithMentionAndURLs(args[0]), color = discord.Colour.random()).set_footer(text = f"Sondage de {userOrNick(ctx.author)}", icon_url = ctx.author.avatar_url)
|
||||
message = await ctx.send(embed = embed)
|
||||
reactions = ['✅', '🤷', '❌']
|
||||
for i in reactions:
|
||||
|
@ -581,7 +487,7 @@ class Utils(commands.Cog):
|
|||
await asyncio.sleep(seconds)
|
||||
message = ctx.author.mention
|
||||
if mention:
|
||||
mentionList = self._getMentionInString(reminder)
|
||||
mentionList = getMentionInString(reminder)
|
||||
for i in mentionList:
|
||||
message += f" {i}"
|
||||
try:
|
||||
|
@ -589,11 +495,11 @@ class Utils(commands.Cog):
|
|||
await ctx.message.add_reaction(emoji = '✅')
|
||||
except:
|
||||
pass
|
||||
finalEmbed = discord.Embed(description = self._cleanCodeStringWithMentionAndURLs(reminder), timestamp = timestamp, color = discord.Colour.random())
|
||||
finalEmbed = discord.Embed(description = cleanCodeStringWithMentionAndURLs(reminder), timestamp = timestamp, color = discord.Colour.random())
|
||||
finalEmbed.set_footer(text=f"Message d'il y a {counter}")
|
||||
|
||||
links = ""
|
||||
findedURLs = self._getURLsInString(reminder)
|
||||
findedURLs = getURLsInString(reminder)
|
||||
for i in range(0, len(findedURLs)):
|
||||
links += f"[Lien {i + 1}]({findedURLs[i]}) · "
|
||||
if len(findedURLs) > 0:
|
||||
|
|
22
src/main.py
22
src/main.py
|
@ -5,9 +5,9 @@ import re
|
|||
import os
|
||||
from discord_slash import SlashCommand
|
||||
from discord.ext import commands
|
||||
from pytz import timezone
|
||||
customPrefix = os.environ['PREFIX']
|
||||
customTimezone = os.environ['TIMEZONE']
|
||||
from utils.core import userOrNick, goodTimezone
|
||||
|
||||
client = commands.Bot(command_prefix = customPrefix, case_insensitive = True, intents = discord.Intents.all())
|
||||
slash = SlashCommand(client, sync_commands = True)
|
||||
|
@ -104,18 +104,18 @@ async def on_message(message):
|
|||
embed.set_author(name = "Citation", icon_url = msgID.author.avatar_url)
|
||||
icon_url = message.author.avatar_url
|
||||
|
||||
date_1 = goodTimezone(msgID.created_at, 0)
|
||||
date_1 = goodTimezone(msgID.created_at, 0, customTimezone)
|
||||
edit = ""
|
||||
if msgID.edited_at:
|
||||
date_edit = goodTimezone(msgID.edited_at, 0)
|
||||
date_edit = goodTimezone(msgID.edited_at, 0, customTimezone)
|
||||
edit = f" et modifié le {date_edit[0][8:]}/{date_edit[0][5:-3]}/{date_edit[0][:4]} à {date_edit[1]}"
|
||||
messageDuBas = f"Posté le {date_1[0][8:]}/{date_1[0][5:-3]}/{date_1[0][:4]} à {date_1[1]}{edit}"
|
||||
|
||||
date_2 = goodTimezone(message.created_at, 0)
|
||||
date_2 = goodTimezone(message.created_at, 0, customTimezone)
|
||||
date_2 = f"{date_2[0][8:]}/{date_2[0][5:-3]}/{date_2[0][:4]} à {date_2[1]}"
|
||||
|
||||
if auteur == "Auteur":
|
||||
messageDuBas = messageDuBas + f"\nCité par {user_or_nick(message.author)} le {date_2}"
|
||||
messageDuBas = messageDuBas + f"\nCité par {userOrNick(message.author)} le {date_2}"
|
||||
embed.set_footer(icon_url = icon_url, text = messageDuBas)
|
||||
if message.content == linkURL.replace(' ',''):
|
||||
await message.channel.send(embed = embed)
|
||||
|
@ -127,17 +127,5 @@ async def on_message(message):
|
|||
if not "invalid literal for int() with base 10:" in e or not "404 Not Found (error code: 10008)" in e: # faute de frappe / message supprimé
|
||||
print(e)
|
||||
|
||||
def user_or_nick(user):
|
||||
if user.nick:
|
||||
return f"{user.nick} ({user.name}#{user.discriminator})"
|
||||
else:
|
||||
return f"{user.name}#{user.discriminator}"
|
||||
|
||||
def goodTimezone(date, type):
|
||||
if type == 0:
|
||||
return str(timezone(customTimezone).fromutc(date))[:-13].replace('-', '/').split()
|
||||
elif type == 1:
|
||||
return str(timezone(customTimezone).fromutc(date))[:-13].replace('-', '/').replace(' ', ' à ')
|
||||
|
||||
print("Connexion à Discord...", end = " ")
|
||||
client.run(os.environ['TOKEN_DISCORD'])
|
||||
|
|
153
src/utils/core.py
Normal file
153
src/utils/core.py
Normal file
|
@ -0,0 +1,153 @@
|
|||
import re
|
||||
import json
|
||||
import requests
|
||||
import time
|
||||
from pytz import timezone
|
||||
from datetime import datetime
|
||||
|
||||
def goodTimezone(date, type, tz):
|
||||
"""renvoie une date en fonction d'un timezone"""
|
||||
if type == 0:
|
||||
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').split()
|
||||
elif type == 1:
|
||||
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').replace(' ', ' à ')
|
||||
|
||||
def map_list_among_us(map):
|
||||
"""Sélecteur de map pour la commande amongus"""
|
||||
maps = {}
|
||||
maps["skeld"] = ["skeld", "the skeld", "theskeld"]
|
||||
maps["mira"] = ["mira", "mira hq", "mirahq"]
|
||||
maps["polus"] = ["polus"]
|
||||
maps["airship"] = ["airship", "air ship"]
|
||||
if map == "all":
|
||||
return maps["skeld"] + maps["mira"] + maps["polus"] + maps["airship"]
|
||||
return maps[map]
|
||||
|
||||
def get_age(date):
|
||||
"""Recupère un age précisément à la seconde près"""
|
||||
joursRestants = datetime.now() - date
|
||||
years = joursRestants.total_seconds() / (365.242 * 24 * 3600)
|
||||
months = (years - int(years)) * 12
|
||||
days = (months - int(months)) * (365.242 / 12)
|
||||
hours = (days - int(days)) * 24
|
||||
minutes = (hours - int(hours)) * 60
|
||||
seconds = (minutes - int(minutes)) * 60
|
||||
return (int(years), int(months), int(days), int(hours), int(minutes), int(seconds))
|
||||
|
||||
def ageLayout(tuple):
|
||||
"""avec la méthode 'get_age', permet de mettre en forme un âge"""
|
||||
time = {}
|
||||
time[0], time[1], time[2], time[3], time[4], time[5] = "an", "mois", "jour", "heure", "minute", "seconde"
|
||||
for i in range(len(tuple)):
|
||||
if tuple[i] > 1 and i != 1:
|
||||
time[i] = time[i] + "s"
|
||||
message = ""
|
||||
if tuple[5] > 0: # pour les secondes
|
||||
affichage = [5] # on affiche que : seconde
|
||||
if tuple[4] > 0:
|
||||
affichage = [4, 5] # on affiche : minute + seconde
|
||||
if tuple[3] > 0:
|
||||
affichage = [3, 4, 5] # on affiche : heure + minute + seconde
|
||||
if tuple[2] > 0:
|
||||
affichage = [2, 3, 4] # on affiche : jour + heure + minute
|
||||
if tuple[1] > 0:
|
||||
affichage = [1, 2, 3] # on affiche : mois + jour + heure
|
||||
if tuple[0] > 0:
|
||||
affichage = [0, 1, 3] # on affiche : an + mois + heure
|
||||
for i in affichage:
|
||||
message = message + f", {tuple[i]} {time[i]}"
|
||||
return message[2:]
|
||||
|
||||
def userOrNick(user):
|
||||
"""Affiche le pseudo et/ou le surnom"""
|
||||
if user == None:
|
||||
return "Utilisateur inconnu" # Mauvais copié/collé -> changement d'ID
|
||||
if user.nick:
|
||||
return f"{user.nick} ({user.name}#{user.discriminator})"
|
||||
else:
|
||||
return f"{user.name}#{user.discriminator}"
|
||||
|
||||
def cleanUser(ctx, stringMessage, stringID):
|
||||
"""récupère l'utilisateur avec son id"""
|
||||
stringMessage = stringMessage.replace("<@!", "").replace(">", "").replace("<@", "") # améliorer ça avec du regex
|
||||
associatedID = userOrNick(ctx.author.guild.get_member(int(stringID)))
|
||||
try:
|
||||
stringMessage = stringMessage.replace(stringID, associatedID)
|
||||
except:
|
||||
pass
|
||||
return stringMessage
|
||||
|
||||
def cleanCodeStringWithMentionAndURLs(string):
|
||||
"""formate un string avec des ` tout en gardant les mention et les liens"""
|
||||
string = f"`{removeStartEndSpacesString(string)}`"
|
||||
|
||||
findedMention = getMentionInString(string)
|
||||
for i in range(0, len(findedMention)):
|
||||
string = string.replace(findedMention[i], f"`{findedMention[i]}`") # conserve la mention dans le message
|
||||
|
||||
if string.startswith("``<@"): # conserve le format quand mention au début de la string
|
||||
string = string[2:]
|
||||
if string.endswith(">``"): # conserve le format quand mention à la fin de la string
|
||||
string = string[:-2]
|
||||
string = string.replace("``", "") # conserve le format quand deux mentions sont collés
|
||||
return string
|
||||
|
||||
def getMentionInString(string):
|
||||
"""récupère les mentions dans un string"""
|
||||
findedMention = []
|
||||
for findingMention in re.findall(r'<@[!]?\d*>', string): # récupération mention dans le string
|
||||
findedMention.append(findingMention)
|
||||
findedMention = list(dict.fromkeys(findedMention)) # suppression doublon de mention dans la liste
|
||||
return findedMention
|
||||
|
||||
def getURLsInString(string):
|
||||
"""récupère les liens dans un string"""
|
||||
findedURLs = []
|
||||
for findingMention in re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', string): # récupération URLs dans le string
|
||||
findedURLs.append(findingMention)
|
||||
return findedURLs
|
||||
|
||||
def removeStartEndSpacesString(string):
|
||||
"""Retire les espaces en trop au début et à la fin d'un string"""
|
||||
while string.startswith(" "):
|
||||
string = string[1:]
|
||||
while string.endswith(" "):
|
||||
string = string[:-1]
|
||||
return string
|
||||
|
||||
def randomImage(link):
|
||||
"""Récupération d'une image aléatoirement"""
|
||||
temps_requete = int(round(time.time() * 1000))
|
||||
try:
|
||||
request_data = requests.get(link)
|
||||
except Exception as e:
|
||||
raise Exception(f"Une erreur s'est produite lors de la tentative de demande de l'API {link} : {e}")
|
||||
|
||||
if not request_data.status_code == 200:
|
||||
raise Exception(f"Code HTTP {request_data.status_code} au lieu de HTTP 200 à l'appel de {link} : {request_data.text}")
|
||||
|
||||
try:
|
||||
json_data = json.loads(request_data.text)
|
||||
except Exception as e:
|
||||
raise Exception(f"Erreur lors de la transformation les données de {link} en json : {e}")
|
||||
|
||||
temps_requete = int(round(time.time() * 1000)) - temps_requete
|
||||
return (json_data, temps_requete)
|
||||
|
||||
def retirerDoublons(liste):
|
||||
"""Supprime les doublons d'une liste"""
|
||||
Newliste = []
|
||||
for element in liste:
|
||||
if element not in Newliste:
|
||||
Newliste.append(element)
|
||||
return Newliste
|
||||
|
||||
def ligneFormatage(ligne):
|
||||
"""Traduit en français les balises dans les lyrics d'une chanson"""
|
||||
liste_balise = [
|
||||
('[Hook', '[Accroche'), ('[Verse', '[Couplet'), ('[Chorus', '[Chœur'),
|
||||
('[Bridge', '[Pont'),('[Pre-Chorus', '[Pré-chœur'), ('[Post-Chorus', '[Post-chœur')
|
||||
]
|
||||
for balises in liste_balise:
|
||||
ligne = ligne.replace(balises[0], balises[1])
|
||||
return ligne
|
Reference in a new issue