Проблемы с асинхронностью в боте на aiogram

Я делаю бота для сапорта. Мне нужно отправлять POST запросы каждые n минут что бы проверять новые сообщения для отправки пользователям. Вот мой код:

# Здесь я получаю список пользователей для рассылки
def sending_messages():
    while True:
        response = requests.post("http://localhost:5000/api")
        print(response.json())
        for i in response.json():
            bot.send_message(119***6318,"i[1]")
        time.sleep(5)



class Info(StatesGroup):
    q1 = State()



@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    await message.reply(text="Напиши свою жалобу:", reply=False)
    await Info.q1.set()


@dp.message_handler(state=Info.q1)
async def answer_q1(message: types.Message, state: FSMContext):
    requests.put("http://localhost:5000/api",
                 {'message': message.text, "chat_id": message.from_user.id})
    await state.finish()


if __name__ == "__main__":
    thread1 = Thread(target=sending_messages, args=(), daemon=True)
    thread1.start()
    executor.start_polling(dp, skip_updates=True)

и мне выводит ошибочку: RuntimeWarning: coroutine 'Bot.send_message' was never awaited


Ответы (1 шт):

Автор решения: 5c0rp

Проблема в том что вы вызываете bot.send_message без await

async def sending_messages():
    while True:
        response = requests.post("http://localhost:5000/api")
        print(response.json())
        for i in response.json():
            await bot.send_message(119***6318,"i[1]")
        await asyncio.sleep(5)

затем в Dispatcher нужно передать loop

loop = asyncio.get_event_loop()
dp = Dispatcher(bot, loop=loop)

а вызов заменить на

if __name__ == "__main__":
    dp.loop.create_task(sending_messages())
    executor.start_polling(dp, skip_updates=True)
→ Ссылка