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
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
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
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