Перестали отвечать Inline-кнопки в телеграм боте
Столкнулся с такой проблемой, перестали отвечать Inline-кнопки, причина не понятна. Вот часть кода, возможно вы сможете найти причину неисправности
personal_action.py
BotDB = BotDB("Help_For_Tutors.db")
@dp.message_handler()
@with_subscription_check
async def text_cmd(message: types.Message, state: FSMContext):
match message.text:
case "Расписание на неделю":
days = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
cal_days = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
buttons = []
for i, day in enumerate(days):
button = types.InlineKeyboardButton(f"☑ {day}", callback_data=f"get_schedule:{cal_days[i]}")
buttons.append(button)
keyboard_markup = types.InlineKeyboardMarkup(row_width=4)
keyboard_markup.add(*buttons)
await message.answer("Выберите день, который тебе нужно:", reply_markup=keyboard_markup)
@dp.callback_query_handler()
async def callback(call: types.CallbackQuery, state: FSMContext):
if call.data.startswith("get_schedule:"):
cal_day = call.data.split(':')[1]
days = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"]
buttons = []
for i, day in enumerate(days):
# Обозначение выбранного дня другим значком
if days[i] == cal_day:
button = types.InlineKeyboardButton(f"✅ {day}", callback_data=f"get_schedule:{days[i]}")
else:
button = types.InlineKeyboardButton(f"☑ {day}", callback_data=f"get_schedule:{days[i]}")
buttons.append(button)
keyboard_markup = types.InlineKeyboardMarkup(row_width=4)
keyboard_markup.add(*buttons)
rows = await BotDB.get_schedule(call.message.chat.id, cal_day)
status_icons = {
'constant': '?',
'single': '?',
'trial': '?',
}
students = []
for row in rows:
student = f"{status_icons.get(row[0], '')}Ученик?♂(-ниця?♀) {row[5]} {row[6]} \n" \
f"{status_icons.get(row[0], '')}⌛{row[1]} {row[2]} \n" \
f"{status_icons.get(row[0], '')}⌛Продолжительность{row[3]} мин \n" \
f"{status_icons.get(row[0], '')}?Цена за урок {row[4]} \n" \
"__________________________________________\n"
students.append(student)
if students:
try:
await call.message.edit_text(f"Расписание на {cal_day}:\n\n" + "\n".join(students),
reply_markup=keyboard_markup)
except MessageNotModified:
pass
else:
try:
await call.message.edit_text(f"Сейчас в {cal_day} у тебя нет уроков?",
reply_markup=keyboard_markup)
except MessageNotModified:
pass
db.py
class BotDB:
def __init__(self, db_name):
self.db_name = db_name
self.conn = None
self.lock = asyncio.Lock()
async def connect(self):
async with self.lock:
if not self.conn:
self.conn = await aiosqlite.connect(self.db_name, isolation_level="EXCLUSIVE", timeout=30)
self.cursor = await self.conn.cursor()
print("Connection successfully open", datetime.datetime.now())
async def close(self):
async with self.lock:
if self.conn:
await self.conn.close()
print("Connection successfully close", datetime.datetime.now())
self.conn = None
async def get_schedule(self, tutor_id, day):
"""Извлекаем расписание из базы для его отображения в чате бота"""
today = datetime.datetime.now()
start_of_week = today - datetime.timedelta(days=today.weekday()) # Початок поточного тижня (понеділок)
end_of_week = start_of_week + datetime.timedelta(days=6) # Кінець поточного тижня (неділя)
await self.connect()
schedule = await self.cursor.execute(f'SELECT sc.type_lesson, sc.lesson_day, sc.lesson_start, '
f'sc.lesson_duration, s.price, s.student_name, '
f's.student_surname, sc.student_id '
'FROM Schedule sc '
'INNER JOIN Students s '
'ON sc.student_id = s.student_id '
f'WHERE sc.tutor_id = {tutor_id} '
f'AND sc.lesson_day = \'{day}\' '
f'AND sc.date BETWEEN ? AND ? '
f'ORDER BY lesson_start',
(start_of_week.strftime('%Y-%m-%d'), end_of_week.strftime('%Y-%m-%d')))
result = await schedule.fetchall()
await self.close()
return result