Задать вопрос
@Karpblch

Как сделать задержку между командами в discord боте?

import random
from models import User #Модуль базы данных
import math
import discord
from datetime import datetime
import time
from discord.ext import commands

@commands.cooldown(1, 1999, commands.BucketType.user)
    @commands.command(aliases = ["Кейс1","кейс"])
    async def case_1(self,ctx):
        
        if ctx.channel.id == id:
            user,_ = User.get_or_create(user = ctx.author.id)
            user.name = ctx.author.name
            kf = random.choices(["Exp_15", "Exp_16", "Exp_19", "Exp_20", "Exp_35",  "tokens_30", "tokens_40", "tokens_50","tokens_70",], weights=[80,60,60,35,1, 30,15,10,2])
            if "Exp" in kf[0]:
                kf = int(kf[0].replace(f"Exp_",""))
                user.Exp += kf
                print(f"{datetime.now().strftime('[%Y-%m-%d %H:%M;%S]')}-{ctx.author.name}-{kf} EXP >кейс<")
                await ctx.send(f"**{ctx.author.name}** получил {kf} .Жди 33 минуты, чтобы открыть снова.")
                user.save()
            else:
                kf = int(kf[0].replace(f"tokens_",""))
                user.tokens += kf
                print(f"{datetime.now().strftime('[%Y-%m-%d %H:%M;%S]')}-{ctx.author.name}-{kf} tokens >кейс<")
                await ctx.send(f"**{ctx.author.name}** получил {kf} .Жди 33 минуты, чтобы открыть снова.")
                user.save()


Если пользоваться @commands.cooldown(1, 1999, commands.BucketType.user) , то после 1 часа задержки бот перезагружается или встает и надо его перезагружать. Еще не знаю как сделать кулдаун через базу данных, чтобы после перезагрузки задержка не слслетала
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
после 1 часа задержки бот перезагружается или встает и надо его перезагружать

Это не нормальное поведение. Ищите проблему в своем коде, если он зависает, то не из-за кулдауна. Люди и суточные кулдауны используют и ничего не зависает. Если все протрассировали и железно уверены что из-за него, подготавливайте воспроизводимый пример, шлите Issues с описанием бага.

Еще не знаю как сделать кулдаун через базу данных

Так же, как и любые другие параметры. Добавляете к вашему User поле и храните в нем timestamp последнего вызова команды. Пишите функцию f, которая проверяет что текущее время - время последнего вызова > чем нужное вам значение, используете @commands.check(f), чтобы не засорять код команды.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы