Почему бот не обрабатывает сообщения aiogram
недавно решил в бота попробовать добавить отправку по времени(каждый день) и по гайдам нашел скрипт, но в скрипте в start_polling надо указать аргумент on_sartup и из-за него бот перестает обрабатывать другие сообщения, даже команды. Как только убираю этот аргумент, то все начинает работать кроме
from aiogram import Bot, Dispatcher, types, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import Dispatcher
from aiogram.utils.exceptions import Throttled
from aiogram.utils import executor
import sqlite3
import aiogram.utils.markdown as md
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import ParseMode
from threading import Thread
import random
import asyncio
import aioschedule
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
bot = Bot("Токен есть")
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
#-----------------------------создание БД-----------------------------------------------------------------
connect = sqlite3.connect('all.db')
cursor = connect.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS student(
FCS TEXT,
teacher_code TEXT,
id_chat TEXT PRIMARY KEY,
reason TEXT
)
''')
connect.commit()
cursor.execute('''CREATE TABLE IF NOT EXISTS teacher(
FCS TEXT,
teacher_code TEXT,
id_chat TEXT PRIMARY KEY
)
''')
connect.commit()
#-----------------------------------заоленение бд---------------------------------------------------------------
class Form(StatesGroup):
FCS = State()
class Form2(StatesGroup):
FCS = State()
class Form3(StatesGroup):
FCS = State()
class Form4(StatesGroup):
reason = State()
async def start_state(storage, id_chat):
await storage.set_state(user=id_chat, chat=id_chat, state=Form4.reason.state)
def all_id_chat(cursor):
cursor.execute("SELECT id_chat FROM student")
return cursor.fetchall()
def change_reason(cursor, id_chat, reason):
data = [reason, id_chat]
cursor.execute("UPDATE student SET reason=? WHERE id_chat=? ", data)
connect.commit()
def rigister(cursor, FCS, code_teacher, id_chat):
cursor.execute("INSERT INTO teacher VALUES(?,?,?);", (FCS, code_teacher, id_chat))
connect.commit()
def find_code(cursor, FCS):
code = [FCS]
cursor.execute("SELECT FCS FROM teacher WHERE teacher_code=?", code)
connect.commit()
if cursor.fetchone() is None:
return "Такого учителя нету!"
else:
return True
def find(cursor):
while True:
my_id = ""
chars = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
for i in range(20):
my_id += random.choice(chars)
cursor.execute("SELECT * FROM teacher WHERE ?", (my_id, ))
if cursor.fetchone() is None:
break
else:
my_id = ""
return my_id
def register_student(cursor, FCS, code_students, id_chat, reason):
cursor.execute("INSERT INTO student VALUES(?,?,?,?);", (FCS, code_students, id_chat, reason))
connect.commit()
#-------------------------------------бот-----------------------------------------------------------------------
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
markup.add("Я ученик")
markup.add("Я учитель")
await message.answer("Приветствую."+"\n"+"Выбери свою роль!", reply_markup=markup)
@dp.message_handler(content_types=['text'])
async def get_message(message: types.Message):
if message.text.lower() == "я учитель":
await Form.FCS.set()
await message.answer(f"{'<b>'}Напишите своё ФИО в чат!{'</b>'}", parse_mode = 'HTML')
elif message.text.lower() == "я ученик":
await Form2.FCS.set()
await message.answer(f"{'<b>'}Напишите код учителя!{'</b>'}", parse_mode = 'HTML')
@dp.message_handler(state=Form.FCS)
async def code(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['FCS'] = message.text
FCS = data["FCS"]
my_id = ''
code_teacher = find(cursor)
id_chat = message.from_user.id
rigister(cursor, FCS, code_teacher, id_chat)
await state.finish()
await message.answer("Вы внесены в базу данных, ваш код: " + str(code_teacher))
#-----------------------------------ученик--------------------------------------------------------------------
@dp.message_handler(state=Form2.FCS)
async def code(message: types.Message, state: FSMContext):
global code_students
async with state.proxy() as data:
data['FCS'] = message.text
FCS = data["FCS"]
code_students = FCS
attempt = find_code(cursor, FCS)
await state.finish()
if attempt == True:
await message.answer(f"{'<b>'}Напиши своё ФИО в чат!{'</b>'}", parse_mode = 'HTML')
await Form3.FCS.set()
else:
await message.answer(attempt)
@dp.message_handler(state=Form3.FCS)
async def code(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['FCS'] = message.text
FCS = data["FCS"]
id_chat = message.from_user.id
reason = "Придет"
register_student(cursor, FCS, code_students, id_chat, reason)
#-------------------------------отправка по времени-----------------------------------------------------------
@dp.message_handler()
async def choose_your_dinner():
massive_big = all_id_chat(cursor)
for i in range(len(massive_big)):
id_chat = massive_big[i][0]
await start_state(storage, id_chat)
await bot.send_message(id_chat, "Доброе утро." + "\n" + "Ты сегодня придешь в школу? Если нет, то напиши 'не приду'."+ "\n" + "Если да, то напиши 'приду'.")
async def scheduler():
aioschedule.every().day.at("23:04").do(choose_your_dinner)
while True:
await aioschedule.run_pending()
async def on_startup(dp):
asyncio.create_task(scheduler())
#-----------------------------безостановочный запуск----------------------------------------------------------
executor.start_polling(dp, skip_updates = True, on_startup=on_startup)
Помогите пожалуйста!
Источник: Stack Overflow на русском