бот discord.py получает время восстановления оставшейся команды - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю над диссон-ботом на основе Python, который имеет следующую команду

@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

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 с»

Мне не удалось найти много помощи для этого онлайн, и большая часть его устарела или, кажется, не работает.

Спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Вам нужно написать обработчик ошибок для вашей команды, которая обрабатывает ошибку CommandOnCooldown и отправляет сообщение.

@mine.error
async def mine_error(error, ctx):
    if isinstance(error, commands.CommandOnCooldown):
        msg = 'This command is ratelimited, please try again in {:.2f}s'.format(error.retry_after)
        await client.send_message(ctx.message.channel, msg)
    else:
        raise error
...