【问题标题】:How do I temp mute someone using discord.py?如何使用 discord.py 临时静音某人?
【发布时间】:2020-06-22 02:52:12
【问题描述】:

我正在尝试为 discord.py 机器人创建一个 !mute 命令。我希望它的格式如下:!mute @user 10ss 是几秒钟。我还希望它能够读取 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。如果我决定在 60 秒结束之前使用命令 !unmute @user 取消静音,它会成功取消静音。但是当 60 秒结束时,它会再次取消静音并第二次发送消息。

再次澄清一下,我的目标是创建一个 !mute 命令,以便可以执行!mute @user 1d 3ss 是秒,m 是分钟,h 是小时,d 是几天,mo 是几个月,y 是几年。

任何答案都会很棒,谢谢!

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    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))
    

    【讨论】:

    • 剩下的呢?
    • Wdym?除非我遗漏了什么,否则其余的应该保持不变。如果您在时间结束之前使用取消静音,他们将不再具有静音角色,因此不会再次发送消息。如果您没有使用取消静音,他们仍然会静音,并且只会发送一次。
    • 我的意思是我的其余问题。我想创建它,所以可以做/mute @user 1d 3ss 是秒,m 是分钟,h 是小时,d 是几天,mo 是几个月,y 是几年。
    • 您可以将 mute_time 参数作为字符串传递,然后使用 string.split() 函数拆分每个单独的时间分量。然后你会得到一个看起来像 ['1d', '2m','3s'] 的列表,然后由你来遍历这些组件,查看它们的值和时间类型(天/分钟)。然后,您可以将其转换为秒并将其输入到 async.sleep 方法中。仅当您使用async def mute(ctx, member: discord.Member, *, mute_time): 设置该功能时,它才会起作用。这样它就占用了整个组件的时间。
    猜你喜欢
    • 2021-07-17
    • 2019-07-28
    • 1970-01-01
    • 2021-07-02
    • 2019-07-28
    • 1970-01-01
    • 2021-01-07
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多