Как временно отключить кого-то с помощью discord.py? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь создать команду! Mute для бота discord.py. Я бы хотел, чтобы он был отформатирован так: !mute @user 10s. s означает секунды. Я также хотел бы, чтобы он мог читать m для минут, h для часов и d для дней. А если есть возможность, может быть, даже !mute @user 1d 3h 3s. Вот код, который у меня есть прямо сейчас.

@client.command()
@commands.has_permissions(kick_members=True)
async def mute(ctx, member: discord.Member, mute_time : int):
    guild = ctx.guild
    for role in guild.roles:
        if role.name == "Muted":
            await member.add_roles(role)
            await ctx.send("{} has has been muted!" .format(member.mention))
            await asyncio.sleep(mute_time)
            await member.remove_roles(role)
            await ctx.send("{} has been unmuted!" .format(member.mention))

Он отлично работает и сейчас. Он выполняет !mute @user 10 в течение 10 секунд.

У меня также есть команда включения звука. Это работает вот так. !unmute @user.

@client.command()
@commands.has_permissions(kick_members=True)
async def unmute(ctx, member : discord.Member):
    guild = ctx.guild
    for role in guild.roles:
        if role.name == "Muted":
            await member.remove_roles(role)
            await ctx.send("{} has has been unmuted!" .format(member.mention))

За исключением того, что у нас возникла проблема с этой командой. Допустим, я выполняю !mute @user 60. Если я решу включить их с помощью команды !unmute @user до истечения 60 секунд, они будут успешно включены. Но затем, когда истекли 60 секунд, он снова включает их и отправляет сообщение во второй раз.

Опять же, чтобы уточнить, моя цель - создать команду! Mute, чтобы можно было сделать !mute @user 1d 3s. s для секунд, m для минут, h для часов, d для дней, mo для месяцев и y для лет.

Любые ответы было бы здорово, спасибо!

1 Ответ

0 голосов
/ 17 июня 2020

После await asyncio.sleep(mute_time) вы можете добавить оператор if, чтобы увидеть, есть ли у пользователя отключенная роль, и только в этом случае вы удаляете роль и отправляете сообщение.

Вдоль этих строк :

@commands.has_permissions(kick_members=True)
async def mute(ctx, member: discord.Member, mute_time : int):
    guild = ctx.guild
    for role in guild.roles:
        if role.name == "Muted":
            await member.add_roles(role)
            await ctx.send("{} has has been muted!" .format(member.mention))
            await asyncio.sleep(mute_time)
            IF USER STILL HAS MUTED ROLE:
                await member.remove_roles(role)
                await ctx.send("{} has been unmuted!" .format(member.mention))
...