@Telmor

Как в discord.py сделать повторение действия каждые 5 минут, что бы это не отключало другие команды?

Я пишу сейчас бота, и у меня возникла потребность в проверке на время. Проще говоря. Я заношу в базу данных время и мне надо сравнивать время сейчас с тем которое в базе данных каждые 5 минут. И если время сейчас больше чем в базе данных - делать действия. Проще говоря если при вычитании из времени которое сейчас время из базы данных получается положительно число делать что то. Но мне надо что бы это повторялось постоянно, даже после перезагрузки бота. И мне надо делать несколько подобных проверок почти одновременно. И главное что бы эти проверки шли вместе с работой бота, и что бы команды у него работали. Как мне это сделать?
Я сделал проверку в конец команды и в event on_ready . Но после этого у меня перестал бот реагировать на команды. Как мне починить это?
Код:
while True:
        for guild in bot.guilds:
            for member in guild.members:

                    test = spons.find_one({'_id': member.id})['r_id']
                    if test != 0:
                        timers = spons.find_one({'_id': member.id})['time_role']
                        print(timers)
                        print('Время с бд')
                        print('============================')
                        rol_i = spons.find_one({'_id': member.id})['r_id']
                        rols = discord.utils.get(member.guild.roles, id=rol_i)
                        time_now = int(time.time())
                        print(time_now)
                        print('Время сейчас')
                        print('============================')
                        delta = time_now - timers
                        print(delta)
                        print('Разница')
                        print('============================')
                        if delta >= 0:

Прошу помочь мне с этим вопросом.
  • Вопрос задан
  • 1717 просмотров
Решения вопроса 1
Можно использовать таймер, который входит в библиотеку asyncio.
await asyncio.sleep(10) # время в секундах
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ZERRITO
Пустой ноль
Можно сделать так, как написал Константин, а можно использовать встроенный декоратор.
Пример:
from discord.ext import tasks
...

@tasks.loop(seconds=1) # Сколько секунд цикл будет "спать" перед повторным выполнением
async def newloop():
    # Код внутри цикла

@newloop.before_loop # Действие перед началом задачи
async def before_newloop():
  await Bot.wait_until_ready() # Подождать, пока бот не будет полностью запущен (У меня Bot - переменная бота. У вас может быть client, bot и тд...)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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