猿问

discord.py bot 获取命令的剩余冷却时间

我正在开发一个基于 python 的 discord bot,它具有以下命令


@client.command(name="Mine",

            description="Mine daily.",

            brief="Mine daily.",

            aliases=['mine', 'm'],

            pass_context=True)

@commands.cooldown(1, 30, commands.BucketType.user)

async def mine(ctx, arg):

   <content>

但是当用户达到命令的 30 秒速率限制时,它会将错误输出到 python shell


Ignoring exception in command Mine

Traceback (most recent call last):

   File "C:\Users\raner\AppData\Local\Programs\Python\Python36\lib\site- 

      packages\discord\ext\commands\bot.py", line 846, in process_commands

      yield from command.invoke(ctx)

   File "C:\Users\raner\AppData\Local\Programs\Python\Python36\lib\site- 

      packages\discord\ext\commands\core.py", line 367, in invoke

      yield from self.prepare(ctx)

   File "C:\Users\raner\AppData\Local\Programs\Python\Python36\lib\site- 

      packages\discord\ext\commands\core.py", line 351, in prepare

      raise CommandOnCooldown(bucket, retry_after)

discord.ext.commands.errors.CommandOnCooldown: You are on cooldown. Try 

again in 28.58s

我想要做的是获得剩余的冷却时间并将其放入可以在不和谐时回复给用户的内容,例如“此命令受速率限制,请在 28.58 秒后重试”


我在网上找不到太多帮助,而且大部分已经过时或似乎不起作用。


慕少森
浏览 190回答 1
1回答

ITMISS

您需要为您的命令编写一个错误处理程序来处理CommandOnCooldown错误并发送消息。@mine.errorasync def mine_error(ctx, error):&nbsp; &nbsp; if isinstance(error, commands.CommandOnCooldown):&nbsp; &nbsp; &nbsp; &nbsp; msg = 'This command is ratelimited, please try again in {:.2f}s'.format(error.retry_after)&nbsp; &nbsp; &nbsp; &nbsp; await ctx.send(msg)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; raise error
随时随地看视频慕课网APP

相关分类

Python
我要回答