discord.py - 如何为特定用户重置命令的冷却时间?

Posted

技术标签:

【中文标题】discord.py - 如何为特定用户重置命令的冷却时间?【英文标题】:discord.py - How to reset the cooldown of a command for a specific user? 【发布时间】:2020-10-11 09:24:48 【问题描述】:

我的机器人中有两个使用冷却时间的命令:“suggest”和“repentir”。 我已经为用户设置了另一个重置冷却时间的命令,这是该命令的代码:

@client.command()
@commands.check(is_owner)
async def reset(ctx, user:discord.Member):
    repentir.reset_cooldown(ctx)
    suggest.reset_cooldown(ctx)
    await ctx.send("Le cooldown pour <@> a bien été réinitialisé !".format(ctx.author.id))

我已经尝试将user 放在reset_cooldown() 函数中,但是这个命令需要一个Context 参数,而userMember 类型,所以它会引发错误...... 有没有办法为特定用户重置冷却时间?

【问题讨论】:

【参考方案1】:

您可以执行一个函数来检查要重置冷却时间的成员和另一个函数“before_invoke”在命令运行之前检查第一个函数,如果是,则重置冷却时间

def check_if_it_is_me(ctx):
    return ctx.message.author.id == 759027058613026827


class ImaCog(commands.Cog, name='Imagens'):
    """Gifs e imagens para você se divertir"""

    def __init__(self, bot):
        self.bot = bot

    async def cog_before_invoke(self, ctx: commands.Context):
        if check_if_it_is_me(ctx):
            return ctx.command.reset_cooldown(ctx)

    @commands.command(brief='Manda uma piscadinha',
                      help='Use o comando para ver uma pisacadinha aleatória de algum anime. Você pode enviar a '
                           'piscadinha para alguem marcando a pessoa no comando')
    @commands.cooldown(1, 5, commands.BucketType.user)
    async def pisque(self, ctx, quem: discord.Member = None):
        gif = await buscar('animu', 'wink')
        await ctx.send(ctx.author.mention,
                       embed=gera_embed(ctx=ctx, link=gif, membro=quem,
                                        acao_s='piscou', acao_c='mandou uma piscada para'))

此 cog 中的所有命令都有一个“@ commands.cooldown (1, 5, commands.BucketType.user)”,限制每个用户每 5 秒使用一次命令。但在每个 cog 命令之前,调用“async def cog_before_invoke”,然后调用“check_if_it_is_me”函数,如果命令的作者是我,则返回 true,然后返回“async def cog_before_invoke”函数,如果“check_if_it_is_me”功能为真。如果“check_if_it_is_me”函数为false(不是我使用该命令),“cog_before_invoke”函数不会重置冷却时间,命令作者需要正常等待冷却时间。

您可以为“check_if_it_is_me”功能添加更多参数,例如无需等待冷却时间的成员列表或冷却时间无效的时间,但这取决于您

我希望它很清楚,祝你好运

【讨论】:

【参考方案2】:

我不相信有一个命令可以为单个指定用户重置冷却时间。

如果您还没有,我建议您使用带有 BucketType 用户变体的命令装饰器,以确保冷却时间是用户特定的。 @commands.cooldown(rate, per, commands.BucketType.user)。 Docs for cooldown decorator

【讨论】:

是的,冷却时间已经是用户特定的,但有时我需要为我的一位朋友重置冷却时间...根据文档,reset_cooldown 采用Context 参数... 您可以使用它,但不确定它的相关性如何,但这是我的一些旧代码。 bot.get_command("Command name here").reset_cooldown(ctx) 是的,我已经知道如何重置冷却时间,但我想为特定用户执行此操作.... 您可以使用列表/集合创建自定义冷却时间,然后在运行命令之前检查是否有人在列表中。然后从该列表中删除特定用户将非常容易。

以上是关于discord.py - 如何为特定用户重置命令的冷却时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何为导入的库启用 PyCharm 自动完成功能 (Discord.py)

Discord Py - 如何使用文本命令向公会的所有成员添加多个角色

我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?

如何使用 Discord.py 对特定用户进行 dm?

如何为加入 Discord 公会的新成员自动分配角色?

如何将错误添加到特定命令 discord.py