def cancel_handler(call_back): try: bot.edit_message_text(text="Отмена", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) except ApiException: pass
def select_educator_handler(call_back): message_text_data = call_back.message.text.split("\n\n")[1:-1] chosen_event_number = int(call_back.data.split(". ")[0]) - 1 chosen_event = ". ".join( message_text_data[chosen_event_number].split(". ")[1:]) chosen_event_data = chosen_event.split("\n") available_educators = [] for place_edu in chosen_event_data[1:]: if "(" not in place_edu: continue place_edu = place_edu.strip(" {0}".format(emoji["heavy_check_mark"])) available_educators.append(place_edu.split("(")[1][:-1]) inline_keyboard = InlineKeyboardMarkup(row_width=1) inline_keyboard.add(*[ InlineKeyboardButton(text=name, callback_data=name[:max_inline_button_text_len]) for name in available_educators ]) inline_keyboard.row( InlineKeyboardButton(text="Отмена", callback_data="Отмена")) answer = "Выбранное занятие:\n<b>{0}</b>\n\nВыбери преподавателя, " \ "которого оставить:".format( chosen_event_data[0].strip(" {0}".format(emoji["cross_mark"]))) bot.edit_message_text(text=answer, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id, parse_mode="HTML", reply_markup=inline_keyboard)
def wrapper(call_back): bot.edit_message_text( text=access_denied_answer, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id, parse_mode="HTML" )
def statistics_handler(call_back): user = g.current_tbot_user rates = user.get_rates() if not sum(rates.values()): answer = "Пока что нет оценок." else: avg_rate = sum([r * rates[r] for r in rates]) / sum(rates.values()) stars = emoji["star"] * int(round(avg_rate)) answer = "Средняя оценка: {0}\n{1} ({2})".format( round(avg_rate, 1), stars, sum(rates.values()) ) if user.tg_id in ids.values(): admin_statistics = user.get_admin_statistics() admin_answer = ( "Количество пользователей: {0}\n" "Количество групп: {1}\n" "Количество преподавателей: {2}\n" "Количество пользователей с активной рассылкой: {3}" ).format(*admin_statistics) bot.send_message( chat_id=user.tg_id, text=admin_answer ) try: bot.edit_message_text(text=answer, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id, parse_mode="HTML") except ApiException: pass
def select_day_choose_educator_handler(call_back): iso_day_date = list((datetime.today() + server_timedelta).isocalendar()) if iso_day_date[2] == 7: iso_day_date[1] += 1 iso_day_date[2] = week_day_number[week_day_titles[call_back.data]] day_date = func.date_from_iso(iso_day_date) answer_data = func.get_lessons_with_educators(call_back.message.chat.id, day_date) day_string = answer_data["date"] bot.edit_message_text(chat_id=call_back.message.chat.id, text="{0} {1}".format(emoji["calendar"], day_string), message_id=call_back.message.message_id) answer = "Вот список подходящих занятий:\n\n" answer += answer_data["answer"] inline_keyboard = InlineKeyboardMarkup() if not answer_data["is_empty"]: for event in answer_data["answer"].split("\n\n"): button_text = "{0}".format( event.split("\n")[0].strip(" {0}".format( emoji["cross_mark"]))[3:-4]) inline_keyboard.row(*[ InlineKeyboardButton( text=name, callback_data=name[:max_inline_button_text_len]) for name in [button_text] ]) inline_keyboard.row( InlineKeyboardButton(text="Отмена", callback_data="Отмена")) answer += "\n\nВыбери необходиое занятие:" bot.send_message(text=answer, chat_id=call_back.message.chat.id, parse_mode="HTML", reply_markup=inline_keyboard)
def sav_del_current_status_handler(call_back): user = g.current_tbot_user if call_back.data == "Сохранить": user.save_current_status_into_templates() sav_del_text = "сохранен" if not user.is_educator: sav_del_text += "а" else: user.delete_current_status_from_templates() sav_del_text = "удален" if not user.is_educator: sav_del_text += "а" db.session.commit() if user.is_educator: answer = "Преподаватель <b>{0}</b> {1}.".format( user.get_current_status_title(), sav_del_text ) else: answer = "Группа <b>{0}</b> {1}.".format( user.get_current_status_title(), sav_del_text ) bot.edit_message_text( text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML" )
def build_trail_handler(call_back): user = g.current_tbot_user bot_msg = bot.edit_message_text(text="{0}\U00002026".format( choice(loading_text["ya_timetable"])), chat_id=user.tg_id, message_id=call_back.message.message_id) answer, is_tomorrow, is_error = nf.create_suburbans_answer( from_code=nf.get_station_code_from_text(call_back.message.text), to_code=nf.get_station_code_from_text(call_back.message.text, is_end=True), for_date=date.today() + timedelta(days=(1 if call_back.data == "Завтра" else 0)), limit=7 if call_back.data == "Завтра" else 3) if not is_error: if call_back.data == "Завтра" or is_tomorrow: if is_tomorrow: inline_answer = emoji["warning"] + " На сегодня нет электричек" bot.answer_callback_query(call_back.id, inline_answer, show_alert=True) inline_keyboard = update_keyboard(for_tomorrow=True) else: inline_keyboard = update_keyboard() else: inline_keyboard = InlineKeyboardMarkup() bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=bot_msg.message_id, reply_markup=inline_keyboard, parse_mode="HTML")
def select_block_handler(call_back): user = g.current_tbot_user # read bl as block bl_cnt, cur_bl_n, for_date = nf.get_block_data_from_block_answer( call_back.message.text) if bl_cnt == 1: bot.answer_callback_query(call_back.id, "Доступна только одна пара", cache_time=2) return is_next_block = call_back.data == "next_block" bot_msg = bot.edit_message_text(text="Смотрю {0} пару\U00002026".format( "следующую" if is_next_block else "предыдущую"), chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) answer = user.get_block_answer( for_date=for_date, block_num=(cur_bl_n + (1 if is_next_block else -1)) % bl_cnt or bl_cnt) bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=bot_msg.message_id, reply_markup=events_keyboard(answer), parse_mode="HTML")
def editor_choose_educator_handler(call_back): user = g.current_tbot_user answer = ask_to_select_day_answer json_week_data = func.get_json_week_data(call_back.message.chat.id) days = json_week_data["Days"] days_keyboard = InlineKeyboardMarkup(True) for day in days: data = datetime.strptime(day["Day"], "%Y-%m-%dT%H:%M:%S").date() answer_data = func.get_lessons_with_educators( call_back.message.chat.id, data) if answer_data["is_empty"]: continue days_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in [day["DayString"].split(", ")[0].capitalize()] ]) if len(days_keyboard.to_dic()["inline_keyboard"]): days_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Отмена"] ]) else: answer = no_edu_days_answer bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, reply_markup=days_keyboard)
def g_e_templates(call_back): user = g.current_tbot_user last_row = ["Отмена"] if call_back.data == "Группы": items = user.groups.all() choose_text = "группу" no_items_text = "групп" if not user.is_educator: last_row.append(user.get_sav_del_button_text()) else: items = user.educators.all() choose_text = "преподавателя" no_items_text = "преподавателей" if user.is_educator: last_row.append(user.get_sav_del_button_text()) if items: answer = "Выбери {0} для переключения:".format(choose_text) else: answer = "Нет сохраненных {0}.".format(no_items_text) bot.edit_message_text( text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML", reply_markup=templates_list_keyboard(items, last_row) )
def wrapper(call_back): if not g.current_tbot_user.is_educator: func(call_back) else: bot.edit_message_text(text=student_required_answer, chat_id=g.current_tbot_user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML")
def show_full_info(call_back): bot.edit_message_text(text=special_thanks, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id, parse_mode="HTML", disable_web_page_preview=True) inline_answer = "И тебе :)" bot.answer_callback_query(call_back.id, inline_answer, cache_time=1)
def input_educator_name_handler(call_back): bot.edit_message_text(text=call_back.data, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.send_message(chat_id=call_back.message.chat.id, text=ask_to_input_educator_register, reply_markup=ForceReply(), parse_mode="HTML")
def select_division_handler(call_back): bot_msg = bot.edit_message_text( text="Загружаю список направлений\U00002026", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.edit_message_text(text="Выбери направление:", chat_id=call_back.message.chat.id, message_id=bot_msg.message_id, reply_markup=divisions_keyboard())
def select_level_handler(call_back): bot_msg = bot.edit_message_text(text="Ищу подходящие ступени\U00002026", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.edit_message_text(text="{0}/\n\nВыбери ступень:".format( call_back.data), chat_id=call_back.message.chat.id, message_id=bot_msg.message_id, reply_markup=levels_keyboard(call_back.data))
def change_start_station_handler(call_back): user = g.current_tbot_user answer = "Выбери начальную станцию:" bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, reply_markup=start_station_keyboard())
def select_group_handler(call_back): bot_msg = bot.edit_message_text(text="Получаю список групп\U00002026", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.edit_message_text( text="{0}{1}/\n\nВыбери группу:".format( call_back.message.text.split("\n\n")[0], call_back.data), chat_id=call_back.message.chat.id, message_id=bot_msg.message_id, reply_markup=groups_keyboard(program_id=int(call_back.data)))
def editor_choose_lesson_handler(call_back): user = g.current_tbot_user blocks = user.get_selectable_blocks() bot.edit_message_text( text=ask_to_select_block_answer if blocks else no_blocks_answer, chat_id=user.tg_id, message_id=call_back.message.message_id, reply_markup=selectable_blocks_keyboard(blocks.keys()))
def start_station_handler(call_back): user = g.current_tbot_user answer = "Начальная: <b>{0}</b>\nВыбери конечную станцию:".format( call_back.data) bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, reply_markup=end_station_keyboard(call_back.data), parse_mode="HTML")
def current_link_callback_handler(call_back): user = g.current_tbot_user answer = "Ссылка на текущее расписание: {0}" bot.edit_message_text( text=answer.format(user.get_current_tt_link()), chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML" )
def wrapper(call_back): user = User.query.filter_by(tg_id=call_back.message.chat.id).first() if user: g.current_tbot_user = user func(call_back) else: bot.edit_message_text(text=ask_to_register_answer, chat_id=call_back.message.chat.id, message_id=call_back.message.message_id, parse_mode="HTML")
def select_year_handler(call_back): bot_msg = bot.edit_message_text(text="Смотрю доступные года\U00002026", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.edit_message_text(text="{0}{1}/\n\nВыбери год поступления:".format( call_back.message.text.split("\n\n")[0], call_back.data), chat_id=call_back.message.chat.id, message_id=bot_msg.message_id, reply_markup=years_keyboard( path=call_back.message.text.split("\n\n")[0], program_slice=call_back.data))
def types_selected_handler(call_back): user = g.current_tbot_user bot.edit_message_text(text="\n\n".join([ selected_lesson_answer, call_back.message.text.split("\n\n")[1], how_to_hide_answer ]), chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML", reply_markup=hide_keyboard())
def full_place_on_handler(call_back): user = g.current_tbot_user user.is_full_place = call_back.data == "Полностью" db.session.commit() bot.edit_message_text(text=user.get_place_edited_answer(), chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML")
def lesson_chosen_handler(call_back): user = g.current_tbot_user answer = user.hide_block_lessons(text=call_back.message.text, chosen_idx=int(call_back.data)) db.session.commit() bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML")
def change_end_station_handler(call_back): user = g.current_tbot_user start_station = nf.get_station_title_from_text(call_back.message.text) answer = "Начальная: <b>{0}</b>\nВыбери конечную станцию:".format( start_station) bot.edit_message_text(text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, reply_markup=end_station_keyboard(start_station))
def select_program_handler(call_back): bot_msg = bot.edit_message_text( text="Ищу подходящие образовательные программы\U00002026", chat_id=call_back.message.chat.id, message_id=call_back.message.message_id) bot.edit_message_text(text="{0}{1}/\n\nВыбери программу:".format( call_back.message.text.split("\n\n")[0], call_back.data), chat_id=call_back.message.chat.id, message_id=bot_msg.message_id, reply_markup=programs_keyboard( alias=call_back.message.text.split("\n\n")[0], level_slice=call_back.data))
def relogin_callback_handler(call_back): user = g.current_tbot_user answer = "<i>Перезайти</i>\nИспользуй /home для отмены" bot.edit_message_text( text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML" ) call_back.message.text = call_back.data start_handler(call_back.message)
def select_types_handler(call_back): user = g.current_tbot_user answer = nf.update_types_answer(text=call_back.message.text, new_type=call_back.data) bot.edit_message_text( text=answer, chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML", reply_markup=types_keyboard( types=answer.split("\n\n")[1].split("\n")[-1][6:].split("; ")))
def select_week_day_schedule_handler(call_back): user = g.current_tbot_user if call_back.data == "Вся неделя": day = "Неделя" else: day = nf.get_key_by_value(week_day_titles, call_back.data) bot.edit_message_text(text="Расписание на: <i>{0}</i>\n".format(day), chat_id=user.tg_id, message_id=call_back.message.message_id, parse_mode="HTML", reply_markup=current_next_keyboard())