Ejemplo n.º 1
0
    def confirm_cancellation_opponent(self, message: Message, user: User, bot: TeleBot, competitor: Competitor):
        if competitor.status != COMPETITOR_STATUS.CHALLENGE_NEED_CANCELLATION_CONFIRMATION:
            return RET.OK, None, None, None
        if not user.dismiss_confirmed:
            bot.send_message(
                message.chat.id,
                get_translation_for('challenge_cancel_msg'),
                reply_markup=self.__base_keyboard(status=competitor.status)
            )
            user.dismiss_confirmed = True
            user.save()
            return RET.OK, None, None, None
        else:
            user.dismiss_confirmed = False
            user.save()

        opponent, opponent_user = get_opponent_and_opponent_user(competitor)
        if not opponent or not opponent_user:
            return teardown_challenge(
                competitor,
                message,
                user,
                bot,
                'challenge_confirm_cannot_find_opponent_msg' if not opponent else 'challenge_confirm_cannot_fin_opponents_user_msg'
            )

        opponent.change_status(opponent.previous_status)
        opponent.previous_status = None
        opponent.previous_challenge_status = None
        opponent.in_challenge_with = None
        opponent.challenge_started_at = None
        opponent.save()

        competitor.change_status(competitor.previous_status)
        competitor.previous_status = None
        competitor.previous_challenge_status = None
        competitor.in_challenge_with = None
        competitor.challenge_started_at = None
        competitor.save()

        smwae_check(
            opponent_user.user_id,
            get_translation_for('challenge_canceled_msg').format(competitor.name),
            opponent_user,
            reply_markup=self.__base_keyboard(status=opponent.status)
        )

        bot.send_message(
            message.chat.id,
            get_translation_for('challenge_canceled_msg').format(opponent.name),
            reply_markup=self.__base_keyboard(status=competitor.status)
        )
        LogsSheet.glog(get_translation_for('gsheet_log_game_canceled').format(opponent.name, competitor.name))
        return RET.OK, None, None, None
Ejemplo n.º 2
0
 def go_on_sick_leave(self, message: Message, user: User, bot: TeleBot, competitor: Competitor):
     if competitor.status not in (COMPETITOR_STATUS.ACTIVE, COMPETITOR_STATUS.PASSIVE):
         return RET.OK, None, None, None
     competitor.previous_status = competitor.status
     competitor.change_status(COMPETITOR_STATUS.INJUIRY)
     competitor.save()
     bot.send_message(
         message.chat.id,
         get_translation_for('menu_on_sick_leave_start_msg'),
         reply_markup=self.__base_keyboard(status=competitor.status)
     )
     LogsSheet.glog(get_translation_for('gsheet_log_on_injuiry_started').format(competitor.name))
     return RET.OK, None, None, None
Ejemplo n.º 3
0
 def go_on_vacation(self, message: Message, user: User, bot: TeleBot, competitor: Competitor):
     if competitor.status not in (COMPETITOR_STATUS.ACTIVE, COMPETITOR_STATUS.PASSIVE):
         return RET.OK, None, None, None
     config = get_config()
     if timedelta(seconds=competitor.used_vacation_time).days >= config.vacation_time:
         bot.send_message(
             message.chat.id,
             get_translation_for('menu_vacation_no_days_left_msg'),
             reply_markup=self.__base_keyboard(status=competitor.status)
         )
         return RET.OK, None, None, None
     competitor.previous_status = competitor.status
     competitor.change_status(COMPETITOR_STATUS.VACATION)
     competitor.vacation_started_at = datetime.now(tz=timezone('Europe/Kiev'))
     competitor.save()
     bot.send_message(
         message.chat.id,
         get_translation_for('menu_on_vacation_start_msg'),
         reply_markup=self.__base_keyboard(status=competitor.status)
     )
     LogsSheet.glog(get_translation_for('gsheet_log_player_started_vacation').format(competitor.name))
     return RET.OK, None, None, None
Ejemplo n.º 4
0
def teardown_challenge(competitor: Competitor,
                       message,
                       user: User,
                       bot: TeleBot,
                       cause_key,
                       canceled_by_bot=True,
                       opponent: Competitor = None,
                       opponent_msg_key=None,
                       no_glog=False):
    competitor.in_challenge_with = None
    competitor.change_status(competitor.previous_status)
    competitor.previous_status = None
    competitor.latest_challenge_received_at = None
    competitor.save()

    if opponent:
        opponent_user = User.objects(associated_with=opponent).first()

        opponent.in_challenge_with = None
        opponent.change_status(opponent.previous_status)
        opponent.previous_status = None
        opponent.latest_challenge_received_at = None
        opponent.save()

        if canceled_by_bot and not no_glog:
            LogsSheet.glog(
                get_translation_for('gsheet_log_challenge_canceled').format(
                    competitor.name, opponent.name))

        if opponent_user:

            opponent_user.dismiss_confirmed = False
            opponent_user.states.append('MenuState')
            if len(opponent_user.states) > STATES_HISTORY_LEN:
                del opponent_user.states[0]
            opponent_user.save()

            if opponent_msg_key:
                if canceled_by_bot:
                    bot.send_message(
                        opponent_user.user_id,
                        f'{get_translation_for(opponent_msg_key).format(competitor.name)}.\n{get_translation_for("challenge_confirm_challenge_canceled_by_bot_msg")}',
                        reply_markup=get_menu_keyboard(status=opponent.status),
                        parse_mode='html')
                else:
                    bot.send_message(
                        opponent_user.user_id,
                        f'{get_translation_for(opponent_msg_key).format(competitor.name)}',
                        reply_markup=get_menu_keyboard(status=opponent.status),
                        parse_mode='html')
    else:
        if canceled_by_bot and not no_glog:
            LogsSheet.glog(
                get_translation_for(
                    'gsheet_log_challenge_canceled_no_opponent').format(
                        competitor.name))

    user.dismiss_confirmed = False
    user.save()

    if cause_key is not None:
        if canceled_by_bot:
            bot.send_message(
                user.user_id,
                f'{get_translation_for(cause_key)}.\n{get_translation_for("challenge_confirm_challenge_canceled_by_bot_msg")}'
            )
        else:
            bot.send_message(user.user_id, f'{get_translation_for(cause_key)}')
    return RET.GO_TO_STATE, 'MenuState', message, user