Discord Python: как добавить команду восстановления в случае события - PullRequest
0 голосов
/ 15 сентября 2018

Я посмотрел другие посты о том, как сделать команду восстановления.Один ответ сделал именно то, что я хотел, но это было только потому, что я сделал именно то, что они сделали.Теперь я хочу официально внедрить команду в мой бот Discord.Я заметил, что команда восстановления, которую я тестировал, работала только с @ client.command, а не с @ client.event (клиент - это объект). У меня есть все мои команды, перечисленные под событием события , поэтому мне нужна помощь по добавлению команды восстановления без необходимости переписывать много вещей.Это то, что я имею до сих пор в отношении команды восстановления.

from discord.ext.commands import Bot
from discord.ext import commands

client = Bot(command_prefix="?")

@client.event
@command.cooldown(5, 30, commands.BucketType.user)
async def on_message(message):
    if message.content.upper().startswith("?HELLO"):
        msg = 'Hello {0.author.mention} :banana:'.format(message)
        await client.send_message(message.channel, msg)

@on_message.error
async def on_message_error(self, error, ctx):
    if isinstance(error, commands.CommandOnCooldown):
    msg = ':exclamation: This command is on cooldown, please try again in {:.2f}s :exclamation:'.format(error.retry_after)
    await self.send_message(ctx.message.channel, msg)

Я просто использую одну команду в качестве примера, чтобы показать, какой у меня формат.Я получаю ошибку с @ on_message.error (это была пробная ошибка, поэтому я не ожидал, что она сработает).Я хочу установить время восстановления в течение 30 секунд после 5 последовательных попыток одной и той же команды, а также сообщение об ошибке, которое бот должен сказать в ответ с помощью таймера.Я действительно не хочу переписывать все это для того, чтобы сработала одна команда, учитывая, как далеко я проделал этот бот: /

1 Ответ

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

Вы должны добавить:

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

Это добавит ограничение скорости 1 использование за 30 секунд на пользователя.

Вы можете изменить BucketType на default, channel илиserver для создания глобального ограничения скорости канала или канала, но вы можете иметь только 1 перезарядку команды.

Это также вызовет исключение CommandOnCooldown в on_command_error

...