コード例 #1
0
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é.'
    ))
コード例 #2
0
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."))
コード例 #3
0
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}**."))
コード例 #4
0
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}"
        ))
コード例 #5
0
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'))
コード例 #6
0
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)
コード例 #7
0
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))
コード例 #8
0
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()
コード例 #9
0
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."))
コード例 #10
0
ファイル: unmute.py プロジェクト: gastbob40/epimodo_bot
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
コード例 #11
0
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)
コード例 #12
0
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}")
        )
コード例 #13
0
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é."))
コード例 #14
0
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é."))
コード例 #15
0
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)}."
        )
    )
コード例 #16
0
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()
コード例 #17
0
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))
コード例 #18
0
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)
コード例 #19
0
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."
            ))
コード例 #20
0
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)
コード例 #21
0
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}`."
        ))
コード例 #22
0
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)
コード例 #23
0
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
コード例 #24
0
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
コード例 #25
0
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}"
    ))
コード例 #26
0
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")
コード例 #27
0
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)
コード例 #28
0
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)
コード例 #29
0
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'))
コード例 #30
0
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'))