async def donation_ask(client: discord.Client, message: discord.Message, args: List[str], config): # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Rappel de la commande de don :**\n\n" "`!don`.")) donation_link = 'http://clash-of-clans-francais.ovh/faire-un-don/' await message.author.send(embed=discord.Embed(color=0xFFFFFF).set_author( icon_url= 'https://pbs.twimg.com/profile_images/1142194267319873541/imd-tTed_400x400.jpg', name='Commande de don' ).set_thumbnail( url= 'https://pbs.twimg.com/profile_images/1142194267319873541/imd-tTed_400x400.jpg' ).add_field( name= "Vous pouvez suivre les instructions suivantes pour effectuer un don.", value= f'Le site de don est le suivant : [{donation_link}]({donation_link})\n\n' f'Votre identifiant unique est `{message.author.id}`', inline=False)) await message.channel.send(embed=EmbedsManager.complete_embed( 'Les informations concernants les dons vous ont été envoyé en message privé.' ))
async def annonce_msg(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'annonce'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send(embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}annonce <#channel> <couleur> <contenue>`\n" f"La couleur doit etre au format hexadécimale (FFFFFF) sans le #." f" Une image peut etre ajouté à la commande.")) if len(message.channel_mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de specifier un channel")) # Get channel channel: discord.TextChannel = message.channel_mentions[0] args.pop(0) # Get color if not args: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de specifier une couleur valide." )) try: color = int(args.pop(0), 16) except: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de specifier une couleur valide." )) # Get content if not args: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de specifier un contenue valide." )) content = ' '.join(args) embed = discord.Embed(color=color) embed.description = content # Get image if message.attachments: embed.set_image(url=message.attachments[0].url) try: await channel.send(embed=embed) await message.channel.send(embed=EmbedsManager.complete_embed( f"Le message a bien été envoyé dans {channel} : \n {content}")) except: await message.channel.send(embed=EmbedsManager.error_embed( "Je n'ai pas les permissions pour ce salon."))
async def remove_customcommands(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'custom_commands'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}remove_command <command_id>`")) # Check inputs if len(args) != 1: return await message.channel.send( embed=EmbedsManager.error_embed(f":x: Erreur dans la commande.")) command_name = args[0] custom_commands: List[CustomCommand] = session.query( CustomCommand).filter_by(command=command_name).all() if len(custom_commands) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur. Je ne trouve pas cette commande.")) session.delete(custom_commands[0]) session.commit() await message.channel.send(embed=EmbedsManager.complete_embed( f"Je viens de supprimer la commande **{command_name}**."))
async def get_user(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: await message.channel.send(embed=EmbedsManager.error_embed(results)) if results == 0: await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) return if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Server command reminder:** \n\n" "`!user`.\n" "You can optionally add a mention to a user to get it profile") ) if not message.mentions: await message.channel.send(embed=EmbedsManager.complete_embed( f"https://epimodo.gastbob40.ovh/moderation/profile/")) else: await message.channel.send(embed=EmbedsManager.complete_embed( f"https://epimodo.gastbob40.ovh/moderation/profile/{message.mentions[0].id}" ))
async def user_information(client: discord.Client, message: discord.Message, args: List[str], config): if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Rappel de la commande d'information utilisateur :**\n\n" "`!ui <@user>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez mentionner un utilisateur.")) await message.channel.send(embed=EmbedsManager.sanction_embed( f"Voici les informations de {target.name}#{target.discriminator} :", ).set_thumbnail(url=target.avatar_url).add_field( name='Surnom', value=target.display_name, inline=True ).add_field(name='Tag', value=target.discriminator, inline=True).add_field( name='ID', value=target.id, inline=True).add_field( name='Compte créé le', value=target.created_at.strftime('%d/%m/%Y à %H:%M:%S'), inline=True).add_field( name='A rejoint le serveur le', value=target.joined_at.strftime('%d/%m/%Y à %H:%M:%S'), inline=True).set_footer(icon_url=client.user.avatar_url, text='Made By Gastbob40'))
async def change_prefix(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'prefix'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}prefix <nouveau prefix>`")) # Check input if len(args) != 1: await message.channel.send(embed=EmbedsManager.error_embed( f"Erreur dans la commande.\nRappel : `{config['prefix']}prefix <nouveau prefix>`" )) return await message.channel.send(embed=EmbedsManager.complete_embed( f"⚙ Le préfix `{config['prefix']}` a été changé par `{args[0]}`.")) with open('run/config/config.yml', 'w', encoding='utf8') as outfile: yaml.dump(config, outfile, default_flow_style=False, allow_unicode=True)
async def warn_member(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Warning command reminder:**\n\n" "`!av <@user> <reason>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must mention an user.")) args = args[1:] if len(args) == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must add a reason.")) warn = Warn() warn.user_id = target.id warn.moderator_id = message.author.id warn.reason = ' '.join(args) warn.save() _, res = api_manager.get_data('warns', user_id=target.id) nb_warns = len(res) await message.channel.send(embed=EmbedsManager.sanction_embed( f"Avertissement du membre {target.display_name}.", f"Vous venez de l'avertir pour : `{warn.reason}`.").add_field( name="Nombre :", value=nb_warns, inline=False).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) await client.get_channel( config['channels']['log_reactions'] ).send(embed=EmbedsManager.sanction_embed( f"Avertissement du membre {target.display_name}.", f"Il a été averti pour : `{warn.reason}`.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40'). add_field(name="Auteur :", value=message.author.display_name)) await target.send(embed=EmbedsManager.sanction_embed( f"Vous venez de subir un avertissement.", f"Vous venez d'être averti pour : `{warn.reason}`.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40' ).add_field(name="Auteur :", value=message.author.display_name))
async def kick_member(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'kick'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}kick <@pseudo> <reason>`\n" f"`{config['prefix']}kick <@pseudo> -r <reason_id>`")) # Check inputs if len(message.mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur dans la commande. Merci de mentionner un utilisateur.") ) if len(args) < 2: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur dans la commande. Merci de mettre une raison.")) with open('run/config/reasons.yml', 'r', encoding='utf8') as file: reasons = yaml.safe_load(file) current_reason = "" if args[0] == '-r': # Saved reason try: for reason_index in args[1:]: current_reason += f"- {reasons[int(reason_index)]}\n" except: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur dans la commande. Merci de mettre un index d'erreur valide." )) else: # Custom reason current_reason = " ".join(args) new_kick = Kick(message.mentions[0].id, message.author.id, current_reason) session.add(new_kick) session.commit() await message.channel.send(embed=EmbedsManager.complete_embed( f"👢 Le membre **{message.mentions[0]}** a été kické (id `k{new_kick.id}`):\n{current_reason}" )) await message.mentions[0].kick()
async def unban(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results)) # Check lvl permissions if results == 0 or results == 1: return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Unbanning command reminder:**\n\n" "`!unban <@user>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must mention an user.")) await message.channel.send(embed=EmbedsManager.complete_embed( f"You just unbanned {target.display_name}.")) await LogManager.complete_log(client, 'bans', message.author, message.guild, "", "") try: await target.send(embed=EmbedsManager.information_embed( "You have been unbanned" " from the server {}".format(message.guild.name))) await target.unban(reason="") except: await message.channel.send( embed=EmbedsManager.error_embed("Error in banning the member."))
async def unmute(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results)) # Check lvl permissions if results == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**UnMuting command reminder:**\n\n" "`!unmute <@user> (<#channel>)`.\n")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must mention an user.")) # Check role _, target_results = permissions_manager.get_permissions( target, message.guild) if target_results >= results: return await message.channel.send(embed=EmbedsManager.error_embed( "You cannot unmute someone greater than or equal to you.")) channels = message.channel_mentions if len( message.channel_mentions) >= 1 else [message.channel] await message.channel.send(embed=EmbedsManager.complete_embed( f"You just unmuted {target.display_name} in channel(s) : " f"{' '.join([chan.name for chan in channels]) }.")) await LogManager.complete_log( client, 'unmutes', message.author, message.guild, f"unmuted {target.display_name} in channel(s) : " f"{' '.join([chan.name for chan in channels]) }.", '') for channel in channels: try: if not target.permissions_in(channel).send_messages: await channel.set_permissions(target, overwrite=None) except: pass
async def unfreeze_server(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'freeze'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}rfreeze`")) # Check inputs current_message: discord.Message = await message.channel.send( embed=EmbedsManager.complete_embed( f"{message.author.mention} Vous avez décidé de dégeler le serveur.\n" + f"Confirmer vous ce choix ?")) await current_message.add_reaction('✅') await current_message.add_reaction('❌') def check(reaction: discord.Reaction, user: discord.User): return user == message.author and (str(reaction.emoji) == '✅' or str(reaction.emoji) == '❌') try: reaction, user = await client.wait_for('reaction_add', timeout=20.0, check=check) except asyncio.TimeoutError: await message.channel.send(embed=EmbedsManager.error_embed( f"Vous avez __refusé__ le dégel du serveur.")) else: if str(reaction.emoji) == '❌': return await message.channel.send(embed=EmbedsManager.error_embed( f"Vous avez __refusé__ le dégel du serveur.")) await message.channel.send( embed=EmbedsManager.complete_embed(f"Le serveur a été dégelé")) members: List[discord.Member] = message.guild.members for member in members: if not member.guild_permissions.manage_messages: for channel in message.guild.channels: if not member.permissions_in(channel).send_messages: await channel.set_permissions(member, overwrite=None)
async def get_mutes(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions(message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results) ) # Check lvl permissions if results == 0: return await message.channel.send( embed=EmbedsManager.error_embed("You don't have the necessary permissions.") ) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed("**Muting command reminder:**\n\n" "`!get_mute <@user>`.\n") ) # Check if target exist target: discord.Member = message.mentions[0] if len(message.mentions) == 1 else False if not target: return await message.channel.send( embed=EmbedsManager.error_embed("Error in the command. You must mention an user.") ) # Check role _, target_results = permissions_manager.get_permissions(target, message.guild) if target_results >= results: return await message.channel.send( embed=EmbedsManager.error_embed("You cannot get mutes for someone greater than or equal to you.") ) channels = [] try: for channel in message.guild.channels: if not target.permissions_in(channel).send_messages: channels.append(channel) await message.channel.send( embed=EmbedsManager.complete_embed(f"{target.display_name} is muted in the following channel(s) : " + "{}.".format(',\n '.join([chan.name for chan in channels]))) ) except Exception as e: await message.channel.send( embed=EmbedsManager.error_embed(f"Error in muting the member. : {e}") )
async def revoke_mute(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) if not PermissionsManager.has_perm(message.author, 'mute'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}rmute <mute_id>`")) if len(args) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande, merci de spécifier l'index du mute." )) if not args[0].startswith("m"): return await message.channel.send( embed=EmbedsManager.error_embed(":x: Erreur, index invalide.")) index = int(args[0][1:]) current_mute: Mute = session.query(Mute).filter_by(id=index).first() if current_mute is None: return await message.channel.send( embed=EmbedsManager.error_embed(":x: Erreur, index invalide.")) if not current_mute.is_active: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur, ce mute est déjà révoqué.")) current_mute.is_active = False session.commit() target: discord.Member = message.guild.get_member(current_mute.target_id) for channel in message.guild.channels: if not target.permissions_in(channel).send_messages: await channel.set_permissions(target, overwrite=None) await message.channel.send(embed=EmbedsManager.complete_embed( f"⚠ Le mute **{args[0]}** a été révoqué."))
async def revoke_warn(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'warn'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}rwarn <warn_id>`")) # Check inputs if len(args) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande, merci de spécifier l'index de l'avertissement." )) if not args[0].startswith("w"): return await message.channel.send( embed=EmbedsManager.error_embed(f":x: Erreur, index invalide.")) # Process code index = int(args[0][1:]) current_warn: Warn = session.query(Warn).filter_by(id=index).first() if current_warn is None: return await message.channel.send( embed=EmbedsManager.error_embed(f":x: Erreur, index invalide.")) if not current_warn.is_active: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur, cet avertissement est déjà révoqué.")) current_warn.is_active = False session.commit() await message.channel.send(embed=EmbedsManager.complete_embed( f"🔨 L'avertissement **{args[0]}** a été révoqué."))
async def add_reason(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'manage_reason'): return await message.channel.send( embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande." ) ) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}reason_add <reason>`" ) ) # Check inputs if len(args) < 2: return await message.channel.send( embed=EmbedsManager.error_embed( f":x: Merci de mettre une raison d'au moins deux mots." ) ) # Process code with open('run/config/reasons.yml', 'r', encoding='utf8') as file: reasons = yaml.safe_load(file) reasons.append((' '.join(args))) with open('run/config/reasons.yml', 'w', encoding='utf8') as outfile: yaml.dump(reasons, outfile, default_flow_style=False, allow_unicode=True) await message.channel.send( embed=EmbedsManager.complete_embed( f"{message.author.mention} La raison `{reasons[-1]}` a été ajouté à la liste.\n" f"Son numéro d'attribution est le {len(reasons)}." ) )
async def add_customcommands(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'custom_commands'): return await message.channel.send( embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande." ) ) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}add_command <name> <content>`" ) ) # Process code if len(args) < 2: return await message.channel.send( embed=EmbedsManager.error_embed( f":x: Erreur dans la commande." ) ) command_name = args[0] command_content = ' '.join(args[1:]) await message.channel.send( embed=EmbedsManager.complete_embed( f"{message.author.mention} vient de créer une nouvelle commande :\n" f"**Nom :** {command_name}\n" f"**Contenue :** {command_content}." ) ) custom_command = CustomCommand(command_name, command_content) session.add(custom_command) session.commit()
async def list_customcommands(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}list_command`")) custom_commands: List[CustomCommand] = session.query(CustomCommand).all() content = "Voici les commandes personnalisées :" for custom_command in custom_commands: content += f'\n - `{custom_command.command}`' await message.channel.send(embed=EmbedsManager.complete_embed(content))
async def get_top(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) # Display help if args and args[0] == '-h': return await message.channel.send(embed=EmbedsManager.information_embed( "**Rappel de la commande de récupération des meilleurs messages :**\n\n" "`!top`.")) # Get channel and messages channel: discord.TextChannel = message.guild.get_channel( config['channels']['top']) john_message: discord.Message = await channel.fetch_message( id=683660205250183198) messages: List[discord.Message] = await channel.history( limit=None, after=john_message.edited_at).flatten() # Get cleaned data emoji = '👍' records = [] for msg in messages: if not msg.author.bot: for reaction in msg.reactions: if reaction.emoji == emoji: records.append({ 'author': msg.author, 'content': msg.content, 'date': msg.created_at, 'link': msg.jump_url, 'count': reaction.count }) # Sort data records = sorted(records, key=lambda x: x['count'], reverse=True) # Get just the 10 best records records = records[:10] for index, record in enumerate(records): content = record['content'] if len(content) > 1024: content = record['content'][:1020] + '...' embed = discord.Embed(color=0xff0000) \ .set_author( name=f"Message {index + 1}." ) \ .add_field( name="Contenu du message", value=content, inline=False ) \ .add_field( name="Nombre de vote (👍) :", value=record['count'], inline=True ) \ .add_field( name="Lien du message", value=record['link'], inline=True ) \ .set_thumbnail(url=record['author'].avatar_url) embed.description = f"Proposition de {record['author'].name}#{record['author'].discriminator} " \ f"({record['author'].id})" await message.channel.send(embed=embed)
async def clear_messages(client: discord.Client, message: discord.Message, args: List[str]): channel: discord.TextChannel = message.channel state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results)) # Check lvl permissions if results != 3 and not message.author.permissions_in( message.channel).manage_messages: return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Clearing command reminder:**\n\n" "`!clear <number of message>`.")) # Check argument validity if not args: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must add a number of message (limit to 100)." )) if not args[0].isdigit(): return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must specify a valid number of message (limit to 100)." )) message_count = int(args[0]) + 2 if message_count <= 0 or message_count > 100: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must specify a number of message between 1 and 98." )) # Send message sent_message: discord.Message = await message.channel.send( embed=EmbedsManager.complete_embed( f"Do you really want to delete {message_count - 2} messages ?\n" f"*You have 20s to accept.*")) # Add reaction await sent_message.add_reaction('🆗') # Check response def check(reaction, user): return user == message.author and (str(reaction.emoji) == '🆗') try: reaction, user = await client.wait_for('reaction_add', timeout=20.0, check=check) except asyncio.TimeoutError: await message.channel.send(f"You have canceled the clear.") else: # check response messages = await channel.history(limit=message_count).flatten() try: await message.channel.delete_messages(messages) await message.channel.send(embed=EmbedsManager.complete_embed( f"The deletion of the messages was successfully completed")) except discord.errors.HTTPException: await message.channel.send(embed=EmbedsManager.error_embed( "You can only bulk delete messages that are under 14 days old." ))
async def bantemp_member(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Rappel de la commande de bannissement temporaire :**\n\n" "`!bt <@user> <durée> <reason>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez mentionner un utilisateur.")) args = args[1:] if len(args) == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez spécifié une durée.")) bantemp = TempBan() bantemp.user_id = target.id bantemp.moderator_id = message.author.id if args[0].isdigit(): if int(args[0]) < 24: delta = f'{int(args[0])} heure(s)' elif int(args[0]) % 24 == 0: delta = f'{int(args[0]) / 24} jour(s)' else: delta = f'{math.floor(int(args[0]) / 24)} jour(s) et {int(args[0]) % 24} heure(s)' bantemp.end_time += timedelta(hours=int(args[0])) elif args[0] and args[0][-1] == 'd' and args[0][:-1].isdigit(): delta = f'{int(args[0][:-1])} jour(s)' bantemp.end_time += timedelta(days=int(args[0][:-1])) else: return await message.channel.send(embed=EmbedsManager.error_embed( f"Erreur dans la commande. La date spécifiée est incorrecte (`{args[0]}`)." )) args = args[1:] if len(args) == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez spécifié une raison.")) bantemp.reason = ' '.join(args) bantemp.save() _, res = api_manager.get_data('temp-bans', user_id=target.id) nb_bt = len(res) await message.channel.send(embed=EmbedsManager.sanction_embed( f"Bannissement temporaire du membre {target.display_name} pour une durée de {delta}.", f"Ce joueur ne respecte toujours pas les règles malgré un rappel d'un Modérateur, il prend donc un BanTemp" ).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40' ).add_field( name="Rappel :", value= "Sachez que plusieurs BanTemp peuvent conduire à un Bannissement définitif du serveur!\n\n" f"Pour évitez cela, prenez connaissance des {client.get_channel(280735672527224842).mention} qui ne" f" sont pas nombreuses mais importantes pour le bon fonctionnement du serveur.", inline=False ).add_field(name="Raison :", value=bantemp.reason, inline=True).add_field( name="Durée :", value=delta, inline=True ).add_field(name="Nombre :", value=nb_bt, inline=True).set_image( url= 'https://cdn.discordapp.com/attachments/377179445640822784/663478346763599872' '/photostudio_15295854416791.png')) await client.get_channel( config['channels']['log_reactions'] ).send(embed=EmbedsManager.sanction_embed( f"Bannissement temporaire du membre {target.display_name} pour une durée de {delta}.", f"Il a été bantemp pour : `{bantemp.reason}`.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40' ).add_field(name="Durée :", value=delta, inline=True).add_field( name="Auteur :", value=message.author.display_name, inline=True)) try: await target.send(embed=EmbedsManager.sanction_embed( f"Vous venez de subir un bannissement temporaire de {delta}.", f"Vous venez d'être bantemp pour : `{bantemp.reason}`.\n\n" f"Sachez que plusieurs bans temporaires conduisent à un ban définitif." ).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40' ).add_field(name="Durée :", value=delta, inline=True).add_field( name="Auteur :", value=message.author.display_name, inline=True)) except: pass # Add roles with open("src/_data/roles.yml", 'r') as stream: roles = yaml.safe_load(stream) role = [Role(data=x) for x in roles if x['slug'].startswith('ban')] for r in role: await target.add_roles( message.guild.get_role(r.role_id), reason=f"Bantemp pour {bantemp.reason} pour une durée de {delta}") for channel in message.guild.channels: try: if isinstance(channel, discord.TextChannel): if target.permissions_in(channel).read_messages: await channel.set_permissions(target, send_messages=False) elif isinstance(channel, discord.VoiceChannel): if target.permissions_in(channel).connect: await channel.set_permissions(target, connect=False) except: print("Cannot do magic in " + channel.name)
async def permissions(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not message.author.guild_permissions.administrator: return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}perm list`\n" f"`{config['prefix']}perm list <perm_name>`\n" f"`{config['prefix']}perm add <perm_name> <@role>`\n" f"`{config['prefix']}perm remove <perm_name> <@role>`\n")) if not args: return await message.channel.send( embed=EmbedsManager.error_embed(":x: | Erreur dans la commande.")) command = args.pop(0) if command not in ['list', 'add', 'remove']: return await message.channel.send( embed=EmbedsManager.error_embed(":x: | Erreur dans la commande.")) with open('src/_data/permissions.yml', 'r') as file: perms = yaml.safe_load(file) if command == 'list': # Case if we don't specify a perm name if not args: content = 'Voici les différentes permissions que je peux mettre : \n\n' for perm_name in perms.keys(): content += f' - {perm_name}\n' return await message.channel.send( embed=EmbedsManager.complete_embed(content)) else: # Case if we specify a perm name if not args[0] in perms.keys(): return await message.channel.send( embed=EmbedsManager.error_embed( f":x: | Hum, je ne trouve pas la permission `{args[0]}`." )) content = f'Voici les roles ayant la permission `{args[0]}`\n\n' for role_id in perms[args[0]]: role: discord.Role = message.guild.get_role(role_id) content += f' - {role.name} ({role.id}) \n' return await message.channel.send( embed=EmbedsManager.complete_embed(content)) elif command == 'add': if len(args) < 2 or len(message.role_mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: | Erreur dans la commande.")) perm_name = args[0] role = message.role_mentions[0] if role.id in perms[perm_name]: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: | Hum, le role `{role.name}` a déjà la permission `{perm_name}`." )) perms[perm_name].append(role.id) with open('src/_data/permissions.yml', 'w', encoding='utf8') as outfile: yaml.dump(perms, outfile, default_flow_style=False, allow_unicode=True) return await message.channel.send(embed=EmbedsManager.complete_embed( f"Le role `{role.name}` a maintenant la permission `{perm_name}`.") ) elif command == 'remove': if len(args) < 2 or len(message.role_mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: | Erreur dans la commande.")) perm_name = args[0] role = message.role_mentions[0] if role.id not in perms[perm_name]: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: | Hum, le role `{role.name}` n'a pas la permission `{perm_name}`." )) perms[perm_name].remove(role.id) with open('src/_data/permissions.yml', 'w', encoding='utf8') as outfile: yaml.dump(perms, outfile, default_flow_style=False, allow_unicode=True) return await message.channel.send(embed=EmbedsManager.complete_embed( f"Le role `{role.name}` n'a maintenant plus la permission `{perm_name}`." ))
async def get_mod(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}mod <@user>`")) # Check inputs if len(message.mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Erreur dans la commande. Merci de mentionner un utilisateur.") ) target: discord.Member = message.mentions[0] infos = { 'warns': session.query(Warn).filter_by(target_id=target.id, is_active=True).all(), 'rwarns': session.query(Warn).filter_by(target_id=target.id, is_active=False).all(), 'kicks': session.query(Kick).filter_by(target_id=target.id, is_active=True).all(), 'rkicks': session.query(Kick).filter_by(target_id=target.id, is_active=False).all(), 'bans': session.query(Ban).filter_by(target_id=target.id, is_active=True).all(), 'rbans': session.query(Ban).filter_by(target_id=target.id, is_active=False).all(), 'mutes': session.query(Mute).filter_by(target_id=target.id, is_active=True).all(), 'rmutes': session.query(Mute).filter_by(target_id=target.id, is_active=False).all() } embed = discord.Embed() embed.set_author(name=f'{target.display_name} (ID: {target.id})', icon_url=target.avatar_url) \ .add_field(name=f'Voici les informations sur {target.display_name}:', value=f'Sourdine : {len(infos["mutes"]) + len(infos["rmutes"])}' f' (dont {len(infos["rmutes"])} révoqués).\n' f'Avertissements : {len(infos["warns"]) + len(infos["rwarns"])}' f' (dont {len(infos["rwarns"])} révoqués).\n' f'Exclusions : {len(infos["kicks"]) + len(infos["rkicks"])}' f' (dont {len(infos["rkicks"])} révoqués).\n' f'Bannissements : {len(infos["bans"]) + len(infos["rbans"])}' f' (dont {len(infos["rbans"])} révoqués).\n') \ .set_footer(text=f"{client.user.display_name}", icon_url=client.user.avatar_url) embed.timestamp = datetime.now() - timedelta(hours=2) await message.channel.send(embed=embed) for type in ['warns', 'kicks', 'bans']: embed = discord.Embed() \ .set_author(name=f'{type} de {target.display_name} (ID: {target.id})', icon_url=target.avatar_url) if infos[type]: for things in infos[type]: embed.add_field( name= f"{type} par {message.guild.get_member(things.author_id)}" f" (ID: {type[0]}{things.id})", value= f"Le {things.date.day}/{things.date.month}/{things.date.year}" f" à {things.date.hour}:{things.date.minute}" f" pour : \n {things.reason}") await message.channel.send(embed=embed)
async def unbantemp_member(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Rappel de la commande de bannissement temporaire :**\n\n" "`!eb <@user>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez mentionner un utilisateur.")) state, res = api_manager.get_data( 'temp-bans', user_id=str(target.id), is_active=True, ) if not state: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans l'api. Merci de contacter gast.")) if len(res) == 0: return await message.channel.send(embed=EmbedsManager.error_embed( f"Erreur dans la commande. {target.display_name} n'a pas de bantemp actif" )) # Remove roles with open("src/_data/roles.yml", 'r') as stream: roles = yaml.safe_load(stream) role = [Role(data=x) for x in roles if x['slug'].startswith('ban')] for r in role: await target.remove_roles(message.guild.get_role(r.role_id)) # Send message await message.channel.send(embed=EmbedsManager.sanction_embed( f"Vous venez de retirer le bantemp de {target.display_name}" ).set_footer(icon_url=client.user.avatar_url, text='Made By Gastbob40')) await client.get_channel( config['channels']['log_reactions'] ).send(embed=EmbedsManager.sanction_embed( f"Le bantemp de {target.display_name} vient d'être retiré.", f"Auteur : {message.author.display_name}").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) try: await target.send(embed=EmbedsManager.sanction_embed( f"{message.author.display_name} vient de retirer votre bantemp." ).set_footer(icon_url=client.user.avatar_url, text='Made By Gastbob40') ) except: pass # Update data temp_bans = [TempBan(data=x) for x in res] for bt in temp_bans: bt.is_active = False bt.update() # Reset permission for channel in message.guild.channels: try: if isinstance(channel, discord.TextChannel): if not target.permissions_in(channel).send_messages: await channel.set_permissions(target, overwrite=None) elif isinstance(channel, discord.VoiceChannel): if not target.permissions_in(channel).connect: await channel.set_permissions(target, overwrite=None) except: pass
async def add_general_mute(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results)) # Check lvl permissions if results == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send(embed=EmbedsManager.information_embed( "**General Muting command reminder:**\n\n" "`!g_mute <@user> <reason>`.\n" "An image can be added to the command (it will be saved for logs)." )) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must mention an user.")) # Check role _, target_results = permissions_manager.get_permissions( target, message.guild) if target_results >= results: return await message.channel.send(embed=EmbedsManager.error_embed( "You cannot mute someone greater than or equal to you.")) args = args[1:] if len(args) == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must add a reason.")) reason = ' '.join(args) image_url = message.attachments[0].proxy_url if len( message.attachments) == 1 else '' api_manager.post_data('mutes', target_id=target.id, author_id=message.author.id, server_id=message.guild.id, reason=reason, is_active=True, image=image_url) await message.channel.send(embed=EmbedsManager.complete_embed( f"You just muted {target.display_name} for {reason}.")) await LogManager.complete_log(client, 'general mutes', message.author, message.guild, reason, image_url) await target.send(embed=EmbedsManager.sanction_embed( 'Mute', message.guild, reason, image_url)) for channel in message.guild.channels: try: if target.permissions_in(channel).read_messages: await channel.set_permissions(target, send_messages=False) except: pass
async def mute_member(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'mute'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}mute <@pseudo> <reason>`\n" f"`{config['prefix']}mute <@pseudo> -r <reason_id>`")) # Check inputs if len(message.mentions) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de mentionner un utilisateur." )) if len(args) < 3: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de mettre une raison.")) # Process code args = args[1:] if not args[0].isdigit(): return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de mettre une durée valide.")) duration: int = int(args[0]) args = args[1:] with open('run/config/reasons.yml', 'r', encoding='utf8') as file: reasons = yaml.safe_load(file) current_reason = "" if args[0] == '-r': # Saved reason try: for reason_index in args[1:]: current_reason += f"- {reasons[int(reason_index)]}\n" except: return await message.channel.send(embed=EmbedsManager.error_embed( f":x: Erreur dans la commande. Merci de mettre un index d'erreur valide." )) else: # Custom reason current_reason = " ".join(args) new_mute = Mute(message.mentions[0].id, message.author.id, current_reason, duration) session.add(new_mute) session.commit() # Remove permission target: discord.Member = message.mentions[0] for channel in message.guild.channels: if target.permissions_in(channel).read_messages: await channel.set_permissions(target, send_messages=False) await message.channel.send(embed=EmbedsManager.complete_embed( f"⚠ Le membre **{message.mentions[0]}** a été mute (id `m{new_mute.id}`):\n{current_reason}" ))
async def remove_general_mute(client: discord.Client, message: discord.Message, args: List[str]): state, results = permissions_manager.get_permissions( message.author, message.guild) if not state: return await message.channel.send( embed=EmbedsManager.error_embed(results)) # Check lvl permissions if results == 0: return await message.channel.send(embed=EmbedsManager.error_embed( "You don't have the necessary permissions.")) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**General UnMuting command reminder:**\n\n" "`!g_unmute <@user>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Error in the command. You must mention an user.")) # Check role _, target_results = permissions_manager.get_permissions( target, message.guild) if target_results >= results: return await message.channel.send(embed=EmbedsManager.error_embed( "You cannot unmute someone greater than or equal to you.")) _, results = api_manager.get_data('mutes', target_id=target.id, is_active=True) if not results: return await message.channel.send( embed=EmbedsManager.error_embed("This person has no active mute.")) mute = results[0] mute['is_active'] = False for channel in message.guild.channels: try: if not target.permissions_in(channel).send_messages: await channel.set_permissions(target, overwrite=None) except: pass await message.channel.send(embed=EmbedsManager.complete_embed( f"You just unmuted {target.display_name}.")) api_manager.edit_data('mutes', mute['id'], target_id=mute['target_id'], author_id=mute['author_id'], server_id=mute['server_id'], date=mute['date'], reason=mute['reason'], image=mute['image'], is_active=False) await LogManager.complete_log(client, 'general unmutes', message.author, message.guild, "General unmute")
async def remove_reason(client: discord.Client, message: discord.Message, args: List[str]): with open('run/config/config.yml', 'r') as file: config = yaml.safe_load(file) # Check permissions if not PermissionsManager.has_perm(message.author, 'manage_reason'): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions pour cette commande.")) # Help message if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "Rappel de la commande : \n" f"`{config['prefix']}reason_remove <number>`")) # Check inputs if len(args) != 1: return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Merci de mettre le numéro de la raison à retirer.")) # Process code with open('run/config/reasons.yml', 'r', encoding='utf8') as file: reasons = yaml.safe_load(file) index = int(args[0]) - 1 if index >= len(reasons): return await message.channel.send(embed=EmbedsManager.error_embed( ":x: Merci de mettre un index valide.")) current_message: discord.Message = await message.channel.send( embed=EmbedsManager.complete_embed( f"{message.author.mention} La raison **{reasons[index]}** va être retiré de la liste.\n" f"Confirmer vous ce choix ?")) await current_message.add_reaction('✅') await current_message.add_reaction('❌') def check(reaction: discord.Reaction, user: discord.User): return user == message.author and (str(reaction.emoji) == '✅' or str(reaction.emoji) == '❌') try: reaction, user = await client.wait_for('reaction_add', timeout=20.0, check=check) except asyncio.TimeoutError: return await message.channel.send(embed=EmbedsManager.error_embed( f"Vous avez __refusé__ la suppresion de la raison `{reasons[index]}` de la liste." )) else: if str(reaction.emoji) == '❌': return await message.channel.send(embed=EmbedsManager.error_embed( f"Vous avez __refusé__ la suppresion de la raison `{reasons[index]}` de la liste." )) await message.channel.send(embed=EmbedsManager.complete_embed( f"La raison **{reasons[index]}** a été __définitivement__ retiré de la liste." )) reasons.pop(index) with open('run/config/reasons.yml', 'w', encoding='utf8') as outfile: yaml.dump(reasons, outfile, default_flow_style=False, allow_unicode=True)
async def view_warns(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author) and len( message.mentions): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) channel = 289476916044627978 if not PermissionChecker.is_moderator( message.author) and message.channel.id != channel: return await message.channel.send(embed=EmbedsManager.error_embed( "Hum, vous n'êtes pas dans le bon salon.\n\n" f"Merci de réessayer dans {message.guild.get_channel(channel).mention}." )) # Display help if args and args[0] == '-h': return await message.channel.send(embed=EmbedsManager.information_embed( "**Rappel de la commande de visualisation des avertissements :**\n\n" "`!ia <?@user>`.")) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else message.author state, res = api_manager.get_data('warns', user_id=target.id) if not state: return if not res: return await message.channel.send(embed=EmbedsManager.sanction_embed( f"Le membre {target.name}#{target.discriminator} n'a aucun avertissement:", ).set_thumbnail(url=target.avatar_url).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) if len(res) > 20: return await message.channel.send( EmbedsManager.error_embed( f"Hum, on dirait que {target.name}#{target.discriminator} a trop d'avertissements :(\n" f"Je vous conseille d'aller sur le site web afin de pouvoir voir la liste detaillée." )) warns = [Warn(data=x) for x in res] embed = EmbedsManager.sanction_embed( f"Voici les informations concernants {target.name}#{target.discriminator} :" ) \ .set_thumbnail(url=target.avatar_url) \ .set_footer(icon_url=client.user.avatar_url, text='Made By Gastbob40') for warn in warns: moderator = message.guild.get_member(warn.moderator_id) if \ message.guild.get_member(warn.moderator_id) else \ 'Un ancien modérateur' embed.add_field( name= f"Avertissement de {moderator}, le {warn.time.strftime('%d/%m/%Y à %H:%M')}", value=f"Avertissement pour `{warn.reason}`", inline=False) await message.channel.send(embed=embed)
async def reinit_restriction(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) if not PermissionChecker.is_moderator(message.author): return await message.channel.send(embed=EmbedsManager.error_embed( "Vous n'avez pas les permissions nécessaires.")) # Display help if args and args[0] == '-h': return await message.channel.send(embed=EmbedsManager.information_embed( "**Rappel de la commande de rénitialistion de restriction :**\n\n" "`!bt <@user> <durée> <reason>`.\n\n" "Attention, vous devez être dans le salon restreint.")) if not message.channel.id in config['restricted_channels']: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous n'êtes pas dans un salon restreint." )) # Check if target exist target: discord.Member = message.mentions[0] if len( message.mentions) == 1 else False if not target: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez mentionner un utilisateur.")) state, res = api_manager.get_data('post-restrictions', user_id=str(target.id), channel_id=str(message.channel.id)) if not state: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans l'api. Merci de contacter gast.")) restriction = None if not res else PostRestriction(data=res[0]) if not restriction: return await message.channel.send(embed=EmbedsManager.error_embed( f"Erreur dans la commande. {target.name}#{target.discriminator} n'a pas de restriction" f" active dans {message.channel.mention}")) else: restriction.delete() await client.get_channel( config['channels']['log_reactions'] ).send(embed=EmbedsManager.sanction_embed( f"{message.author.name}#{message.author.discriminator} vient de retirer une restriction de " f"{target.name}#{target.discriminator}.", ).add_field( name='Salon', value=message.channel.mention, inline=True ).add_field( name='Membre', value=target.mention, inline=True).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) await message.channel.send(embed=EmbedsManager.sanction_embed( f"Vous venez de retirer une restriction de " f"{target.name}#{target.discriminator}.", ).add_field( name='Salon', value=message.channel.mention, inline=True ).add_field( name='Membre', value=target.mention, inline=True).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) await target.send(embed=EmbedsManager.sanction_embed( f"{message.author.name}#{message.author.discriminator} vient de vous retirer une restriction.", ).add_field( name='Salon', value=message.channel.mention, inline=True).add_field( name='Membre', value=target.mention, inline=True).set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40'))
async def change_nick(client: discord.Client, message: discord.Message, args: List[str], config): api_manager = APIManager(config['api']['url'], config['api']['token']) # Display help if args and args[0] == '-h': return await message.channel.send( embed=EmbedsManager.information_embed( "**Rappel de la commande de changement de pseudo :**\n\n" "`!change_nick <pseudo>`.")) if not args: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Vous devez spécifé un pseudo")) nickname = Nickname() nickname.nickname = ' '.join(args) nickname.user_id = message.author.id for letter in nickname.nickname: if ord(letter) > 255: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans la commande. Seul les caractères *simples* sont autorisés" " (code ASCII entre 0 et 255).").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) state, res = api_manager.get_data('nicknames', user_id=str(message.author.id)) if not state: return await message.channel.send(embed=EmbedsManager.error_embed( "Erreur dans l'api. Merci de contacter gast.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) nicknames = [Nickname(data=x) for x in res] nicknames = sorted(nicknames, key=lambda x: x.time, reverse=True) now = datetime.datetime.now() # He can't change if nicknames and nicknames[0].time + datetime.timedelta(days=7) > now: new_date = nicknames[0].time + datetime.timedelta(days=7) return await message.channel.send(embed=EmbedsManager.error_embed( "Vous avez changé votre pseudo il y a moins de 1 semaine.\n\n" f"Vous pourrez le changer le {new_date.day}/{new_date.month}/{new_date.year}" f" à {new_date.hour}:{new_date.minute}.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) try: old_nickname = message.author.display_name await message.author.edit(nick=nickname.nickname) nickname.save() await message.channel.send(embed=EmbedsManager.complete_embed( "Vous venez de changer de pseudo avec succès.", f"Vos êtes dorénavant `{nickname.nickname}`.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40')) await client.get_channel( config['channels']['log_reactions'] ).send(embed=EmbedsManager.complete_embed( f"{message.author.name}#{message.author.discriminator} vient de changer de pseudo." ).add_field( name='Ancien pseudo', value=old_nickname, inline=True).add_field( name='Nouveau pseudo', value=nickname.nickname, inline=True).set_footer(icon_url=client.user.avatar_url, text='Made By Gastbob40')) except: await message.channel.send(embed=EmbedsManager.error_embed( "Hum, je n'ai pas reussi a changer votre pseudo.").set_footer( icon_url=client.user.avatar_url, text='Made By Gastbob40'))