from aiogram.types import ( ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton, ) from aiogram.types import KeyboardButton, ReplyKeyboardMarkup import calendar from datetime import date from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder def main_keyboard(): return ReplyKeyboardMarkup( keyboard=[ [ KeyboardButton(text="📅 Расписание"), KeyboardButton(text="🔍 Сменить группу") ], [ KeyboardButton(text="✉️ Поддержка") ] ], resize_keyboard=True ) def start_keyboard(): return ReplyKeyboardMarkup( keyboard=[ [ KeyboardButton(text="🔍 Выбрать группу") ] ], resize_keyboard=True ) def date_keyboard(): kb = InlineKeyboardBuilder() kb.button( text="📅 Сегодня", callback_data="date:today" ) kb.button( text="🗓 Календарь", callback_data="date:calendar" ) kb.adjust(2) return kb.as_markup() def groups_keyboard(groups): keyboard = [] for group in groups: keyboard.append( [ InlineKeyboardButton( text=f"{group['groupName']} (курс {group['course']})", callback_data=f"select_group:{group['groupID']}" ) ] ) return InlineKeyboardMarkup( inline_keyboard=keyboard ) def calendar_keyboard(year: int, month: int): kb = [] months = [ "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", ] kb.append([ InlineKeyboardButton( text=f"{months[month]} {year}", callback_data="ignore" ) ]) kb.append([ InlineKeyboardButton(text="Пн", callback_data="ignore"), InlineKeyboardButton(text="Вт", callback_data="ignore"), InlineKeyboardButton(text="Ср", callback_data="ignore"), InlineKeyboardButton(text="Чт", callback_data="ignore"), InlineKeyboardButton(text="Пт", callback_data="ignore"), InlineKeyboardButton(text="Сб", callback_data="ignore"), InlineKeyboardButton(text="Вс", callback_data="ignore"), ]) cal = calendar.monthcalendar(year, month) for week in cal: row = [] for day in week: if day == 0: row.append( InlineKeyboardButton( text=" ", callback_data="ignore" ) ) else: row.append( InlineKeyboardButton( text=str(day), callback_data=f"calendar:{year}:{month}:{day}" ) ) kb.append(row) prev_month = month - 1 prev_year = year if prev_month == 0: prev_month = 12 prev_year -= 1 next_month = month + 1 next_year = year if next_month == 13: next_month = 1 next_year += 1 kb.append([ InlineKeyboardButton( text="⬅️", callback_data=f"month:{prev_year}:{prev_month}" ), InlineKeyboardButton( text="🏠 Сегодня", callback_data="calendar_today" ), InlineKeyboardButton( text="➡️", callback_data=f"month:{next_year}:{next_month}" ), ]) return InlineKeyboardMarkup( inline_keyboard=kb ) def subgroup_keyboard(): kb = InlineKeyboardBuilder() kb.button(text="Общая", callback_data="sub:0") for i in range(1, 5): kb.button(text=f"{i}А", callback_data=f"sub:{i}А") kb.button(text=f"{i}Б", callback_data=f"sub:{i}Б") kb.adjust(1, 2, 2, 2, 2) return kb.as_markup() def support_keyboard(): return ReplyKeyboardMarkup( keyboard=[ [ KeyboardButton( text="✉️ Поддержка" ) ] ], resize_keyboard=True ) def ticket_keyboard(ticket_id: int): return InlineKeyboardMarkup( inline_keyboard=[ [ InlineKeyboardButton( text="💬 Ответить", callback_data=f"reply_ticket:{ticket_id}" ), InlineKeyboardButton( text="✅ Закрыть", callback_data=f"close_ticket:{ticket_id}" ) ] ] ) def phone_keyboard(): return ReplyKeyboardMarkup( keyboard=[ [ KeyboardButton( text="📱 Отправить телефон", request_contact=True ) ] ], resize_keyboard=True, one_time_keyboard=True )