Beispiel #1
0
def process_lab_remove_info(message):
    global Q, queue_name, bot, state_table
    username = message.from_user.username
    chat_id = message.chat.id

    is_admin = username in ADMIN_USER
    is_student = USERS.get(username) is not None

    lab = None

    try:
        lab = int(message.text.strip())
        if lab <= 0:
            lab = None
            raise ValueError("Lab number must be greater than 0")
    except ValueError:
        bot.send_message(chat_id, "Неправильный формат ввода.")

    if lab is not None:
        query = Q.record_present(username, lab)
        if query is not None:
            Q.remove(username, lab)
            update_backup()
            bot.send_message(
                chat_id,
                "Ваша запись удалена. Теперь вы не сдаёте лабу номер " +
                str(lab))
        else:
            bot.send_message(chat_id, "Ты эту лабу и так не сдаёшь!")

    state_table[username] = BotState.READING_COMMAND
Beispiel #2
0
def get_user_rating(username, lab):
    name = USERS.get(username)

    if name is None:
        raise ValueError("User @" + username + "is not registered")
    elif lab <= 0:
        raise ValueError("Lab id must be positive")
    elif lab > len(leaderboard):
        raise LeaderboardLabError(username, lab)
    elif name not in leaderboard[lab - 1]:
        raise LeaderboardUserError(username, lab)
    else:
        return leaderboard[lab - 1][name]
Beispiel #3
0
def process_new_queue_name(message):
    global Q, queue_name, bot, state_table
    username = message.from_user.username
    chat_id = message.chat.id

    is_admin = username in ADMIN_USER
    is_student = USERS.get(username) is not None

    Q = Queue()
    update_backup()
    queue_name = message.text

    bot.send_message(chat_id,
                     "Название очереди изменено на `" + queue_name + "`")

    state_table[username] = BotState.READING_COMMAND
Beispiel #4
0
def process_command(message):
    global Q, queue_name, bot, state_table, handing_stats
    username = message.from_user.username
    chat_id = message.chat.id

    is_admin = username in ADMIN_USER
    is_student = USERS.get(username) is not None
    is_teacher = False

    if message.text == create_new_queue_cmd and is_admin:
        bot.send_message(chat_id, "Введите название очереди:")
        state_table[username] = BotState.READING_QUEUE_NAME
    elif message.text == show_current_queue_cmd and (is_admin or is_student):
        log_queue(chat_id)
    elif message.text == add_to_queue_cmd and is_student:
        bot.send_message(chat_id,
                         "Введите номер лабы, на которую хотите записаться")
        state_table[username] = BotState.READING_LAB_APPEND_DATA
    elif message.text == leave_queue_cmd and is_student:
        bot.send_message(chat_id,
                         "Введите номер лабы, запись которой надо убрать")
        state_table[username] = BotState.READING_LAB_REMOVE_DATA
    elif message.text == show_position and is_student:
        query = Q.record_present(username, None)
        if query is None:
            bot.send_message(chat_id, "Тебя нет в очереди")
        else:
            bot.send_message(
                chat_id, "Ваша позиция в очереди: " + str(query.index + 1) +
                "!\nЭто Ваша БЛИЖАЙШАЯ позиция в очереди")
    elif message.text == display_first_cmd and is_teacher:
        pass
    elif message.text == show_handing_stats:
        msg = "Таблица сдачи лаб\n"
        for (i, b) in enumerate(iter(handing_stats[username])):
            labN = i + 1
            if b: st = "*сдана*"
            else: st = "*не сдана*"
            msg += ("Лаба №" + str(labN) + " " + st + "\n")
        bot.send_message(chat_id, msg, parse_mode="MarkdownV2")
    else:
        bot.send_message(
            chat_id,
            "Неопознанная команда или у Вас нет прав на такую команду")
Beispiel #5
0
def send_welcome(message):
    username = message.from_user.username
    chat_id = message.chat.id

    sti = open("graphics/sticker.webp", "rb")

    if username in ADMIN_USER:

        bot.send_message(chat_id, "Привет, admin!")
        bot.send_sticker(chat_id, sti)

        # keyboard

        markup = types.ReplyKeyboardMarkup(row_width=1)
        item1 = types.KeyboardButton(create_new_queue_cmd)
        item2 = types.KeyboardButton(show_current_queue_cmd)

        markup.add(item1, item2, item3, item4)

        bot.send_message(chat_id, "Выбeрите функцию:", reply_markup=markup)

    elif USERS.get(username) is not None:

        bot.send_message(chat_id, "Привет, " + USERS[username] + "!")
        bot.send_sticker(chat_id, sti)

        # keyboard

        markup = types.ReplyKeyboardMarkup(row_width=1)
        item1 = types.KeyboardButton(show_current_queue_cmd)
        item2 = types.KeyboardButton(add_to_queue_cmd)
        item3 = types.KeyboardButton(leave_queue_cmd)
        item4 = types.KeyboardButton(show_position)

        markup.add(item1, item2, item3, item4)

        bot.send_message(chat_id, "Выбeрите функцию:", reply_markup=markup)
    else:
        bot.send_message(
            chat_id,
            "Привет, я тебя не знаю!\nЯ не умею работать с пользователей, которых не знаю!\nНапиши Никите Пологову, возможно это какая-то ошибка"
        )
Beispiel #6
0
def process_lab_append_info(message):
    global Q, queue_name, bot, state_table
    username = message.from_user.username
    chat_id = message.chat.id

    is_admin = username in ADMIN_USER
    is_student = USERS.get(username) is not None

    lab, rating = None, None

    try:
        lab = int(message.text.strip())
        if lab <= 0:
            lab = None
            raise ValueError("Lab number must be greater than 0")
    except ValueError:
        bot.send_message(chat_id, "Неправильный формат ввода.")

    if lab is not None:
        query = Q.record_present(username, lab)
        if query is not None:
            bot.send_message(chat_id, "Ты уже есть в очереди!")
        else:
            try:
                Q.push(QueueElement(username, lab))
                update_backup()
                bot.send_message(chat_id, "Поздравляю. Ты записан в очередь.")
            except LeaderboardLabError as err:
                print("@" + username + "has caused the following error:\n" +
                      str(err))
                err_msg = "Приносим свои извинения, но у нас пока не загружена таблица лабы №" + str(
                    lab) + ".\n" + err_msg_ps
                bot.send_message(chat_id, err_msg)
            except LeaderboardUserError as err:
                print("@" + username + "has caused the following error:\n" +
                      str(err))
                err_msg = "Приносим свои извинения, но мы не нашли Вас в таблице лабы №" + str(
                    lab) + ".\nВозможно наши данные устарели.\n" + err_msg_ps
                bot.send_message(chat_id, err_msg)

    state_table[username] = BotState.READING_COMMAND
Beispiel #7
0
def get_pw(username):
    if username in USERS:
        return USERS.get(username)
    return None
Beispiel #8
0
def load_user(id):
    return USERS.get(int(id))