Пример #1
0
    def wrapper(self, update, context, **optional_args):
        if not update.message:
            return

        bot_context = BotContext(update, context)
        user = bot_context.user
        if user and user.iksm_session:

            if not user.sp2_user:
                sp2_user = Splatoon2(user.iksm_session).get_user()
                if not sp2_user:
                    bot_context.send_message(
                        Message(bot_context).session_invalid)
                    return

                user.sp2_user = sp2_user.player

            store.update_user(user)

            if optional_args:
                return func(self, bot_context, **optional_args)
            else:
                return func(self, bot_context)
        else:
            bot_context.send_message(Message(bot_context).session_invalid)
Пример #2
0
    def _battle_push_task(self, context: CallbackContext):
        (battle_poll, splatoon2) = context.job.context

        last_message_id = battle_poll.last_message_id
        last_battle_number = battle_poll.last_battle_number
        bot = context.bot

        # Get last battle detail
        try:
            battle_overview = splatoon2.get_battle_overview()
        except Splatoon2SessionInvalid:
            # Stop
            self.stop_push(battle_poll.user.id)
            return
        except:
            self.stop_push(battle_poll.user.id)
            return

        if len(battle_overview.results) == 0:
            return
        last_battle = battle_overview.results[0]

        if configs.DEBUG:
            print(f'Load battle: {last_battle.battle_number}')

        if last_battle_number and \
                last_battle_number != last_battle.battle_number:

            print(f'Found new battle: {last_battle.battle_number}')

            battle = splatoon2.get_battle(last_battle.battle_number)

            rank = battle.player_result.player.udemae

            if battle_poll.last_battle_udemae and \
                    battle_poll.last_battle_rule == battle.rule.key and \
                    battle_poll.last_battle_udemae.name != rank.name and \
                    battle_poll.last_battle_udemae.s_plus_number != rank.s_plus_number:
                content = Message.rank_changed(
                    battle.player_result.player.nickname,
                    battle_poll.last_battle_udemae,
                    rank
                )
                bot.send_message(
                        battle_poll.chat.id,
                        content
                    )

            # Update poll
            battle_poll.game_count += 1
            battle_poll.game_victory_count += int(battle.victory)
            battle_poll.last_battle_number = battle.battle_number
            battle_poll.last_battle_udemae = rank
            battle_poll.last_battle_rule = battle.rule.key
            # Save updated to context
            context.job.context = (battle_poll, splatoon2)

            # Menus
            buttons = [[
                InlineKeyboardButton('👍',
                                     callback_data=f'battle_like/{battle_poll.user.id}'),
                InlineKeyboardButton('🖼',
                                     callback_data=f'battle_detail/{battle_poll.user.id}/{last_battle.battle_number}')
            ]]
            reply_markup = InlineKeyboardMarkup(buttons)

            # Send push message
            (content, message_type) = Message.push_battle(battle, battle_poll)
            parse_mode = message_type if message_type else None

            try:
                sent_message = bot.send_message(battle_poll.chat.id,
                                                content,
                                                parse_mode=parse_mode,
                                                reply_markup=reply_markup)
            except BadRequest as e:
                # Resend
                sent_message = bot.send_message(battle_poll.chat.id,
                                                content,
                                                reply_markup=reply_markup)

            # Update value
            battle_poll.last_message_id = sent_message.message_id
            # Save updated to context
            context.job.context = (battle_poll, splatoon2)

            # Delete
            if last_message_id and battle_poll.chat.type != 'private':
                bot.delete_message(battle_poll.chat.id, last_message_id)

        elif not last_battle_number:
            battle_poll.last_battle_number = last_battle.battle_number
            # Save updated to context
            context.job.context = (battle_poll, splatoon2)

        store.update_battle_poll(battle_poll)