Example #1
0
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
Example #2
0
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)
Example #3
0
 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"
     )
Example #4
0
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
Example #5
0
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)
Example #6
0
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"
    )
Example #7
0
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")
Example #8
0
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")
Example #9
0
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)
Example #10
0
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)
    )
Example #11
0
 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")
Example #12
0
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)
Example #13
0
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")
Example #14
0
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())
Example #15
0
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))
Example #16
0
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())
Example #17
0
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)))
Example #18
0
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()))
Example #19
0
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")
Example #20
0
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"
    )
Example #21
0
 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")
Example #22
0
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))
Example #23
0
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())
Example #24
0
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")
Example #25
0
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")
Example #26
0
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))
Example #27
0
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))
Example #28
0
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)
Example #29
0
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("; ")))
Example #30
0
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())