nastexe
@nastexe

Возможно ли реализовать очередь из отложенных новостей в Discord?

Подобной возможности нет в самом Discord.
Например, как в том же VK или Telegram.

Но есть tasks и библиотека shedule, которая позволяет задавать время.
Однако tasks делает не в задаваемое время, а в каждое указанное время (каждые 5-10-15 секунд-минут-часов).

shedule хоть и может отправлять в определенное время
every().day.at("время").do(job),
но не может указать дату и блокирует весь остальной функционал, то есть можно запустить только одну задачу, без параллельного выполнения.
Да, можно запустить проверку в отдельном треде через thread.start(), но опять же только на одно сообщение. Не очень удобно.

Также пробовал вариант со сравнением текущего времени и нужного, но там опять блокируется функционал на одной задаче.

Получилось прийти к вот такому варианту, но только для одного сообщения:
@tasks.loop(seconds=5)
        async def late():
            global need_date
            if datetime.datetime.now().replace(microsecond=0)==need_date:
                        
                await msg.publish()
                        
if need_date!=None:
          late.start()


Вопрос: есть ли возможность сделать несколько параллельно работающих отложенных сообщений, которые не будут блокировать остальной функционал и будут отправляться в заданные дату и время?

Условия таковы, что необходимо задавать сообщение и время не через слэшовую def функцию, а через лс.

Например, сначала присылается текст, записывается в переменную, потом картинки, кнопка и т.д.

Реально ли при таких условиях сделать их несколько?
Или из-за наличия переменных, которые каждый раз перезаписываются, это нужно переделывать?
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
так не синхронный schedule используй, а aioschedule.
Есть пример для телеграм-бота, адаптируй его под discord.py (или клон который ты используешь).

А последняя часть вопроса намекает на необходимость в Finite State Machine (FSM).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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