@Smesharik08

Как сделать периодическую рассылку сообщений из функции на aiogram?

bot = Bot(token=config["tgBotApiCode"])
dp = Dispatcher(bot)

@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
    await bot.send_message(message.from_user.id, helloWord)

async def working():
    for userid in userids:
        await bot.send_message(userid, 'privetqtqeteqwqeteqwtgewq')
    await asyncio.sleep(15)

if __name__ == "__main__":
    working()
    executor.start_polling(dp)


Код выше - не работает. Помогите пожалуйста, больше недели гуглил, пытался по разному, но так и не понял, что делать.
Вот функция 'working' каждые n секунд (на примере - 15) должна делать рассылку по списку пользователей, но выдаёт ошибку и эта функция не работает, но bot.polling функционирует и на /start бот отвечает.
RuntimeWarning: coroutine 'working' was never awaited
  working()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Ошибку и вопрос, естественно, гуглил, но решения не нашёл
  • Вопрос задан
  • 637 просмотров
Пригласить эксперта
Ответы на вопрос 1
@corydoras_aeneus
Наиболее близко к вашему коду будет следующее решение:

async def working(dp):
    while True:
        for userid in userids:
            await bot.send_message(userid, 'privetqtqeteqwqeteqwtgewq')
        await asyncio.sleep(15)


if __name__ == "__main__":
    executor.start_polling(dp, on_startup=working)


Если у вас много пользователей, нужно будет делать паузы, так как есть лимиты на рассылку сообщений.
Вместо бесконечного цикла можно использовать apscheduler.
Ответ написан
Ваш ответ на вопрос

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

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