Пример #1
0
def com_duration(update, context):
    try:
        user_chat_id = update.effective_chat.id
        team_db_id, err_message = get_team_db_id(user_chat_id)
        if team_db_id is False:
            raise BotUserException(err_message)
        if not is_owner(team_db_id, user_chat_id=user_chat_id):
            raise BotUserException(
                "Данное действие доступно только владельцу команды.\n")

        nec_args_numb = 2
        duration = ''.join(list(context.args))
        duration = duration.split(':')
        if len(duration) != nec_args_numb:
            raise BotUserException("Неверный формат ввода.\n")

        new_duration = get_duration_db_format(hour=duration[0],
                                              minute=duration[1])
        db_teams.update_one({"_id": team_db_id},
                            {"$set": {
                                "duration": new_duration
                            }})

        context.bot.send_message(
            chat_id=user_chat_id,
            text="Продолжительность стендапов обновлена.\n")
    except BotUserException as bue:
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=bue.message)
Пример #2
0
def get_duration_db_format(hour, minute):
    if not is_integer_number(hour) or not is_integer_number(minute):
        raise BotUserException("Неверный формат ввода.\n")

    hour, minute = int(hour), int(minute)
    if (0 <= hour <= 23 and 0 <= minute <= 59) or (hour == 24 and minute == 0):
        return str(hour) + " " + str(minute)
    else:
        raise BotUserException("Неверный формат ввода.\n")
Пример #3
0
def get_timezone_db_format(hour, minute):
    if not is_integer_number(hour) or not is_integer_number(minute):
        raise BotUserException("Неверный формат ввода часового пояса.\n")

    hour, minute = int(hour), int(minute)
    if (abs(hour) <= 11 and 0 <= minute <= 59) or (abs(hour) == 12 and minute == 0):
        if hour > 0:
            return str(-hour) + " " + str(-minute)
        else:
            return str(-hour) + " " + str(minute)
    else:
        raise BotUserException("Неверный формат ввода часового пояса.\n")
Пример #4
0
def get_active_team_standup_ids(user_chat_id):
    team_db_id, err_message = get_team_db_id(user_chat_id)
    # TODO: если get_team_db_id в предыдущей строке все-таки будет бросать исключение,
    #  то следующие две строчки можно убрать
    if team_db_id is False:
        raise BotUserException(err_message)
    return db_teams.find_one({'_id': team_db_id})['standups']
Пример #5
0
def get_answer_command_args(args):
    if not is_natural_number(args[0]):
        raise BotUserException(args[0] +
                               " - недопустимое значение номера вопроса.")
    q_number = int(args[0])
    q_answer = " ".join(list(args[1:len(args)]))
    return q_number, q_answer
Пример #6
0
def write_answer_to_db(update, context):
    user_id = update.effective_chat.id
    min_args_number = 2
    if str(user_id)[0] == '-':
        raise BotUserException(
            "Вы не можете отвечать на вопросы стендапа из общего чата.")
    if len(context.args) < min_args_number:
        raise BotUserException("Недостаточно аргументов.")

    q_num, q_ans = get_answer_command_args(context.args)

    team_db_id, err_message = get_team_db_id(user_id)
    # TODO: если get_team_db_id в предыдущей строке все-таки будет бросать исключение,
    #  то следующие две строчки можно убрать
    if not team_db_id:
        raise BotUserException(err_message)
    team = db_teams.find_one({'_id': team_db_id})
    st_ids = team['standups']
    if len(st_ids) == 0:
        raise BotUserException("В вашей команде пока не проводились стендапы.")
    questions = team['questions']
    if q_num > len(questions):
        raise BotUserException("Вопроса с номером " + str(q_num) + " нет.")
    st_id = st_ids[-1]

    if is_answer_exists(st_id, user_id, q_num):
        db_standups.update_one(
            {'_id': st_id},
            {'$pull': {
                'answers': {
                    'id': user_id,
                    'question_num': q_num
                }
            }},
        )
    db_standups.update_one({'_id': st_id}, {
        '$addToSet': {
            'answers': {
                'id': user_id,
                'question_num': q_num,
                'answer': q_ans
            }
        }
    })
Пример #7
0
def com_show_standup_info(update, context):
    user_chat_id = update.effective_chat.id
    try:
        parse_standup_info_command_input(context.args)

        st_number = int(context.args[0])
        st_ids = get_active_team_standup_ids(user_chat_id)
        if len(st_ids) == 0:
            raise BotUserException("История стендапов пуста.\n")
        if st_number > len(st_ids):
            raise BotUserException("Стендапа с номером " + str(st_number) +
                                   " не найдено.\n")

        standup_info_text = generate_standup_info_text(st_id=st_ids[st_number -
                                                                    1],
                                                       st_number=st_number)
        context.bot.send_message(chat_id=user_chat_id, text=standup_info_text)
    except BotUserException as bue:
        context.bot.send_message(chat_id=user_chat_id, text=bue.message)
Пример #8
0
def set_timezone(update, context):
    try:
        user_chat_id = update.effective_chat.id
        team_db_id, err_message = get_team_db_id(user_chat_id)
        if team_db_id is False:
            raise BotUserException(err_message)

        if not is_owner(team_db_id, user_chat_id=user_chat_id):
            raise BotUserException("Данное действие доступно только владельцу команды.\n")

        nec_args_numb = 2
        timezone = ''.join(list(context.args))
        timezone = timezone.split(':')
        if len(timezone) != nec_args_numb:
            raise BotUserException("Неверный формат ввода часового пояса.\n")
        new_timezone = get_timezone_db_format(hour=timezone[0], minute=timezone[1])

        db_teams.update_one({"_id": team_db_id}, {"$set": {"timezone": new_timezone}})
        context.bot.send_message(chat_id=update.effective_chat.id, text="Часовой пояс обновлен.\n")
    except BotUserException as bue:
        context.bot.send_message(chat_id=update.effective_chat.id, text=bue.message)
Пример #9
0
def parse_standup_info_command_input(com_input_args):
    if len(com_input_args) != 1:
        raise BotUserException("Недопустимое количество аргументов.\n")
    if not is_natural_number(com_input_args[0]):
        raise BotUserException(com_input_args[0] +
                               " - недопустимое значение номера стендапа.")