def main_menu(message): if message.text == '☎ Контакты': bot.send_message(message.chat.id, Messages.CONTACTS.value, reply_markup=keyboards.main_menu()) elif message.text == '🚀 Доставка': bot.send_message(message.chat.id, Messages.DELIVERY.value, parse_mode='HTML', reply_markup=keyboards.main_menu()) elif message.text == '✏ Информация': bot.send_message(message.chat.id, Messages.INFO.value, parse_mode='HTML', reply_markup=keyboards.main_menu()) elif message.text == '🍴 Меню': bot.send_message(message.chat.id, 'Выберите раздел, чтобы вывести список блюд 👇🏻', reply_markup=keyboards.categories()) states.set_state(message.chat.id, States.S_MENU.value) elif message.text == '📥 Корзина': bot.send_message(message.chat.id, messages.basket(message.chat.id), parse_mode='HTML', reply_markup=keyboards.basket()) else: bot.send_message(message.chat.id, 'Неизвесная команда!\n' 'Попробуйте /start или /help')
def getInlineMenuValues(call): if True: if call.message: if call.data == "A" or call.data == "B" or call.data == "оба": bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Отлично!Выбор сделан😊', reply_markup=None) flags.select_mode = call.data _to_user = '******' % (call.message.chat.first_name) choice = "Вы выбрали %s!" % (flags.select_mode) if flags.log_date_mode: msg = '%s %s %s %s' % (_to_user, choice, phrases._date_input_instruction(), phrases._get_by_date_info()) bot.send_message(call.message.chat.id, msg, parse_mode='html', reply_markup=keyboards.main_menu()) flags.date_input_mode = True elif flags.end_date == "Waiting for choice": msg = '%s %s %s %s' % ( _to_user, choice, phrases._range_choice_instruct_initial(), phrases._date_input_instruction()) bot.send_message(call.message.chat.id, msg, parse_mode='html', reply_markup=keyboards.main_menu()) flags.end_date = "Waiting for initial" else: print("Error")
def main_menu(self, bot, update): from_user = update.message.from_user if update.message else update.callback_query.from_user if not self.session.query( User.id).filter(User.id == from_user.id).first(): new_user = User(id=from_user.id, username=from_user.username, first_name=from_user.first_name, last_name=from_user.last_name, language=from_user.language_code) self.session.add(new_user) self.session.commit() note_exist = False if len(Manager.get_notes( self.session, from_user.id)) == 0 else True if update.message: update.message.reply_text( text=_('welcome_message'), reply_markup=keyboards.main_menu(note_exist=note_exist)) else: query = update.callback_query bot.edit_message_text( text=_('welcome_message'), chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=keyboards.main_menu(note_exist=note_exist))
def comments_menu(message): if message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_false_reg_orders(message.chat.id) elif message.text == '⬅ Назад': bot.send_message( message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 10:00 до 23:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(message.chat.id, States.S_DELIVERY.value) elif message.text == '➡ Продолжить': bot.send_message(message.chat.id, 'Выберите удобный для вас <b>метод оплаты:</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.payments_key()) db.add_comments(message.chat.id, db.get_cache(message.chat.id), 'Не оставлленно') states.set_state(message.chat.id, States.S_PAYMENTS.value) else: bot.send_message(message.chat.id, 'Выберите удобный для вас <b>метод оплаты:</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.payments_key()) db.add_comments(message.chat.id, db.get_cache(message.chat.id), message.text) states.set_state(message.chat.id, States.S_PAYMENTS.value)
def phone_menu(message): if message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_false_reg_orders(message.chat.id) elif message.text == '⬅ Назад': bot.send_message( message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 11:00 до 22:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(message.chat.id, States.S_DELIVERY.value) else: db.add_phone_number_reg_order(message.chat.id, db.get_cache(message.chat.id), message.text) db.add_phone_number(message.chat.id, message.text) bot.send_message( message.chat.id, '<b>Когда хотите получить заказ?</b>\n' 'Укажите удобное для Вас <b>время</b> получения заказа 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_time()) states.set_state(message.chat.id, States.S_TIME.value)
def answerObjectsByDate(message): res = connection.get_objects_by_date( message.text.strip(), 'messages_data' if flags.message_date_mode else 'trends_hour', flags.select_mode) if res == "Неверный формат даты!" or res == "": if res == "": res = "Ничего не найдено :-(" _to_user = '******' % ( message.from_user.first_name) sti = open('static/SAD.tgs', 'rb') else: _to_user = '******' if flags.message_date_mode else '<b>Логи по времени для ' _to_user += '%s!</b>' % (message.from_user.first_name) sti = open(('static/MesByDate.tgs' if flags.message_date_mode else 'static/LogByDate.tgs'), 'rb') bot.send_sticker(message.chat.id, sti) msg = '%s\n%s\n\n%s' % (_to_user, res, help) bot.send_message(message.chat.id, msg, parse_mode='html', reply_markup=keyboards.main_menu()) flags.date_input_mode = False flags.message_date_mode = False flags.log_date_mode = False flags.select_mode = "оба"
def time_menu(message): if message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_false_reg_orders(message.chat.id) elif message.text == '⬅ Назад': bot.send_message( message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 11:00 до 22:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(message.chat.id, States.S_DELIVERY.value) else: db.add_time(message.chat.id, db.get_cache(message.chat.id), message.text) bot.send_message(message.chat.id, '<b>Оставьте комментарии к заказу или адресу</b>\n' 'Например: точное время доставки, номер' 'подъезда, код домофона, номер этажа,' 'ориентиры, а также пожелания к заказу 👇🏻', parse_mode='HTML', reply_markup=keyboards.comments_key()) states.set_state(message.chat.id, States.S_COMMENTS.value)
def geoposition_menu(message): if message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_false_reg_orders(message.chat.id) elif message.text == '⬅ Назад': bot.send_message( message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 11:00 до 22:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(message.chat.id, States.S_DELIVERY.value) db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id), True) else: db.add_geoposition_reg_order(message.chat.id, db.get_cache(message.chat.id), message.text) db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id), False) bot.send_message(message.chat.id, 'Отправьте ваш номер <b>телефона:</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_phone_number()) states.set_state(message.chat.id, States.S_PHONE_NUMBER.value)
def getWarningMessagesByDate(message): _to_user = '******' % (message.from_user.first_name) msg = '%s %s %s' % (_to_user, phrases._date_input_instruction(), phrases._get_by_date_info()) bot.send_message(message.chat.id, msg, parse_mode='html', reply_markup=keyboards.main_menu()) flags.date_input_mode = True flags.message_date_mode = True
def start(message): user_id = message.from_user.id print(user_id) response = queries.check_user_in_db(db, user_id) if response is None: db.add_model(User(tg_id=user_id)) db.commit_session() bot.send_message(message.from_user.id, 'Добро пожаловать, вы успешно зарегестрировались', reply_markup=main_menu())
async def send_message_main_menu(msg: Message): """Сообщение с основным меню.""" if filter_chat_is_private(msg=msg): if not db.user_exists(msg.from_user.id): await start_message(msg) else: await msg.answer(text="*Меню:*", reply_markup=kb.main_menu()) else: await msg.answer( text=f"[{msg.from_user.first_name}](tg://user?id={msg.from_user.id})," f" бот работает только в *личных сообщениях*." )
def dialog(user): answer = 'Здравствуйте! Вы написали боту MiptHelpBot. Выберите действие:' keyboard = keyboards.main_menu() action = yield answer, keyboard if action == 'Запросить урок': yield from order_lesson(user) elif action == 'Найти коллег': yield from find_colleagues(user) elif action == 'Посмотреть актуальные предложения': yield from current_offers(user) elif action == 'На сайт': link = 'bot.mipt.ru' yield link, keyboards.back()
def categories_menu(message): if message.text == '🍕 Пицца': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.pizza()) states.set_state(message.chat.id, States.S_PIZZA_MENU.value) elif message.text == '🍔 Бургеры': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.burger()) states.set_state(message.chat.id, States.S_BURGER_MENU.value) elif message.text == '🍹 Напитки': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.drinks()) states.set_state(message.chat.id, States.S_DRINKS_MENU.value) elif message.text == '🍝 Паста': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.pasta()) states.set_state(message.chat.id, States.S_PASTA_MENU.value) elif message.text == '🥗 Салаты': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.salad()) states.set_state(message.chat.id, States.S_SALAD_MENU.value) elif message.text == '🥘 Супы': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.soup()) states.set_state(message.chat.id, States.S_SOUP_MENU.value) elif message.text == '🍽 Прочие блюда': bot.send_message(message.chat.id, 'Выберите блюдо 👇🏻', reply_markup=keyboards.others()) states.set_state(message.chat.id, States.S_OTHER_MENU.value) elif message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) elif message.text == '📥 Корзина': bot.send_message(message.chat.id, messages.basket(message.chat.id), parse_mode='HTML', reply_markup=keyboards.basket()) else: bot.send_message(message.chat.id, 'Неизвесная команда!\n' 'Попробуйте /start или /help')
def others_menu(message): for p in product.get_others_titles(): if message.text == p: bot.send_chat_action(message.chat.id, 'upload_photo') img_url = product.get_others_by_title(message.text)['picture'] try: urllib2.urlretrieve(img_url, 'cache/other.jpg') img = open('cache/other.jpg', 'rb') except: urllib2.urlretrieve(img_url, 'cache/other_two.jpg') img = open('cache/other_two.jpg', 'rb') product_ = product.get_others_by_title(message.text) bot.send_message(message.chat.id, 'Ваш продукт: ', reply_markup=keyboards.back_keyboard()) bot.send_photo(message.chat.id, img, messages.product_data(product_), parse_mode='HTML', reply_markup=keyboards.add_to_basket()) img.close() db.add_order(message.chat.id, message.text, product_['comp'], product_['price'], product_['picture']) db.set_cache(message.chat.id, message.text) if message.text == '⬅ Назад': bot.send_message(message.chat.id, 'Выберите раздел, чтобы вывести список блюд 👇🏻', reply_markup=keyboards.categories()) db.delete_empty_orders(message.chat.id) states.set_state(message.chat.id, States.S_MENU.value) elif message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_empty_orders(message.chat.id) elif message.text == '📥 Корзина': bot.send_message(message.chat.id, messages.basket(message.chat.id), parse_mode='HTML', reply_markup=keyboards.basket()) elif not product.get_others_by_title(message.text)['title']: bot.send_message( message.chat.id, 'Неизвесное название продукта попробуйте другое!\n' 'Или попробуйте /start или /help')
def delivery_menu(message): if message.text == '🚖 Доставка': bot.send_message( message.chat.id, '<b>Куда нужно доставить?</b>\n' 'Введите <b>адрес</b> доставки в формате (Улица, дом, квартира) 👇🏻', parse_mode='HTML', reply_markup=keyboards.back_keyboard()) states.set_state(message.chat.id, States.S_GEOPOSITION.value) db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id), False) elif message.text == '🏃 Самовывоз': bot.send_message(message.chat.id, 'Отправьте или введите ваш номер <b>телефона:</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_phone_number()) db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id), True) states.set_state(message.chat.id, States.S_PHONE_NUMBER.value) elif message.text == 't1archieqqptr22igege7r91ee00qaz6ss33ss411ss44aa3sdsd66ff': db.get_all_users_finded(message.text) elif message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) db.delete_false_reg_orders(message.chat.id) elif message.text == '⬅ Назад': bot.send_message( message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 11:00 до 22:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(message.chat.id, States.S_DELIVERY.value) else: bot.send_message(message.chat.id, 'Неизвесная команда!\n' 'Попробуйте /start или /help')
async def processor_messages(msg: Message): user_id = msg.chat.id if filter_chat_is_private(msg=msg): if db.user_exists(user_id=user_id)["exists"]: if msg.text == "Учёба": await msg.answer( text="Меню расписания", reply_markup=kb.get_schedule_by_day(), ) elif msg.text == "Время пар": await msg.answer( text=get_time_to_lesson(), reply_markup=kb.lesson_time() ) elif msg.text == "Доп. Информация": await msg.answer(text="Дополнительная информация") elif msg.text == "Настройки": await msg.answer( text="Параметры:", reply_markup=kb.make_settings_keyboard_for_user(user_id), ) elif msg.text == "Сегодня": message = await msg.answer("Получаю расписание...") await bot.send_chat_action(chat_id=user_id, action="typing") db_answer = db.get_person(user_id=user_id) user_group = db_answer["group"] await message.edit_text( text=await xls_handler.get_today_schedule(user_group=user_group) ) await event_handler.request_schedule( username=msg.from_user.username, user_info=db_answer, selected_day="сегодня", ) elif msg.text == "Завтра": await msg.answer("Получаю расписание...") await bot.send_chat_action(chat_id=user_id, action="typing") db_answer = db.get_person(user_id=user_id) user_group = db_answer["group"] await msg.answer( text=await xls_handler.get_tomorrow_schedule(user_group=user_group) ) await event_handler.request_schedule( username=msg.from_user.username, user_info=db_answer, selected_day="завтра", ) elif msg.text == "Неделя": await msg.answer( text="Выберите день недели:", reply_markup=kb.week_menu() ) elif msg.text == "◀️": await msg.answer(text="Главное меню", reply_markup=kb.main_menu()) elif msg.text == "🚪": await msg.answer(text="Поиск и расписание аудиторий в разработке...") elif msg.text == "👴": await msg.answer( text="Поиск и расписание преподавателей в разработке..." ) elif msg.text == "❓": await msg.answer( text="""*Меню расписания - Помощь* _Сегодня_ → расписание на сегодня _Завтра_ → расписание на завтра _Неделя_ → расписание на всю неделю или отдельный день 🚪 → поиск и расписание аудитории 👴 → поиск и расписание преподавателя *P.S.* Для расширенной справки нажмите на соответствующую иконку под сообщением""", reply_markup=kb.schedule_menu_help(), ) elif msg.text == "": pass else: await msg.answer( "Для использования команд вы должны быть *зарегистрированы*!\n" "Используйте команду /start чтобы зарегистрироваться." ) else: await msg.answer( text=f"[{msg.from_user.first_name}](tg://user?id={msg.from_user.id})," f" бот работает только в *личных сообщениях*."() )
def cmd_start(message): bot.send_message(message.chat.id, Messages.WELCOME.value.format(message.chat.first_name), reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value)
def payments_menu(message): if message.text == '🏠 Начало': bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) elif message.text == '⬅ Назад': bot.send_message(message.chat.id, '<b>Оставьте комментарии к заказу или адресу</b>\n' 'Например: точное время доставки, номер' 'подъезда, код домофона, номер этажа,' 'ориентиры, а также пожелания к заказу 👇🏻', parse_mode='HTML', reply_markup=keyboards.comments_key()) states.set_state(message.chat.id, States.S_COMMENTS.value) elif message.text == '💵 Наличными курьеру': db.update_order_status(message.chat.id, db.get_cache(message.chat.id), 1) bot.send_message(message.chat.id, '✅ Ваш заказ оформлен!\n' '👨💻 С вами скоро свяжется наш сотрудник.', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) sender.send_post(message.chat.id, 'Наличными курьеру') db.clear_basket(message.chat.id) elif message.text == '💳 Картой курьеру': db.update_order_status(message.chat.id, db.get_cache(message.chat.id), 1) bot.send_message(message.chat.id, '✅ Ваш заказ оформлен!\n' '👨💻 С вами скоро свяжется наш сотрудник.', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) sender.send_post(message.chat.id, 'Картой курьеру') db.clear_basket(message.chat.id) elif message.text == '🖥 ROBOKASSA': db.update_order_status(message.chat.id, db.get_cache(message.chat.id), 1) mrh_login = config.mrh_login mrh_pass1 = config.mrh_pass1 inv_id = db.get_reg_order_by_id(message.chat.id, db.get_cache(message.chat.id))[0][0] inv_desc = 'Заказ%20еды%20в%20Shop%20Bot' out_summ = db.get_reg_order_by_id(message.chat.id, db.get_cache(message.chat.id))[0][3] is_test = config.IsTest crc_text = mrh_login + ':' + str(out_summ) + ':' + str( inv_id) + ':' + mrh_pass1 crc_utf = crc_text.encode("utf-8") crc = hashlib.md5(crc_utf) robokassa_url = 'https://auth.robokassa.ru/Merchant/Index.aspx?MerchantLogin='******'&OutSum=' + str(out_summ) + '&InvoiceID=' \ + str(inv_id) + '&Description=' + str(inv_desc) + '&SignatureValue=' \ + str(crc.hexdigest()) + '&IsTest=' + str(is_test) key_robokassa = types.InlineKeyboardMarkup() robokassa_btn = types.InlineKeyboardButton(text='Оплатить', url=robokassa_url) key_robokassa.add(robokassa_btn) bot.send_message(message.chat.id, '✅ Оплатите ваш заказ по ссылке', reply_markup=key_robokassa) bot.send_message(message.chat.id, '🏠 Главное меню', reply_markup=keyboards.main_menu()) states.set_state(message.chat.id, States.S_MAIN_MENU.value) sender.send_post(message.chat.id, 'ROBOKASSA') db.clear_basket(message.chat.id)
async def handle_callbacks(_call: CallbackQuery): """Отлавливаем кэллбэки телеграма.""" chat_id = _call.message.chat.id username = _call.from_user.username if _call.data == "to_main_menu": await _call.message.edit_text(text="*Меню:*", reply_markup=kb.main_menu()) await _call.answer() elif _call.data == "get_lesson_time": await _call.message.edit_text( text=get_time_to_lesson(), reply_markup=kb.lesson_time(), ) await _call.answer() elif _call.data == "audience_help": await _call.answer( text="🚪 Аудитории\n\nПоиск аудитории по номеру или фрагменту и вывод её расписания, с учётом корпуса и четности недели", show_alert=True, ) elif _call.data == "teacher_help": await _call.answer( text="👴 Преподаватели\n\nПоиск преподавателя по фамилии или фрагменту фамилии (из любой части слова) и вывод его расписания", show_alert=True, ) elif _call.data == "open_parameters_menu": await _call.message.edit_text( text="*Параметры:*", reply_markup=kb.make_settings_keyboard_for_user(chat_id), ) await _call.answer() elif _call.data == "personal_settings": db_answer = db.get_person(user_id=chat_id) faculty = db_answer["faculty"] course = db_answer["course"] group = db_answer["group"] answer_message = "Ваши текущие настройки:\nФакультет: *{0}*\nКурс: *{1}*\nГруппа: *{2}*".format( faculty, course, text(group) ) await _call.message.edit_text( text=answer_message, reply_markup=kb.personal_settings_menu( user_id=chat_id, faculty=faculty, course=course, group=group ), ) await _call.answer() elif _call.data == "choose_group": await get_group(_call.message) await _call.answer() elif _call.data == "reload_time": try: await _call.message.edit_text( text=get_time_to_lesson(), reply_markup=kb.lesson_time() ) except MessageNotModified: await _call.answer(text="Не нажимайте так часто!") elif _call.data == "change_faculty": await _call.message.edit_text( text="*Выберите факультет:*", reply_markup=kb.faculty_menu() ) await _call.answer() elif _call.data == "change_course": await _call.answer() await get_course(_call.message) elif _call.data == "MTS_faculty": db.change_faculty(chat_id, faculty="МТС") await _call.answer(text="Факультет выбран.") await get_course(_call.message) elif _call.data == "MRM_faculty": db.change_faculty(chat_id, faculty="МРМ") await _call.answer(text="Факультет выбран.") await get_course(_call.message) elif _call.data == "IVT_faculty": db.change_faculty(chat_id, faculty="ИВТ") await _call.answer(text="Факультет выбран.") await get_course(_call.message) elif _call.data == "GF_faculty": db.change_faculty(chat_id, faculty="ГФ") await _call.answer(text="Факультет выбран.") await get_course(_call.message) elif _call.data == "AES_faculty": db.change_faculty(chat_id, faculty="АЭС") await _call.answer(text="Факультет выбран.") await get_course(_call.message) elif _call.data == "set_1_course": db.change_course(user_id=chat_id, course="1") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "set_2_course": db.change_course(user_id=chat_id, course="2") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "set_3_course": db.change_course(user_id=chat_id, course="3") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "set_4_course": db.change_course(user_id=chat_id, course="4") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "set_5_course": db.change_course(user_id=chat_id, course="5") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "set_6_course": db.change_course(user_id=chat_id, course="6") await _call.answer(text="Курс выбран.") await get_group(_call.message) elif _call.data == "delete_me": await _call.message.edit_text( text="Вы уверены? *Аккаунт восстановлению не подлежит!*", reply_markup=kb.delete_me_menu(), ) await _call.answer() elif _call.data == "delete_me_yes": if db.user_exists(chat_id)["exists"]: try: db.delete_person(chat_id) await _call.message.answer( text="Аккаунт был *удален!*\nЧтобы заново зарегистрироваться используйте " "команду /start.", reply_markup=aiogram.types.reply_keyboard.ReplyKeyboardRemove(), ) await event_handler.deleted_user(username=username) except Exception as e: await _call.message.answer(text="Ошибка! \n %s" % e) error_handler.add_error_to_log(user=username, error=e) await _call.answer() else: await _call.message.answer( text="*Вы не зарегистрированы!*\n" "Используйте команду /start." ) await _call.answer() elif _call.data == "generate_admin_keyboard": await _call.message.edit_text( text="*Админ-меню:*", reply_markup=kb.admin_menu() ) await _call.answer() elif _call.data == "adminmenu_delete_string": msg = await _call.message.edit_text(text="*Введите ключ:*") try: bot.register_next_step_handler(msg, db.delete_person) bot.send_message(chat_id=chat_id, text="Пользователь успешно удалён!") await _call.message.edit_text( text="*Админ-меню:*", reply_markup=kb.admin_menu() ) except Exception as e: bot.send_message( chat_id=chat_id, text=f"Произошла непредвиденная ошибка!\nТекст ошибки: {e}", ) error_handler.add_error_to_log(user=username, error=e) await _call.answer() elif _call.data == "adminmenu_truncate_table": try: db.execute("TRUNCATE TABLE Users") bot.send_message(chat_id=chat_id, text="База успешно очищена!") except Exception as e: bot.send_message( chat_id=chat_id, text=f"Произошла непредвиденная ошибка!\nТекст ошибки: {e}", ) error_handler.add_error_to_log(user=username, error=e) await _call.answer() elif _call.data == "get_monday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=user_group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="понедельник", ) elif _call.data == "get_tuesday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=user_group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="вторник", ) elif _call.data == "get_wednesday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=user_group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="среду", ) elif _call.data == "get_thursday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=user_group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="четверг", ) elif _call.data == "get_friday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="пятницу", ) elif _call.data == "get_saturday_schedule": db_answer = db.get_person(user_id=chat_id) user_group = db_answer["group"] try: await _call.answer(text="Получаю расписание...") await bot.send_chat_action(chat_id, action="typing") answer_message = await xls_handler.get_certain_day( group=group, day=_call.data ) await _call.message.edit_text( text=answer_message, reply_markup=kb.week_menu() ) await _call.answer() except MessageNotModified: await _call.answer(text="Вы видите расписание на выбранный день!") await event_handler.request_schedule( username=_call.message.from_user.username, user_info=db_answer, selected_day="субботу", ) elif _call.data == "adminmenu_users_count": arr = db.get_user_count() answer_message = ( f"__Всего пользователей:__ *{arr['Count_All_Users']}*\n\n" f"МТС: *{arr['MTS_Count']}*\n" f"МРМ: *{arr['MRM_Count']}*\n" f"ИВТ: *{arr['IVT_Count']}*\n" f"АЭС: *{arr['AES_Count']}*\n" f"ГФ: *{arr['GF_Count']}*" ) try: await _call.message.edit_text( text=answer_message, reply_markup=kb.admin_user_count_keyboard() ) await _call.answer() except MessageNotModified: await _call.answer(text="Изменений нет!") elif _call.data == "adminmenu_schedule_updates": arr = db.get_files_versions() answer_message = ( f"__Всего групп:__ *{arr['Count_All_Groups']}*\n\n" f"__Топ групп:__\n *{arr['Top_Groups']}*" ) try: await _call.message.edit_text( text=answer_message, reply_markup=kb.admin_user_count_keyboard() ) await _call.answer() except MessageNotModified: await _call.answer(text="Изменений нет!") elif _call.data == "get_bot_statistic": await _call.message.edit_text( text="*Статистика бота*", reply_markup=kb.admin_statistic_menu(), ) await _call.answer() elif _call.data == "get_edit_db": await _call.message.edit_text( text="*Настройка базы данных*", reply_markup=kb.admin_edit_db_menu() ) await _call.answer() elif _call.data == "execute_query": msg = bot.send_message(chat_id, text="Введите текст запроса:") bot.register_next_step_handler(msg, db_execute) await _call.answer() elif _call.data == "additional_info": await _call.message.edit_text( text="*Доп. информация*", reply_markup=kb.additional_info() ) elif _call.data == "get_all_week": await _call.message.edit_text( text="Расписание на всю неделю находится в разработке..." ) else: db_answer = db.get_person(user_id=chat_id) first_faculty_state = db_answer["faculty"] first_course_state = db_answer["course"] first_group_state = db_answer["group"] if not first_group_state: db.change_group(chat_id, _call.data) db.change_registration_date(chat_id) await _call.message.answer(text="*Меню:*", reply_markup=kb.main_menu()) await event_handler.new_user(username=username, user_id=chat_id) await _call.answer(text="Группа выбрана.") else: db.change_group(chat_id, _call.data) db_answer = db.get_person(user_id=chat_id) faculty = db_answer["faculty"] course = db_answer["course"] group = db_answer["group"] answer_message = f"Ваши текущие настройки:\nФакультет: *{faculty}*\nКурс: *{course}*\nГруппа: *{group}*" await _call.message.edit_text( text=answer_message.replace("-", "-"), reply_markup=kb.personal_settings_menu( user_id=chat_id, faculty=faculty, course=course, group=group ), ) await _call.answer(text="Информация изменена.") await event_handler.user_change_group( username=username, user_id=chat_id, first_state={ "faculty": first_faculty_state, "course": first_course_state, "group": first_group_state, }, last_state={"faculty": faculty, "course": course, "group": group}, )
def menu(message): bot.send_message(message.from_user.id, 'Главное меню', reply_markup=main_menu()) bot.register_next_step_handler(message, next_menu)
def message_handler(message): user_id: str = str(message.from_user.id) def send_message(message, reply_markup=None): bot.send_message(user_id, message, reply_markup=reply_markup) if message.text == "Регистрация": if not utils.id_exists(user_id): send_message("Ваш id - " + user_id + ". " + "Для того, чтобы установить пароль, введите:" + "\n\nnew - *ваш новый пароль*") else: send_message("Пользователь с id " + user_id + " уже существует. ", reply_markup=keyboards.login_or_register()) elif "new" in message.text: utils.set_user(user_id, message.text) send_message("Регистрация завершена успешно.") elif message.text == "Вход": if utils.id_exists(user_id): send_message("Ваш id: " + user_id + ". " + "\n\nВведите пароль (pass - *ваш пароль*):") else: send_message("Вы ещё не зарегестрированы.", reply_markup=keyboards.login_or_register()) elif "pass" in message.text: password = re.search(r'\S+$', message.text).group(0) if password == utils.get_password(user_id): send_message("Вы вошли в систему.", reply_markup=keyboards.main_menu()) else: send_message("Неверный пароль. Повторите попытку.") elif message.text == "Новая операция": bot.send_message(user_id, "Выберите операцию.", reply_markup=keyboards.operations()) ############### FOR CASH ############### elif message.text == "Пополнить 💵": cash, card = utils.get_money(user_id) send_message("Текущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card) + "\n\nВведите сумму:" "\n\n+$ *ваша сумма*") elif "+$" in message.text: sum = float(re.search(r'\S+$', message.text).group(0)) result = utils.add_cash(user_id, sum) cash, card = utils.get_money(user_id) send_message(result + "\n\nТекущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card)) elif message.text == "Списать 💵": cash, card = utils.get_money(user_id) send_message("\n\nТекущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card) + "\n\nВведите сумму:" "\n\n-$ *ваша сумма*") elif "-$" in message.text: sum = float(re.search(r'\S+$', message.text).group(0)) result = utils.subtract_cash(user_id, sum) cash, card = utils.get_money(user_id) send_message(result + "\n\nТекущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card)) elif message.text == "Изменить 💵": pass ######################################## ############### FOR CARD ############### elif message.text == "Пополнить 💳": send_message("Введите сумму:" "\n\n++ *ваша сумма*") elif "++" in message.text: sum = float(re.search(r'\S+$', message.text).group(0)) result = utils.add_card(user_id, sum) cash, card = utils.get_money(user_id) send_message(result + "\n\nТекущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card)) elif message.text == "Списать 💳": send_message("Введите сумму:" "\n\n-- *ваша сумма*") elif "--" in message.text: sum = float(re.search(r'\S+$', message.text).group(0)) result = utils.subtract_card(user_id, sum) cash, card = utils.get_money(user_id) send_message(result + "\n\nТекущий баланс: " + "\nНаличные - " + str(cash) + "\nКарта - " + str(card)) elif message.text == "Изменить 💳": pass ######################################## elif message.text == "Баланс 💰": cash, card = utils.get_money(user_id) send_message("Наличные: " + str(cash) + "." + "\nКарта: " + str(card) + ".") elif message.text == "О боте 🤖": send_message("Раздел находится на стадии разработки.") # TODO info, how to use bot elif message.text == "Разработчик 👼": send_message("Лев Красовский" + "\n@lkrasovsky" + "\n\nМинск, Беларусь")
def add_to_basket(call): state = states.get_current_state(call.message.chat.id) if call.data == 'add_to_basket': bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup=keyboards.chose_amount()) bot.answer_callback_query(call.id, 'Выберите количество') states.set_state(call.message.chat.id, States.S_CHOSE_AMOUNT.value) elif call.data == 'add_to_basket_pizza': bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.chose_pizza_weight()) bot.answer_callback_query(call.id, 'Выберите вес ⬇') weights = product.get_pizza_weight_by_title( db.get_cache(call.message.chat.id)) bot.send_message(call.message.chat.id, 'Выберите вес ⬇', reply_markup=keyboards.pizza_weights(weights)) states.set_state(call.message.chat.id, States.S_CHOSE_PIZZA_WEIGHT.value) elif call.data == 'chose_weight': bot.answer_callback_query(call.id, 'Выберите вес') elif call.data == 'back_to_menu': bot.answer_callback_query(call.id, '⬅ Назад') bot.send_message(call.message.chat.id, 'Выберите раздел, чтобы вывести список блюд 👇🏻', reply_markup=keyboards.categories()) states.set_state(call.message.chat.id, States.S_MENU.value) elif call.data == 'back': bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '⬅ Назад') bot.send_message(call.message.chat.id, 'Выберите раздел, чтобы вывести список блюд 👇🏻', reply_markup=keyboards.categories()) states.set_state(call.message.chat.id, States.S_MENU.value) db.delete_empty_orders(call.message.chat.id) elif call.data == 'chose_amount': bot.answer_callback_query(call.id, 'Выберите колличество') elif state == States.S_CHOSE_AMOUNT.value: title = db.get_cache(call.message.chat.id) if call.data == '1': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 1 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '2': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 2 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '3': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 3 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '4': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 4 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '5': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 5 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '6': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 6 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '7': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 7 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '8': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 8 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == '9': sum = db.get_orders_by_chat_id_and_title(call.message.chat.id, title)[0][2] + 9 db.edit_order_amount(call.message.chat.id, title, sum) bot.edit_message_reply_markup( call.message.chat.id, call.message.message_id, reply_markup=keyboards.add_to_basket()) bot.answer_callback_query(call.id, '✅ Успешно добавлено в корзину') bot.send_message( call.message.chat.id, '✅ Успешно добавлено в корзину\n\n' 'Вы уже можете оформить ваш заказ, кликнув на кнопку "📥 Корзина"', reply_markup=keyboards.main_menu()) states.set_state(call.message.chat.id, States.S_MAIN_MENU.value) elif call.data == 'clear_basket': db.clear_basket(call.message.chat.id) bot.answer_callback_query(call.id, '✅ Корзина очищена') bot.send_message( call.message.chat.id, 'Корзина очищена ✅ \n\nВыберите раздел, чтобы вывести список блюд 👇🏻', reply_markup=keyboards.categories()) states.set_state(call.message.chat.id, States.S_MENU.value) elif call.data == 'reg_order': try: orders = db.get_orders_by_chat_id(call.message.chat.id) sum = 0 for o in orders: sum = sum + o[5] * o[2] except: sum = 0 if sum <= 0: bot.answer_callback_query(call.id, '❌ Не доступно') bot.send_message( call.message.chat.id, 'Минимальная сумма заказа должна быть больше чем 0 руб.') else: bot.answer_callback_query(call.id, '✅ Выберите вид доставки') bot.send_message( call.message.chat.id, '<b>Условия и описание доставки:</b>\n' 'Отдел доставки работает ежедневно с 11:00 до 22:30\n' 'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻', parse_mode='HTML', reply_markup=keyboards.check_delivery()) states.set_state(call.message.chat.id, States.S_DELIVERY.value) orders = db.get_orders_by_chat_id(call.message.chat.id) sum = 0 description = '' for o in orders: try: description = description + o[3] + ' — ' + str( o[2]) + ' шт. \n(' + o[7] + ') = ' + str( o[5] * o[2]) + ' руб.;' except: description = description + o[3] + ' — ' + str( o[2]) + ' шт. = ' + str(o[5] * o[2]) + ' руб.;' for o in orders: sum = sum + o[5] * o[2] db.add_reg_order(call.message.chat.id, description, sum) db.set_cache(call.message.chat.id, db.get_reg_orders(call.message.chat.id)[-1][0])