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)
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")
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")
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']
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
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 } } })
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)
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)
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] + " - недопустимое значение номера стендапа.")