Почему бот не обрабатывает сообщения aiogram

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023

недавно решил в бота попробовать добавить отправку по времени(каждый день) и по гайдам нашел скрипт, но в скрипте в 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)

Помогите пожалуйста!

Ответы

▲ 0Принят

Я сижу в глобальном шоке, но вот в чем была проблема.

async def scheduler():
    aioschedule.every().day.at("21:15").do(choose_your_dinner)
    while True:
        await aioschedule.run_pending()
        await asyncio.sleep(1)

надеюсь кому-то помог