print("Chargement des fichiers requis...\n") import discord from discord.ext import tasks, commands from random import randint, choice import time from time import sleep import asyncio import random import datetime import json import os import psycopg2 import re import pickle def set_variables(bot_=False, insulte_=False, mrs_=False, minigame_=False, starttime_=False): global client, token, CTX_RELOAD, cycle_RICHPRESENCE, have_rainbow, conn_DB global insulte_random global message_recently_deleted_msg, message_recently_deleted_aut global plusoumoins_enjeu global starttime if bot_==True: client = commands.Bot(command_prefix=".") token = "RENTRE TON TOKEN ICI" CTX_RELOAD=0 cycle_RICHPRESENCE=False have_rainbow=False print("Connexion à la base de donnée...") try: conn_DB=psycopg2.connect("dbname='NOM DE TA BASE DE DONNEE' user='PSEUDO DE TA BASE DE DONNEE' host='IP DE TA BASE DE DONNEE' password='MOT DE PASSE DE TA BASE DE DONNEE'") print("Connexion a la base de donnée effectué.\n") except Exception as e: print("Impossible de se connecter a la base de donnée. Erreur:", e) if insulte_==True: insulte_random=False if mrs_==True: message_recently_deleted_msg=[] message_recently_deleted_aut=[] if minigame_==True: plusoumoins_enjeu=False if starttime_==True: starttime=datetime.datetime.now() set_variables(True, True, True, True, True) def JSONEncoder(o): if isinstance(o, datetime.datetime): return o.isoformat() # Base de donnée ----- pour voir le tableau sql : SELECT * FROM users; def update_db(arg=None): cur=conn_DB.cursor() if arg==None: #au lancement du bot, soit actualise la base de donnée au premier lancement, soit actualise le fichier users.json try: conn_DB.set_isolation_level(0) cur.execute("""CREATE TABLE users ( id_user TEXT NOT NULL, dernier_message_XP_pics TEXT, experience INTEGER NOT NULL )""") print("Aucune table dans la base de donnée, création...") print("Table dans la base de donnée créée.") try: update_db("update") print("Actualisation de la base de donnée par rapport au fichier users.json effectué.\n") except: print("Echec lors de l'actualisation de la base de donnée par rapport au fichier users.json.\n") except Exception as e: if 'relation "users" already exists' in str(e): print("La table dans la base de donnée est déjà créée.\n") try: update_db("actualisation_usersJSON") print("Actualisation du fichiers users.json par rapport à la base de donnée effectué.\n") print("Connexion aux serveurs de Discord...") except: print("Echec lors de l'actualisation du fichiers users.json par rapport à la base de donnée.\n") else: print("Je ne peux pas préparer la base de données ! Erreur :", e, "\n") elif arg=="update": # actualise la base de donnée users=json.load(open('data/users.json', 'r')) cur.execute("""SELECT * FROM users""") rows = cur.fetchall() utlisateurs_in_db=[] for row in rows: utlisateurs_in_db.append(row[0]) try: for key, value in users.items(): #value obligatoire if key in utlisateurs_in_db: cur.execute(f""" UPDATE users SET dernier_message_XP_pics = '{users[key]['dernier_message_XP_pics']}' , experience = {users[key]['experience']} WHERE id_user = '{key}' ; """) else: cur.execute(f""" INSERT INTO users ( id_user , dernier_message_XP_pics , experience ) VALUES ( '{key}' , '{users[key]['dernier_message_XP_pics']}' , {users[key]['experience']} ); """) except Exception as e: print("Update de la base de donnée impossible. Erreur :", e, "\n") elif arg=="actualisation_usersJSON": # actualise le fichiers users.json en fonction de la base de donnée users=open("data/users.json","w") users.write("{\n") users.write(" \n") users.write("}") users.close() cur.execute("""SELECT * FROM users;""") rows = cur.fetchall() users=json.load(open('data/users.json', 'r')) for row in rows: users[str(row[0])]={} if row[1]!=None: users[str(row[0])]['dernier_message_XP_pics']=str(row[1]) if row[2]!=None: users[str(row[0])]['experience']=row[2] json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) update_db() #création de la base de donnée ou update du fichiers users.json # Tasks @tasks.loop(seconds=60.0) async def updater(): update_db("update") @updater.before_loop async def before_updater(): await client.wait_until_ready() updater.start() @client.event async def on_connect(): temps_latence_lancement=int(time.strftime("%S"))-temps_lantence_avant print(f"Client connecté à Discord (en {temps_latence_lancement} seconde{'s' if temps_latence_lancement>=2 else ''}).\n") @client.event async def on_resume(): print("Le client est de nouveau connecté.") @client.event async def on_ready(): global CTX_RELOAD await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="le bon rhum de Binks", type=discord.ActivityType.listening)) H=int(time.strftime("%H"))+1 print("Bot prêt. Le",time.strftime(f"%d/%m/%Y à {H}:%M:%S"),"!") if CTX_RELOAD!=0: await CTX_RELOAD.send("** **\nJe suis de retour !") CTX_RELOAD=0 @client.event async def on_member_join(member): if member.bot==True: role=discord.utils.get(member.guild.roles, name="🤖 Bot") else: role=discord.utils.get(member.guild.roles, name="👤 Invité") await member.add_roles(role) try: await member.send(f"Bienvenue à toi **{member.name}** sur le serveur {member.guild.name} !\n\nTu as obtenu le rôle **{role}** !") except: pass if member.guild.id==634051485218373636: #ravag channel=client.get_channel(634052995771924480) #Salon #général await channel.send(f"Another **fag** joined the chat ({member.mention})", file=discord.File("files/welcome.mp4")) @client.event async def on_member_remove(member): channel=client.get_channel(634087376687333377) #Salon #notif-arrivé-départ await channel.send(f"➡️ **{member.mention}** a quitté le serveur.") @client.event async def on_message(message): await client.process_commands(message) messchan=str(message.channel) if messchan.startswith("Direct Message with"): # envoi du message en dm messcont=str(message.content) if "désolé mais je ne communique pas en message privé. N'hésites pas a me rejoindre sur le serveur des ravaG !" not in messcont: if "-- SUGGESTION DE" not in messcont: if "Bienvenue à toi" not in messcont: if "-- NOTE --" not in messcont: if message.author.bot==False: await message.channel.send(f"Bonjour {message.author.name}, désolé mais je ne communique pas en message privé. N'hésites pas a me rejoindre sur le serveur des ravaG !\nVoici le lien d'invitation : https://discord.gg/ZZC557c") if messchan.startswith("Direct Message with"): return if message.author==client.user: return if randint(1,10)<=3 and message.content.startswith(".")!=True and insulte_random==True and message.content.startswith("!")!=True: auteur=(message.author.name).replace("[ravaG] ", "") INSULTES=[f"Ta gueule {auteur}", "Ca t'arrives de te taire ?", "Cause toujours tu m'intéresses...", "Mais t'es con ?", "Bah nique ta mère alors", "Mange tes morts", "Deterre tes morts", "Au pire mange moi le poirot ?", "Nan sérieux tu fais pitié là stp j'vais t'mute x)))", "k", "Enfant de gang bang, va.", f'"*{message.content}*" Tu fais pitié sérieux...', "J'vais te bukkake tes morts", "Sustente toi de tes défunts", "DEMARRE_TA_MERE", "Je t'ai jamais aimé t'façon"] insult=random.choice(INSULTES) if insult=="DEMARRE_TA_MERE": await message.channel.send("Tiens c'est pour démarrer ta mère", file=discord.File("files/car_key.png")) else: await message.channel.send(f"{insult}") if message.author.bot!=True: if message.content.startswith(".")!=True and message.content.startswith("!")!=True: users=json.load(open('data/users.json', 'r')) try: XP_User=users[str(message.author.id)]['experience'] dernier_message_temps=users[str(message.author.id)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') ecart=message.created_at-dernier_message_temps #caclul l'écart except: users[str(message.author.id)]={} XP_User=0 ecart=datetime.timedelta(seconds=16) #au premier message, lecart est suffisant pour que l'user gagne de l'xp if ecart.seconds>=15: XP_User+=randint(3,13) users[str(message.author.id)]['experience']=XP_User users[str(message.author.id)]['dernier_message_XP_pics']=message.created_at json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) @client.event async def on_message_delete(message): if not message.author==client.user: if not message.content.startswith(".suggestion"): listechannel(message) if message.channel.id in LchannelID: if len(message.content)<1 or len(message.author.name)<1: return if len(message_recently_deleted_msg)>=3: del message_recently_deleted_msg[0] if len(message_recently_deleted_aut)>=3: del message_recently_deleted_aut[0] message_recently_deleted_msg.append(message.content) message_recently_deleted_aut.append(message.author) @client.event async def on_command_error(ctx, error): print(error) if isinstance(error, commands.MissingRequiredArgument): await ctx.send(f"La commande nécessite un ou plusieurs argument, `.help` pour plus d'informations.") if isinstance(error, commands.CommandNotFound): commande=str(error).replace('Command "',"").replace('" is not found','') if commande=="stop": suggestion=f"Tu peux essayé la commande `.eteindre`." elif commande=="suggestions": suggestion=f"Tu peux essayé la commande `.suggestion`." elif commande=="aide": suggestion=f"Tu peux essayé la commande `.help`." elif commande=="calculer" or commande=="calcul" or commande=="calcule": suggestion=f"Tu peux essayé la commande `.calc`." elif commande=="jvousnike" or commande=="jvounike" or commande=="jvounik" : suggestion=f"Tu peux essayé la commande `.jvousnik`." else: suggestion="" if commande.startswith(".")!=True: await ctx.send(f"La commande *.{commande}* n'existe pas ! {suggestion}", delete_after=3) if len(str(error))>2000: await ctx.send(f"**Conflit avec Discord, veuillez réessayer plus tard.**") @client.command() async def ping(ctx): await ctx.send(f"Pong! ({round(client.latency * 1000)}ms)") @client.command(aliases=['8ball','8b']) async def _8ball(ctx, *, question): reponses=["C'est sûr.","Il en est décidément ainsi.","Incontestablement.","Oui, sans aucun doute.","Vous pouvez vous y fier.","Tel que je le vois, oui.","C'est le plus probable.", "Cela montre de bonnes perspectives","Certes.","Les signes indiquent que oui.","Ma réponse est oui.","Ta question est trop floue, réessaie.","Redemandes plus tard.", "Je ferais mieux de pas te le dire maintenant.","Je ne peux pas le prédire actuellement.","Concentrez-vous et redemandez.","N'y comptes pas trop.","Ma réponse est non.","Mes sources disent non.", "Les perspectives ne sont pas si bonnes.","C'est très douteux.","hmm..","Menteur."] await ctx.send(f"`{random.choice(reponses)}`") @client.command() async def eteindre(ctx): global cycle_RICHPRESENCE listeadminBot(ctx) if ctx.author in LadminBot: await ctx.send("C'est donc ainsi... bye-bye ! :sleeping:") cycle_RICHPRESENCE=False await client.change_presence(status=discord.Status.dnd, activity=discord.Activity(name="s'éteindre...", type=discord.ActivityType.playing)) print("Déconnexion dans 5 secondes...") await asyncio.sleep(5) print("Déconnexion effectué le",time.strftime("%d/%m/%Y à %H:%M:%S"),f"par @{ctx.author} !") await client.close() else: await ctx.send("Tu ne peux pas m'éteindre aussi facilement :stuck_out_tongue_closed_eyes: !!") @client.command() async def ir(ctx): global insulte_random listeadminBot(ctx) if ctx.author in LadminBot: if insulte_random==False: insulte_random=True else: insulte_random=False await ctx.send(f"La réponse random est maintenant {str(insulte_random).replace('True', 'activé').replace('False', 'désactivé')}.") else: await ctx.send("Tu ne peux pas faire ça.") @client.command() async def ppc(ctx, *, choix): ordi=randint(1,3) #1: pierre, 2: papier, 3: ciseaux if ordi==1: ordi="pierre" elif ordi==2: ordi="papier" elif ordi==3: ordi="ciseaux" if choix=="pierre" or choix=="Pierre": if ordi=="pierre": await ctx.send(f"J'ai fait {ordi}, égalité !") elif ordi=="papier": await ctx.send(f"J'ai fait {ordi}, tu as perdu !") elif ordi=="ciseaux": await ctx.send(f"J'ai fait {ordi}, tu as gagné !") elif choix=="papier" or choix=="Papier": if ordi=="pierre": await ctx.send(f"J'ai fait {ordi}, tu as gagné !") elif ordi=="papier": await ctx.send(f"J'ai fait {ordi}, égalité !") elif ordi=="ciseaux": await ctx.send(f"J'ai fait {ordi}, tu as perdu !") elif choix=="ciseaux" or choix=="Ciseaux": if ordi=="pierre": await ctx.send(f"J'ai fait {ordi}, tu as perdu !") elif ordi=="papier": await ctx.send(f"J'ai fait {ordi}, tu as gagné !") elif ordi=="ciseaux": await ctx.send(f"J'ai fait {ordi}, égalité !") else: await ctx.send("Respecte les choix : Pierre, papier, ou ciseaux ?") @client.command(aliases=['suggest']) async def suggestion(ctx, *, suggest): if len(suggest)<=10: await ctx.send("Ta suggestion doit au moins faire 10 caractères.") else: await ctx.channel.purge(limit=1) await ctx.send(f"Merci pour ta suggestion {ctx.author.name} !", delete_after=2) listeadminBot(ctx) n=len(LadminBot) while n!=0: adminUser=client.get_user(LadminBot[n-1].id) await adminUser.send(f"** -- SUGGESTION DE {ctx.author.mention} ({ctx.author.name}) --**\n\n `{suggest}`") n-=1 client.remove_command("help") @client.command(aliases=['aide']) async def help(ctx, *, page="1"): ravaBot=client.get_user(571348123855880192) if page=="music" or page=="xp": embed=discord.Embed(title=f"Commandes de {ravaBot.name} - page {page} (certaines commandes peuvent être réservés au staff)", colour=discord.Colour.green()) embed.set_footer(text=f"Développé par des ravaG. - .help [page/music/xp] ({page})") if page=="music": #10 embed.add_field(name=".connect [id du channel]", value="Se connecte au salon vocal.", inline=False) embed.add_field(name=".play ", value="Recherche une chanson sur Youtube et l'ajoute à la file d'attente.", inline=False) embed.add_field(name=".pause", value="Mets en pause de la chanson en cours de lecture.", inline=False) embed.add_field(name=".resume", value="Reprends la chanson en pause.", inline=False) embed.add_field(name=".skip", value="Passe la chanson.", inline=False) embed.add_field(name=".queue", value="Affiche la file d'attente des chansons à venir.", inline=False) embed.add_field(name=".now_playing", value="Affiche des informations sur la chanson en cours de lecture.", inline=False) embed.add_field(name=".volume ", value=f"Modifiez le volume de <@{ravaBot.id}> (entre 1 et 100).", inline=False) embed.add_field(name=".disconnect", value="Arrête la chanson en cours de lecture et quitte le salon vocal.", inline=False) embed.add_field(name=".lyrics [song]", value="Affiche les paroles d'une chanson.", inline=False) if page=="xp": #5 embed.add_field(name=".xp leaderboard", value="Affiche le top 5 du serveur.", inline=False) embed.add_field(name=".xp info", value="Affiche les infos relatives à l'xp.", inline=False) embed.add_field(name=".xp clear", value="Supprime l'XP d'un utilisateur.", inline=False) embed.add_field(name=".xp backup", value="Envoie une backup en .json des levels des utilisateurs.", inline=False) embed.add_field(name=".xp give", value="Permet d'ajouter (ou de retirer si valeur négative) de l'xp à un utilisateur.", inline=False) await ctx.send(embed=embed) else: try: page=int(page) except: page=1 pagetot=5 embed=discord.Embed(title=f"Commandes de {ravaBot.name} - page {page}/{pagetot}", colour=discord.Colour.green()) embed.set_footer(text=f"Développé par des ravaG. - .help [page/music/xp] ({page}/{pagetot})") if page==1: #10/10 embed.add_field(name=".help [page=1/music/xp]", value="Affiche le menu d'aide des commandes.", inline=False) embed.add_field(name=".avatar [user]", value="Affiche ton avatar ou celui que tu mentionnes.", inline=False) embed.add_field(name=".kiss", value="Fait un bisou à un inconnu.", inline=False) embed.add_field(name=".deglingue", value="Tu déglingues un inconnu (ou pas).", inline=False) embed.add_field(name=".suggestion ", value="Pour proposé une fonctionnalité.", inline=False) embed.add_field(name=".ppc ", value=f"Un simple Chifumi contre <@{ravaBot.id}>.", inline=False) embed.add_field(name=".ping", value="Pong!", inline=False) embed.add_field(name=".iq", value="Calcule ton IQ.", inline=False) embed.add_field(name=".chatclear", value="Clear le canal de discussion.", inline=False) embed.add_field(name=".eteindre", value=f"Éteint <@{ravaBot.id}>.", inline=False) elif page==2: #10/10 embed.add_field(name=".8ball ", value="Répond a ta question.", inline=False) embed.add_field(name=".trueid ", value="Renvois à l'utilisateur correspondant.", inline=False) embed.add_field(name=".calc ", value="Calcule une expression.", inline=False) embed.add_field(name=".mrs", value="Affiche les messages récemment supprimés.", inline=False) embed.add_field(name=".reload", value=f"Redémarre <@{ravaBot.id}>.", inline=False) embed.add_field(name=".ir", value="Active ou désactive la réponse automatique.", inline=False) embed.add_field(name=".jvousnik", value="J'VOUS NIQUE !", inline=False) embed.add_field(name=".plusoumoins", value="Un plus ou moins entre 1 et 100.", inline=False) embed.add_field(name=".vidage", value="Supprime touts tes messages (uniquement dans le salon <#634059175004995587>).", inline=False) embed.add_field(name=".delchat ", value="Supprime le nombre de messages voulus.", inline=False) elif page==3: #10/10 embed.add_field(name=".crp", value="Active ou désactive le rich presence dynamique.", inline=False) embed.add_field(name=".rainbow", value="Ton pseudo change de toute les couleurs.", inline=False) embed.add_field(name=".rire", value="Ahahaha.", inline=False) embed.add_field(name=".memes", value=f"Envois un meme de reddit.", inline=False) embed.add_field(name=".nickrandom", value="Change le surnom d'un utilisateur du salon courant.", inline=False) embed.add_field(name=".screenshare [id du channel]", value="Renvois le lien pour faire un partage d'écran.", inline=False) embed.add_field(name=".baccalaureat", value="Affiche la probabilité que t'es ton bac.", inline=False) embed.add_field(name=".invitation", value="Renvois un lien d'invitation vers le serveur.", inline=False) embed.add_field(name=".note ", value="T'envois un message avec ta note.", inline=False) embed.add_field(name=".troll", value="Affiche une image troll.", inline=False) elif page==4: #10/10 embed.add_field(name=".how_many", value="Affiche le nombre d'utilisateurs sur le serveur.", inline=False) embed.add_field(name=".syntax", value="Informations pour bien éditer son texte.", inline=False) embed.add_field(name=".sexe [butts/boobs]", value="Envois une image coquine. **(NSFW)**", inline=False) embed.add_field(name=".love [user2]", value="Découvre la probabilité que ces deux personnes se mettent en couple.", inline=False) embed.add_field(name=".delete", value='Envois une vidéo "Repost", alternative : `.repost`.', inline=False) embed.add_field(name=".nulle", value="Informe que le contenu précédent est nul (sous forme de vidéo).", inline=False) embed.add_field(name=".tagueule", value="Vidéo 'TG'.", inline=False) embed.add_field(name=".filsdepute", value="Vidéo 'FDP'.", inline=False) embed.add_field(name=".binary ", value="Convertir le texte en binaire.", inline=False) embed.add_field(name=".citation [réponse]", value="Permet de citer un message et d'y répondre directement ou non.", inline=False) elif page==5: #2/10 embed.add_field(name=".runtime", value="Affiche le temps depuis que le bot est en ligne.", inline=False) embed.add_field(name=".xd", value="Renvois un XD.", inline=False) else: embed.add_field(name="Rien a affiché.", value="Essai une page différente, ou alors `.help music/xp`.", inline=False) await ctx.send(embed=embed) @client.command() async def deglingue(ctx): delingue_name=["Clément","Mathéo","Anri","Arthur","toutes les meufs de paname","personne (pucot4life)","Mathieu","MLP","Lucie","Campestrimoche","la daronne à turure", "la daronne à mymy"] n=randint(0,len(delingue_name)-1) i=randint(0,9) if i==0: await ctx.send("Crocodile la pute de Luffy") else: await ctx.send(f"{ctx.author.mention} déglingue {delingue_name[n]} !!") @client.command() async def kiss(ctx): Liste=ctx.channel.members #liste de tous les membres du channel Liste.remove(ctx.author) #on retire l'auteur du message de la liste user_kissed=choice(Liste) #on prend un membre au hasard while user_kissed.bot==True: #on check que c'est pas un bot user_kissed=choice(Liste) await ctx.send(f"{ctx.author.mention} fait un bisous baveux à {user_kissed.mention}") @client.command(aliases=['clearchat','cc']) async def chatclear(ctx): listeravaG(ctx) if ctx.author in LravaG: await ctx.send(f"**\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**\n*Chat clear par {ctx.author.name} avec succès !*") else: await ctx.send("Tu ne peux pas faire ça.") @client.command() async def iq(ctx, *, user='0'): if user=='0': user=ctx.author return await ctx.send(f"T'as {randint(randint(-100,0),220)} IQ {user.mention} !") else: try: user2=user user2=user2[2:-1] user2=user2.replace("!","") user2=int(user2) user2=client.get_user(user2) ravaBot=client.get_user(571348123855880192) if user2.id == ravaBot.id: return await ctx.send(f"Bah... pas ouf... j'ai juste 100000 IQ !") else: return await ctx.send(f"{user2.mention} as {randint(randint(-100,0),220)} IQ !") except: return await ctx.send(f"{user} as {randint(randint(-100,0),220)} IQ !") @client.command() async def avatar(ctx, *, user='0'): if user=='0': user=ctx.author else: user=user[2:-1] user=user.replace("!","") user=int(user) user=client.get_user(user) await ctx.send(f"Photo de profil de {user.mention} : {user.avatar_url}") @client.command() async def trueid(ctx, *, id='0'): if id=='0': await ctx.send("ID manquante.") else: id=int(id) id=client.get_user(id) await ctx.send(f"Voici l'utilisateur en question : {id}") @client.command() async def calc(ctx, *, msg): equation = msg.replace('^', '**').replace('x', '*').replace('×', '*').replace('÷', '/').replace('≥', '>=').replace('≤', '<=') try: try: if '=' in equation: if '<' in equation: left = eval(equation.split("<=")[0]) right = eval(equation.split("<=")[1]) answer = str(left <= right) elif '>' in equation: left = eval(equation.split(">=")[0]) right = eval(equation.split(">=")[1]) answer = str(left >= right) else: left = eval(equation.split("=")[0]) right = eval(equation.split("=")[1]) answer = str(left == right) else: answer = str(eval(equation)) except ZeroDivisionError: return await ctx.send("Tu ne peux pas divisé par 0.") except TypeError: return await ctx.send("Requête de calcul invalide.") if '.' in answer: aftercomma = answer.split(".")[1] if len(aftercomma)>2: answer = str(round(float(answer),2)) equation=f"'{equation}' arrondi à 2" equation=equation.replace('*', '×').replace('/', '÷').replace('>=', '≥').replace('<=', '≤') embed=discord.Embed(color=0xD3D3D3, title='Calculatrice') embed.set_footer(text=ctx.author) 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) await ctx.send(content=None, embed=embed) await ctx.message.delete() @client.command() async def mrs(ctx): listeravaG(ctx) listeadminBot(ctx) if ctx.author in LravaG or ctx.author in LadminBot: if len(message_recently_deleted_msg)==0: couleur=discord.Colour.red() else: couleur=discord.Colour.blue() embed=discord.Embed(title="Messages récemment supprimés", colour=couleur) embed.set_footer(text="Développé par des ravaG.") if len(message_recently_deleted_msg)==0: embed.add_field(name="Aucun message récemment supprimé", value="Réessaie plus tard.", inline=False) else: for i in range (len(message_recently_deleted_msg)): embed.add_field(name=message_recently_deleted_msg[i], value=message_recently_deleted_aut[i], inline=False) await ctx.send(embed=embed) else: await ctx.send("Tu ne peux pas faire ça.") @client.command() async def reload(ctx): global CTX_RELOAD, cycle_RICHPRESENCE listeadminBot(ctx) if ctx.author in LadminBot: await ctx.send("Je reviens tout de suite ! :smile:") cycle_RICHPRESENCE=False await client.change_presence(status=discord.Status.dnd, activity=discord.Activity(name="redémarrer...", type=discord.ActivityType.playing)) print("Déconnexion dans 5 secondes...") await asyncio.sleep(5) print("Déconnexion effectué le",time.strftime("%d/%m/%Y à %H:%M:%S"),"!") print("Rédemarrage dans 3 secondes...") sleep(3) client.clear() set_variables(False, True, True, False, True) print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") print("Rédemarré le",time.strftime("%d/%m/%Y à %H:%M:%S"),f"par @{ctx.author}.") CTX_RELOAD=ctx.channel await client.connect() else: await ctx.send("Tu ne peux pas me redémarrer.") @client.command() async def jvousnik(ctx): await ctx.send("J'vous nique !", tts=True) @client.command() async def xp(ctx, *, user='0'): if user=="leaderboard" or user=="leader" or user=="top" or user=="toplevel" or user=="leveltop" or user=="lead": leaderboardXP() embed=discord.Embed(title=f"**Leaderboard de {ctx.guild.name}**", colour=discord.Colour.gold()) embed.set_footer(text="Développé par des ravaG.") n=len(XP_USER_LEADERBOARD) if n!=0: for i in range(0,len(XP_USER_LEADERBOARD)): levelUser=rankXP(int(XP_USER_LEADERBOARD[n-1])) embed.add_field(name=f"{i+1}. Niveau {levelUser} avec {XP_retour_user(XP_USER_LEADERBOARD[n-1])} XP ↴", value=f"<@{NAMES_USER_LEADERBOARD[n-1]}>", inline=False) i+=1 n-=1 else: embed.add_field(name="Aucune personne dans la leaderboard", value="** **", inline=False) await ctx.send(embed=embed) elif user=="info" or user=="aide" or user=="help": embed=discord.Embed(title="**Infos sur l'XP**", colour=discord.Colour.greyple()) embed.set_footer(text="Développé par des ravaG.") embed.add_field(name="Gagné de l'XP ?", value="Gagnable toutes les 15 secondes.\nPossibilité d'en gagné entre 3 et 13 par messages.", inline=False) embed.add_field(name=".xp [user]", value="Pour connaître l'XP d'un utilisateur et son niveau.", inline=False) embed.add_field(name=".xp", value="Pour connaître sa quantité d'XP et son niveau.", inline=False) embed.add_field(name=".xp leaderboard", value="Affiche la leaderboard du serveur.", inline=False) embed.add_field(name=".xp info", value="Affiche ceci.", inline=False) await ctx.send(embed=embed) elif user.startswith("clear"): listeadminBot(ctx) if ctx.author in LadminBot: try: user=user[6:] user=user[2:-1] user=user.replace("!","") user=client.get_user(int(user)) except: return await ctx.send("Merci de renseigné un utilisateur valide.") users=json.load(open('data/users.json', 'r')) try: try: OLD_XP_USER=users[str(ctx.author.id)]['experience'] except: OLD_XP_USER=0 users[str(ctx.author.id)]['experience']=0 json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) return await ctx.send(f"Expérience de {user.mention} supprimée. ({XP_retour_user(OLD_XP_USER)} XP supprimé.)") except: return await ctx.send(f"{user.mention} n'as pas d'XP.") else: return await ctx.send("Tu ne peux pas faire ceci.") elif user.startswith("backup"): listeadminBot(ctx) if ctx.author in LadminBot: return await ctx.send(file=discord.File(f"data/users.json")) else: return await ctx.send("Tu ne peux pas faire ceci.") elif user.startswith("give"): listeadminBot(ctx) if ctx.author in LadminBot: try: user=user[6:] user=user.split(" ") userNAME=user[0] userNAME=userNAME[2:-1] userNAME=userNAME.replace("!","") userNAME=client.get_user(int(userNAME)) userXPtoGIVE=user[-1] userXPtoGIVE=userXPtoGIVE.replace("xp","") except: return await ctx.send("Merci de renseigné un utilisateur ou une xp valide. Rappel : `.xp give `") try: users=json.load(open('data/users.json', 'r')) try: XP_User=users[str(userNAME.id)]['experience'] except: XP_User=0 XP_User+=int(userXPtoGIVE) users[str(userNAME.id)]['experience']=XP_User json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) if int(userXPtoGIVE)<0: userXPtoGIVE=int(userXPtoGIVE)*-1 return await ctx.send(f"Expérience de {userNAME.mention} mis à jour, retrait de {XP_retour_user(userXPtoGIVE)} xp. {userNAME.mention} a désormais {XP_retour_user(XP_User)} xp.") else: return await ctx.send(f"Expérience de {userNAME.mention} mis à jour, ajout de {XP_retour_user(userXPtoGIVE)} xp. {userNAME.mention} a désormais {XP_retour_user(XP_User)} xp.") except: return await ctx.send(f"{userNAME.mention} n'as pas encore d'XP.") else: return await ctx.send("Tu ne peux pas faire ceci.") else: if user=='0': user=ctx.author else: user=user[2:-1] user=user.replace("!","") try: user=int(user) except: return await ctx.send("Erreur d'arguments.") user=client.get_user(user) if user.bot==True: return await ctx.send("Un bot ne peux pas obtenir d'XP.") try: users=json.load(open('data/users.json', 'r')) XP_User=users[str(user.id)]['experience'] except: XP_User=0 await ctx.send(f"{user.mention} a {XP_User} XP (niveau {rankXP(XP_User)}) !") def rankXP(xp): n=1 while xp>=5*(n-1)**2+100+50*(n-1): n+=1 return n def XP_retour_user(xp): try: if xp>=1000000000: xp=(f"{round(xp/1000000000, 1)}Ma") except: pass try: if xp>=1000000: xp=(f"{round(xp/1000000, 1)}Mi") except: pass try: if xp>=1000: xp=(f"{round(xp/1000, 1)}k") except: pass return xp def leaderboardXP(): global XP_USER_LEADERBOARD, NAMES_USER_LEADERBOARD users=json.load(open('data/users.json', 'r')) NAMES=[] XP=[] for key, value in users.items(): #value obligatoire if key!="571348123855880192": NAMES.append(key) XP.append(users[key]['experience']) data=[] for i in range (0,len(XP)): data.append((XP[i], NAMES[i])) data.sort(reverse=False) #trier a l'envers (du + nul au meilleur) XP_USER_LEADERBOARD=[] NAMES_USER_LEADERBOARD=[] for xpU, nom in data: XP_USER_LEADERBOARD.append(xpU) NAMES_USER_LEADERBOARD.append(nom) while len(XP_USER_LEADERBOARD)>=6: #n'affiche que les 5 premiers del XP_USER_LEADERBOARD[0] del NAMES_USER_LEADERBOARD[0] @client.command() async def crp(ctx): global cycle_RICHPRESENCE listeadminBot(ctx) if ctx.author in LadminBot: if cycle_RICHPRESENCE==True: cycle_RICHPRESENCE=False await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="le bon rhum de Binks", type=discord.ActivityType.listening)) await ctx.send("Le changement de rich presence est désormais désactivé.") else: cycle_RICHPRESENCE=True await ctx.send("Le changement de rich presence est désormais activé.") while cycle_RICHPRESENCE==True: t=30 #délai entre chaque changement await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="pikachu qui dance", type=discord.ActivityType.watching)) await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="Diablo IV", type=discord.ActivityType.playing)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="Flex Air", type=discord.ActivityType.listening)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="GTA VI", type=discord.ActivityType.playing)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="r/dankmemes ¯\\_(ツ)_/¯", type=discord.ActivityType.watching)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="les cris de Sardoche", type=discord.ActivityType.listening)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="les nudes de turure", type=discord.ActivityType.watching)) else: return await asyncio.sleep(t) if cycle_RICHPRESENCE==True: await client.change_presence(status=discord.Status.idle, activity=discord.Activity(name="le bon rhum de Binks", type=discord.ActivityType.listening)) else: return await asyncio.sleep(t) else: return await ctx.send("Tu ne peux pas faire ceci.") @client.command(aliases=['+ou-', '+-']) async def plusoumoins(ctx): global plusoumoins_enjeu if plusoumoins_enjeu==False: plusoumoins_enjeu=True number = randint(1,100) guess = 5 while guess!=0: try: if ctx.content==ctx.author: await ctx.send("Choisis un nombre entre 1 et 100.") except: await ctx.send("Choisis un nombre entre 1 et 100.") try: msg = await client.wait_for('message', timeout=30) except asyncio.TimeoutError: return await ctx.send(f"Tu as mis trop de temps a répondre. La réponse était {number}.") if msg.author==ctx.author: if msg.content=="stop": plusoumoins_enjeu=False return await ctx.send(f"Fin du plus ou moins. La réponse était {number}.") try: attempt = int(msg.content) if attempt > number: if guess-1!=0: await ctx.send(f"J'pense que c'est moins... Il te reste {guess-1} essai{'s' if guess-1>1 else ''}.") guess -= 1 elif attempt < number: if guess-1!=0: await ctx.send(f"J'pense que c'est plus... Il te reste {guess-1} essai{'s' if guess-1>1 else ''}.") guess -=1 elif attempt == number: users=json.load(open('data/users.json', 'r')) try: XP_User=users[str(ctx.author.id)]['experience'] except: users[str(ctx.author.id)]={} XP_User=0 if guess==1: don_xp=50 if guess==2: don_xp=60 if guess==3: don_xp=80 if guess==4: don_xp=100 if guess==5: don_xp=150 XP_User+=don_xp users[str(ctx.author.id)]['experience']=XP_User json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) plusoumoins_enjeu=False return await ctx.send(f"Tu as trouvé, bien joué ! {don_xp} xp ont été ajouté a ton compte !") except: await ctx.send("Erreur dans la réponse, merci de n'écrire qu'un nombre. Tapez `stop` pour arrêter le jeu.") plusoumoins_enjeu=False await ctx.send(f"T'as pas trouvé... dommage, c'était {number}.") @client.command() async def rainbow(ctx, *, user="0"): global have_rainbow listeadminBot(ctx) if ctx.author in LadminBot: if user=="start": if have_rainbow==False: have_rainbow=True return await ctx.send("Le rainbow est lancé.") else: return await ctx.send("Le rainbow est déjà lancé.") if user=="stop": if have_rainbow==True: role=discord.utils.get(ctx.guild.roles, name="RAINBOW") for member in ctx.guild.members: if role in member.roles: await member.remove_roles(role) have_rainbow=False return await ctx.send("Le rainbow est arrêté.") else: return await ctx.send("Le rainbow n'est pas lancé.") if user=="0": if have_rainbow==False: return await ctx.send("Tu dois lancer le rainbow avant toute chose. `.rainbow start`") if user!="start" or user!="stop": if have_rainbow==True: if user=="0": user=ctx.author else: try: user=user.replace("<","") user=user.replace(">","") user=user.replace("@","") user=user.replace("!","") user=ctx.guild.get_member(int(user)) except: return await ctx.send("Merci de renseigné un utilisateur valide.") role=discord.utils.get(ctx.guild.roles, name="RAINBOW") Lrainbow=[] for member in ctx.guild.members: if role in member.roles: Lrainbow.append(member) if user in Lrainbow: await user.remove_roles(role) await ctx.send(f"Le rainbow pour {user.mention} est désactivé.") else: await user.add_roles(role) await ctx.send(f"Le rainbow pour {user.mention} est activé.") colours=[0xE74C3C, 0x2ECC71, 0x3498DB, 0xE67E22, 0x1ABC9C] i=0 while have_rainbow==True: i=(i+1)%len(colours) await role.edit(colour=discord.Colour(colours[i])) await asyncio.sleep(1) else: return await ctx.send("Tu dois lancer le rainbow avant toute chose. `.rainbow start`") else: return await ctx.send("Tu ne peux pas faire ceci.") @client.command() async def rire(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_rire'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} ecart=datetime.timedelta(seconds=6) #au premier message, lecart est suffisant pour que l'user gagne de l'xp if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_rire']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) rigolade=["AHAHAHAHAHAHAHAHAH", "JADORE_RIRE", "XPTDRRRRRRR MDRRRRR DES BARRES DE RIRE !!!", "ENORME_RIGOLADE"] rigolade=choice(rigolade) await ctx.message.delete() if rigolade=="JADORE_RIRE": return await ctx.send(file=discord.File("files/jadore_rire.webm")) if rigolade=="ENORME_RIGOLADE": return await ctx.send(file=discord.File("files/enorme_rigolade.mp4")) else: return await ctx.send(f"{rigolade}") else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command(aliases=['nr']) async def nickrandom(ctx): listeravaG(ctx) if ctx.author in LravaG: Liste=ctx.channel.members Liste.remove(ctx.author) user_nicked=choice(Liste) while user_nicked.bot==True or ctx.author==user_nicked: user_nicked=choice(Liste) random_nick=["BlackBathevi0r", "Turure", "Mylloon", "DJ Tanoz", "Azazoul", "Monstre2Sexe", "xD4rkS4suk3x", "P'tite salope", "U'r mom is garbage"] random_nick=choice(random_nick) await ctx.send(f"{user_nicked.mention} s'appelle maintenant {random_nick}") await user_nicked.edit(nick=random_nick) else: return await ctx.send("Tu ne peux pas faire ceci.") try: client.load_extension("cogs.meme") except Exception as error: print(error) try: client.load_extension("cogs.music") except Exception as error: print(error) try: client.load_extension("cogs.nsfw") except Exception as error: print(error) @client.command(aliases=['ss']) async def screenshare(ctx, *, channel: discord.VoiceChannel=None): if not channel: try: channel = ctx.author.voice.channel except AttributeError: return await ctx.send("Aucun channel à rejoindre. Veuillez spécifier un channel valide ou rejoindre un channel.") return await ctx.send(f"**{channel}** : https://discordapp.com/channels/{ctx.guild.id}/{channel.id}") @client.command(aliases=['baccalaureat']) # Tout les XXXXXXX étaient des id de compte Discord. async def bac(ctx): avis_bac=1 if int(ctx.author.id)==XXXXXXX: proba_bac=randint(0,20) return await ctx.send(f"T'as pas eu ton bac, c'est bien dommage.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(80,100) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(1,1) else ' pas'}. Bonne chance pour les rattrapages !") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(50,90) return await ctx.send(f"T'as pas eu ton bac, c'est bien dommage.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(97,100) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") if int(ctx.author.id)==XXXXXXX or int(ctx.author.id)==XXXXXXX: proba_bac=randint(50,95) return await ctx.send(f"T'auras jamais ton bac bg je crois :/") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(97,100) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(90,100) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(1,1) else ' pas'}.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(75,100) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(1,2) else ' pas'}.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(97,100) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(95,100) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(1,1) else ' pas'}.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(95,100) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(87,100) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(1,1) else ' pas'}.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(99,105) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(0,5) return await ctx.send(f"Il y a {proba_bac}% de chance que t'es ton bac. Perso j'pense que tu l'auras{'' if avis_bac==randint(2,2) else ' pas'}.") if int(ctx.author.id)==XXXXXXX: proba_bac=randint(97,100) return await ctx.send(f"T'as eu ton bac, félicitations à toi !") else: proba_bac=randint(0,100) return await ctx.send(f"Désolé bg mais j'te connais pas mais vu ta photo de profil et ton nom j'pense que t'as {proba_bac}% de chance d'avoir ton bac.") @client.command(aliases=['inv', 'link']) async def invitation(ctx): channel=client.get_channel(634054525312958464) #Salon #règles link=await channel.create_invite(unique=False, reason=f"créé par {ctx.author}") await ctx.send(f"**Lien d'invitation vers le serveur des ravaG :** {link}") @client.command(aliases=['memo']) async def note(ctx, *, text): if len(text)<=5: await ctx.send("Ta note doit au moins faire 5 caractères.") else: await ctx.channel.purge(limit=1) await ctx.author.send(f"** -- NOTE --**\n\n `{text}`") await ctx.send(f"Une note viens d'être envoyé à {ctx.author.name} !", delete_after=2) @client.command(aliases=['hm']) async def how_many(ctx): embed=discord.Embed(title=f"Listes users - Team ravaG", colour=discord.Colour.green()) embed.set_footer(text=f"Développé par des ravaG.") listeusers(ctx) Lusers2=[] for member in Lusers: if member.status!=discord.Status.offline: Lusers2.append(member) embed.add_field(name="**Utilisateurs** - connectés/totaux", value=f"{len(Lusers2)}/{len(Lusers)}", inline=False) listeravaG(ctx) LravaG2=[] for member in LravaG: if member.status!=discord.Status.offline: LravaG2.append(member) embed.add_field(name="**ravaG** - connectés/totaux", value=f"{len(LravaG2)}/{len(LravaG)}", inline=False) listebot(ctx) Lbot2=[] for member in Lbot: if member.status!=discord.Status.offline: Lbot2.append(member) embed.add_field(name="**Bot** - connectés/totaux", value=f"{len(Lbot2)}/{len(Lbot)}", inline=False) listeverified(ctx) Lverified2=[] for member in Lverified: if member.status!=discord.Status.offline: Lverified2.append(member) embed.add_field(name="**Verified** - connectés/totaux", value=f"{len(Lverified2)}/{len(Lverified)}", inline=False) listeinvite(ctx) Linvite2=[] for member in Linvite: if member.status!=discord.Status.offline: Linvite2.append(member) embed.add_field(name="**Invités** - connectés/totaux", value=f"{len(Linvite2)}/{len(Linvite)}", inline=False) return await ctx.send(embed=embed) @client.command() async def syntax(ctx): #Meme commande que Sardbot syntaxe="-----------------------------------------------------\n" 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+="//code en js (possible de remplacer 'js' par d'autres languages . adaptez le !)\n" syntaxe+='console.log("hi");\n' syntaxe+="```\n" syntaxe+="-----------------------------------------------------\n" syntaxe+=discord.utils.escape_markdown("`code sur une seule ligne`\n") syntaxe+="`code sur une seule ligne`\n" syntaxe+="-----------------------------------------------------\n" syntaxe+=discord.utils.escape_markdown("*texte en italique*\n") syntaxe+="*texte en italique*\n" syntaxe+="-----------------------------------------------------\n" syntaxe+=discord.utils.escape_markdown("**text en gras**\n") syntaxe+="**text en gras**\n" syntaxe+="-----------------------------------------------------\n" syntaxe+=discord.utils.escape_markdown("***text en italique-gras***\n") syntaxe+="***text en italique-gras***\n" syntaxe+="-----------------------------------------------------\n" 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+=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" await ctx.send(syntaxe) @client.command() async def love(ctx, *users: discord.Member): if len(users)==2 or len(users)==1: UneDemande=False if len(users)==1: U=users users=[] users.append(U[0]) users.append(ctx.author) UneDemande=True if users[0]==users[1]: return await ctx.send("Je suis sûr que cette personne s'aime ! :angry:") if users[0].nick: user1=list(users[0].nick) else: user1=list(users[0].name) if users[1].nick: user2=list(users[1].nick) else: user2=list(users[1].name) 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) taille_du_ms_grand=len(user2_CALC) else: taille_du_pls_grand=len(user2_CALC) taille_du_ms_grand=len(user1_CALC) coef_amour=round(float(len(list(set(user1_CALC).intersection(user2_CALC)))/taille_du_pls_grand),1)*100+((taille_du_pls_grand-taille_du_ms_grand)*1.5)*1.7 if coef_amour>100: coef_amour=100 if UneDemande==True: return await ctx.send(f"Tu as {coef_amour}% de chance de te mettre en couple avec {''.join(user1)}") await ctx.send(f"{''.join(user1)} et {''.join(user2)} ont {coef_amour}% de chance de se mettre en couple !") else: await ctx.send("Erreur! Syntaxe : `.love `") def retirerDoublons(liste): Newliste=[] for element in liste: if element not in Newliste: Newliste.append(element) return Newliste @love.error async def love_error(ctx, error): await ctx.send(str(error).replace('Member "', "Le membre **").replace('" not found', "** n'as pas été trouvé.")) @client.command(aliases=['repost']) async def delete(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) chiffre=randint(1,3) if chiffre==1: nom_fichier="delete.mp4" elif chiffre==2: nom_fichier="delete.mov" elif chiffre==3: nom_fichier="delete2.mp4" return await ctx.send(file=discord.File(f"files/{nom_fichier}")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command(aliases=['nul']) async def nulle(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) chiffre=randint(1,5) if chiffre==1: nom_fichier="nulle.mp4" elif chiffre==2: nom_fichier="nulle.mov" elif chiffre==3: nom_fichier="nulle2.mp4" elif chiffre==4: nom_fichier="nulle3.mp4" elif chiffre==5: nom_fichier="nulle4.mp4" return await ctx.send(file=discord.File(f"files/{nom_fichier}")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command(aliases=['tg']) async def tagueule(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) return await ctx.send(file=discord.File(f"files/tagueule.mp4")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command(aliases=['fdp']) async def filsdepute(ctx, *, args=""): #neutre sert a rien, juste pour le .boulanger users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) if int(ctx.author.id)==XXXXX: #XXXXX correspond a un id de compte discord return await ctx.send("C'est toi le fils de pute") if args.casefold()=="Boulanger".casefold(): chiffre=2 else: chiffre=randint(1,2) return await ctx.send(file=discord.File(f"files/filsdepute{chiffre}.mp4")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command() async def boulanger(ctx): await ctx.invoke(client.get_command("filsdepute"), args="Boulanger") @client.command(aliases=['bin']) async def binary(ctx, *, args): texte=str(args).encode() rendu="" for i in texte: rendu+=str(bin(i)[2:].zfill(8)) await ctx.send(f"{rendu}") @client.command(aliases=['cit']) async def citation(ctx, msgID: discord.Message, *, args=""): embed=discord.Embed(icon_url=msgID.author.avatar_url, title=f"{msgID.author.name}#{msgID.author.discriminator} le {str(msgID.created_at)[8:10]}/{str(msgID.created_at)[5:7]}/{str(msgID.created_at)[:4]} à {str(msgID.created_at)[11:13]}:{str(msgID.created_at)[14:16]}", description=msgID.content, colour=discord.Colour.blue()) embed.set_footer(text=f"Demandé par {ctx.author}") await ctx.channel.purge(limit=1) if len(msgID.content)<1: await ctx.send(f"Ce message n'est pas citable. Le lien du message : https://discordapp.com/channels/{msgID.guild.id}/{msgID.channel.id}/{msgID.id}") else: await ctx.send(embed=embed) if len(args)>1: await ctx.send(f"**Réponse de {ctx.author.mention} :**\n{args}") @client.command(aliases=['bvn']) async def bienvenue(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) return await ctx.send(f"**{ctx.author.mention} souhaite la bienvenue !!**", file=discord.File("files/welcome.mp4")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command() async def vidage(ctx): if ctx.channel==client.get_channel(634059175004995587): messages=[] async for x in ctx.message.channel.history(): if x.author==ctx.author: messages.append(x) await ctx.channel.delete_messages(messages) await ctx.send("Tous vos messages ont été supprimés.", delete_after=2) await ctx.send("Merci de ne pas abuser de cette commande.", delete_after=4) else: await ctx.send("Tu ne peux pas utiliser cette commande.") @client.command() async def runtime(ctx): now = datetime.datetime.now() elapsed = now - starttime seconds = elapsed.seconds minutes, seconds = divmod(seconds, 60) hours, minutes = divmod(minutes, 60) return await ctx.send(f"Lancé depuis {elapsed.days} jours, {hours}h {minutes}min {seconds}sec.") @client.command() async def ctsurenft(ctx): await ctx.invoke(client.get_command("memes"), args="ctsurenft") @client.command() async def xd(ctx): chiffre=randint(1,3) if chiffre==1: nom_fichier="XD.jpg" elif chiffre==2: nom_fichier="XD2.jpg" elif chiffre==3: nom_fichier="XD3.jpg" return await ctx.send("?XD", file=discord.File(f"files/{nom_fichier}")) @client.command() async def suceptible(ctx): return await ctx.send(file=discord.File(f"files/suceptible.mp4")) @client.command() async def troll(ctx): users=json.load(open('data/users.json', 'r')) try: dernier_message_temps=users[str(571348123855880192)]['dernier_message_XP_pics'] dernier_message_temps=datetime.datetime.strptime(dernier_message_temps, '%Y-%m-%dT%H:%M:%S.%f') created_at=datetime.datetime.now() ecart=created_at-dernier_message_temps #caclul l'écart except: users[str(571348123855880192)]={} dernier_message_temps=users[str(571348123855880192)]['experience']=-1 ecart=datetime.timedelta(seconds=6) if ecart.seconds>=5: users[str(571348123855880192)]['dernier_message_XP_pics']=datetime.datetime.now() json.dump(users, open('data/users.json', 'w'), default=JSONEncoder, indent=4, sort_keys=True) chiffre=randint(1,3) if chiffre==1: nom_fichier="Troll.png" elif chiffre==2: nom_fichier="Troll2.webp" elif chiffre==3: nom_fichier="Troll3.png" return await ctx.send(file=discord.File(f"files/{nom_fichier}")) else: t=5-ecart.seconds await ctx.send(f"Tu dois encore attendre {t} seconde{'s' if t>1 else ''} avant de lancer cette commande.", delete_after=2) @client.command() async def delchat(ctx, *, number: int): listeravaG(ctx) if ctx.author in LravaG: messages=[] async for x in ctx.message.channel.history(limit=number+1): messages.append(x) try: await ctx.channel.delete_messages(messages) except: return await ctx.send("Je ne peux pas supprimer les messages vieux de plus de 14 jours.") await ctx.send('Messages supprimés !', delete_after=4) await ctx.send("Merci de ne pas abuser de cette commande.", delete_after=4) else: await ctx.send("Tu ne peux pas faire ça.") # Commande listes def listeravaG(ctx): global LravaG LravaG=[] ravaG=discord.utils.get(ctx.guild.roles, name="😎 ravaG") for member in ctx.guild.members: if ravaG in member.roles: LravaG.append(member) def listeverified(ctx): global Lverified Lverified=[] verified=discord.utils.get(ctx.guild.roles, name="🐾 Verified") for member in ctx.guild.members: if verified in member.roles: Lverified.append(member) def listeinvite(ctx): global Linvite Linvite=[] invite=discord.utils.get(ctx.guild.roles, name="👤 Invité") for member in ctx.guild.members: if invite in member.roles: Linvite.append(member) def listebot(ctx): global Lbot Lbot=[] bot=discord.utils.get(ctx.guild.roles, name="🤖 Bot") for member in ctx.guild.members: if bot in member.roles: Lbot.append(member) def listeusers(ctx): global Lusers Lusers=[] for member in ctx.guild.members: Lusers.append(member) def listeadminBot(ctx): global LadminBot LadminBot=[] adminBot=discord.utils.get(ctx.guild.roles, name="admin-bot") for member in ctx.guild.members: if adminBot in member.roles: LadminBot.append(member) def listechannel(ctx): global LchannelID LchannelID=[] try: for channel in ctx.guild.channels: LchannelID.append(channel.id) except AttributeError: pass temps_lantence_avant=int(time.strftime("%S"))-1 client.run(token)