Как сделать кастомный кулдаун для discord.app_commands?

Я хочу сделать кулдаун для всех команд но чтобы распространялся он только на юзера.
Допустим есть команда A и команда B, и мне нужно чтобы после того как пользователь использовал команду A, он не мог использовать команды А и B определенное время.
У меня есть пример реализации с декоратором
@discord.app_commands.checks.dynamic_cooldown(обработчик)
, но этот кулдаун распространяется только на одну команду, и для всей гильдии. Мне же нужно на все команды и для одного пользователя.
Также нужно чтобы можно было сделать обработчик по типу этого
@bot.tree.error
async def on_app_command_error(
    interaction: discord.Interaction,
    error: app_commands.AppCommandError
):
    if isinstance(error, app_commands.CommandOnCooldown):
        embed = discord.Embed(
            description="Вы сможете использовать эту команду через "
            f"**{int(error.retry_after)}s**",
            color=embed_color
        )
        await interaction.response.send_message(embed=embed, ephemeral=True)
    else:
        raise error
когда команды находятся в кулдауне
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
fenrir1121
@fenrir1121
Встроенного такого функционала нет, пишите или свой декоратор с проверкой (если нужно делать эту проверку перед определенными командами) или проверку внутри событий on_message и on_interaction (если нужно сразу на все команды)
Внутри обращаетесь к БД или храните словарь, примерно с примерно следующим форматом:
{ user_id: (guild_id, last_command_datetime) }
- Если пользователя нет в словаре, добавляете с текущим временем и гильдией и пускаете в команду
- Если он есть и таймдельта между его временем и текущим больше кулдауна обновляете время и пускаете в команду
- Иначе вызвать кастомную ошибку или дискордовскую CommandOnCooldown
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Фаст Софт Санкт-Петербург
от 150 000 до 180 000 ₽
от 250 000 ₽
Sibdev Красноярск
от 120 000 до 180 000 ₽
30 мар. 2023, в 05:56
10000 руб./за проект
30 мар. 2023, в 02:57
5000 руб./за проект
30 мар. 2023, в 02:00
4000 руб./за проект