我的机器人中有两个使用冷却时间的命令:“建议”和“ 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
参数,并且user
是Member
类型,所以会引发一个错误...
有什么方法可以为特定用户重置冷却时间吗?
答案 0 :(得分:0)
我不相信有一个命令可以仅针对单个指定用户来重置冷却时间。
如果还没有,我建议使用带有BucketType用户变体的命令装饰器,以确保冷却时间是特定于用户的。 @commands.cooldown(rate, per, commands.BucketType.user)
。 Docs for cooldown decorator
答案 1 :(得分:0)
您可以执行一个函数来检查要重置冷却时间的成员,而另一个函数“ before_invoke”要在命令运行之前检查到第一个功能,如果为true,则重置冷却时间
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'))
此齿轮中的所有命令都有一个“ @ commands.cooldown(1、5,commands.BucketType.user)”,该限制限制每位用户每5秒使用一次命令。但是在每个cog命令之前,都会调用“异步def cog_before_invoke”,然后调用“ check_if_it_is_me”函数,如果命令的作者是我,则返回true,然后返回到“异步def cog_before_invoke”函数,如果出现此情况,它将重置冷却“ check_if_it_is_me”函数为true。如果“ check_if_it_is_me”功能为假(使用该命令不是我),则“ cog_before_invoke”功能将不会重置冷却时间,该命令的作者将必须正常等待冷却时间。
您可以为“ check_if_it_is_me”功能添加更多参数,例如,无需等待冷却或冷却时间无效的成员列表,但这取决于您自己
我希望这一切很清楚,祝你好运