Проблемы с асинхронностью в боте на 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)