@joposraka2

Как сделать так чтобы команду в discord.py можно было использовать раз в час/день/год?

Вот команда
@client.command()
async def beg(ctx):
    denga = random.randint(0,100)
    user = ctx.author
    hour=None
    mbalance=collection.find_one({"_id":user.id})["balance"]
    if hour==None:
        collection.update_one({"_id":user.id},
        {"$set": {"balance":mbalance+denga }})
        await ctx.send(embed=discord.Embed(
        description=f'**Копошась на полу вы нашли {denga} монет**'))
    else:
        await ctx.send("Вы можете использовать эту команду лишь раз в час!")

как сделать так чтобы при повторном использовании менее чем через час бот присылал сообщение что нужно подождать?
  • Вопрос задан
  • 2278 просмотров
Решения вопроса 1
Используйте декоратор
@commands.cooldown(rate, per, type=<BucketType.default: 0>)


@client.command()
@commands.cooldown(1, 60, commands.BucketType.user)  # Один раз в 60 секунд на пользователя (глобально)
async def cmd(ctx, ...):
    ...


Для отправки сообщения при вызове команды в cooldown'е необходимо обрабатывать исключение команд commands.CommandOnCooldown:
@client.listen("on_command_error")
async def cooldown_message(ctx, error):
    if isinstance(error, commands.CommandOnCooldown):
        await ctx.send(f"{ctx.command.qualified_name} можно использовать только {error.cooldown.rate} раз в {error.cooldown.per} секунд. Попробуйте через {error.retry_after} секунд.")


Если необходимо хранить cooldown'ы между перезапусками - в таком случае, скорее всего придётся создавать свою реализацию. Самый простейший вариант - сохранять текущее время в виде целого числа и сравнивать с текущим временем при следующем выполнении
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы