Ошибка при запуске телеграм бота на aiogram
При запуске бота на aiogram 2.25 (python 3.10) возникает ошибка:
Traceback (most recent call last):
File "/home/ch/rentacar/main.py", line 31, in <module>
executor.start_polling(dp, on_startup=run.on_startup)
File "/home/ch/rentacar/venv/lib/python3.10/site-packages/aiogram/utils/executor.py", line 45, in start_polling
executor.start_polling(
File "/home/ch/rentacar/venv/lib/python3.10/site-packages/aiogram/utils/executor.py", line 317, in start_polling
loop = asyncio.get_event_loop()
File "/usr/lib/python3.10/asyncio/events.py", line 656, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'MainThread'.
Код: (не весь)
print('main.py: load modules\n\n')
from aiogram import Bot, Dispatcher, executor, types
from random import randint
# ========= import requirements =============
print('main.py: load custom\n\n')
from config import *
from buttons import *
from classes import *
from select_date import *
from handlers import extra, admin, user, callbacks, fsm_analog, brones
import startup as run
import creeck
# =========== base variables =============
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
# ========== handlers ============
print('main.py: init handlers\n\n')
isAdminData, userId, doing = extra.handlers(dp, types, isAdminData, userId, doing)
isAdminData, doing = admin.handlers(bot, dp, types, isAdminData, doing)
user.handlers(dp, types, userId, isAdminData)
doing = brones.handlers(bot, dp, types, userId, doing)
doing = callbacks.handlers(bot, dp, types, doing, userId, isAdminData)
doing = fsm_analog.handlers(dp, bot, types, randint, doing, run.is_auto)
# ============ polling ==============
print('main.py: run bot')
run.bot = bot
executor.start_polling(dp, on_startup=run.on_startup)
#version 10.0.5
Бота я делаю давно, и здесь тьма тьмущая функций, и раскидал их в папку handlers.
Бот использует aigroam, requests, random, sqlite3, aioschedule.
После того, как я добавил aioschedule, бот начал выдавать ошибку. Если что, вот код который я добавил:
print('creeck.py: import modules')
from aioschedule import every, run_pending
from asyncio import run
from database import *
from api import CreeckAPI
creeck = CreeckAPI()
def main():
data = creeck_get_all()
for i in data:
if i[1] == 'create':
exec(f'creeck.create_{i[2]}({i[3]})', creeck)
creeck_delete(i[0])
elif i[1] == 'update':
info = eval(i[3])
exec(f'creeck.update_{i[2]}({info[0]}, "{info[1]}", "{info[2]}")', creeck)
creeck_delete(i[0])
elif i[1] == 'delete':
exec(f'creeck.delete_{i[2]}({i[3]})', creeck)
creeck_delete(i[0])
else:
print(f'creeck.py: warning - incorrect type "{i[1]}", dont update this\nmodule:', i[2], '\ndata:', i[3], '\nid:', i[0], '\n\n')
every(1).hour.do(main)
print('creeck.py: run schedule')
run(run_pending())
#version 1.0
Ответы (1 шт):
Может это поможет:
Перейти на другой шедулер — пакет, позволяющий выполнять операции в нужные интервалы времени. В качестве альтернативы можно использовать, например, пакет
apscheduler.Внести изменения в вашу локальную копию пакета aioschedule. В файле
aioschedule/__init__.pyстроку 107:jobs = [job.run() for job in self.jobs if job.should_run]замените на:
jobs = [asyncio.create_task(job.run()) for job in self.jobs if job.should_run]
Сам столкнулся с этой ошибкой, люди говорят что это из-за старости библиотеки aioschedule.