Ejemplo n.º 1
0
    async def update_member_name(self):
        """
        ユーザ名に状態を追加する
        本機能は権限周りに問題があれば例外で止まってしまうので、エラーを握りつぶします
        :return:
        """
        # 設定値で設定が入ってない場合は何もしない
        config: LoadConfig = LoadConfig.get_instance()
        if not config.is_change_nickname:
            return

        user_name: str = self.get_member_nickname()

        # 0.5凸以上 / タスキル利用済みの場合はニックネーム変更
        if self.attack_status.attack_count != 0 or self.attack_status.is_carry_over or self.attack_status.use_task_kill:
            # 凸回数追加
            user_name += '__{}'.format(self.attack_status.attack_count)
            # 持越しがあれば持越し追加
            user_name += '.5凸' if self.attack_status.is_carry_over else '凸'
            # タスキルしてればその旨を追加
            user_name += '_タスキル済み' if self.attack_status.use_task_kill else ''

        try:
            await self.discord_guild_member.edit(nick=user_name)
        except:
            print("nickname変更のパーミッションエラーを握りつぶしました")
Ejemplo n.º 2
0
    async def change_day(self):
        context: Context = await Context.get_instance(self.bot)

        # 最後に更新した日時~今の日時で午前5時を跨いでいたら更新
        # 最後に更新した日時が00:00-04:59の場合は、その日の05:00
        last_update: datetime = context.last_day_change_update
        last_update_time: time = last_update.time()
        target_datetime: datetime
        if time(0, 0, 0) <= last_update_time <= time(4, 59, 59, 99):
            target_datetime = datetime(last_update.year, last_update.month,
                                       last_update.day, 5, 0, 0)
        else:
            next_day = last_update + timedelta(days=1)
            target_datetime = datetime(next_day.year, next_day.month,
                                       next_day.day, 5, 0, 0)

        # 目標日時を跨いでいたら実行して、実行日時を修正
        now_datetime: datetime = datetime.now()
        if last_update < target_datetime <= now_datetime:
            # Statusの更新
            await context.reset_status(now_datetime)
            print("reset_status...{}".format(
                now_datetime.strftime("%H:%M:%S")))

        # 凸数管理メッセージが管理されていなかったら投稿してセットする
        if context.attack_count_message is None:
            config: LoadConfig = LoadConfig.get_instance()
            return_message: str = context.get_now_attack_count()
            channel: discord.TextChannel = self.bot.get_channel(
                config.attack_status_channel_id)
            context.attack_count_message = await channel.send(return_message)
Ejemplo n.º 3
0
 async def _reaction_to_message(message: discord.Message,
                                message_str: str,
                                is_force_message: bool = True):
     """
     凸終了/キャンセル時の反応処理
     :param message:
     :param message_str:
     :return:
     """
     # configの設定値をもとに、mentionにするかreactionにするか変える
     config: LoadConfig = LoadConfig.get_instance()
     if config.use_emoji_reaction and not is_force_message:
         await message.add_reaction(ClanBattleEmoji.THUMBS_UP)
     else:
         await message.reply(message_str)
Ejemplo n.º 4
0
    async def _setup(cls):
        # 特定のロールのユーザを集める
        # note: 1つのguildのみにいれる想定
        target_guild: discord.Guild
        config: LoadConfig = LoadConfig.get_instance()
        for guild in cls.bot.guilds:
            if guild.id == config.target_guild_id:
                target_guild = guild
                break

        target_role: discord.Role
        for role in target_guild.roles:
            if role.id == config.target_role_id:
                target_role = role
        for member in target_role.members:
            cls.clan_members.append(
                ClanMember(await target_guild.fetch_member(member.id)))
Ejemplo n.º 5
0
    bot.add_cog(AttackFinishCog.AttackFinishCog(bot))
    bot.add_cog(AttackOverKillCog.AttackOverKillCog(bot))
    bot.add_cog(UseTaskKillCog.UseTaskKillCog(bot))
    bot.add_cog(AttackStatusCog.AttackStatusCog(bot))
    bot.add_cog(PreviousClanMemberStatusCog.PreviousClanMemberStatusCog(bot))

    # 同時凸機能
    bot.add_cog(SameTimeAttackStartCog.SameTimeAttackStartCog(bot))
    bot.add_cog(SameTimeAttackAddMemberCog.SameTimeAttackAddMemberCog(bot))
    bot.add_cog(SameTimeAttackReportCog.SameTimeAttackReportCog(bot))
    bot.add_cog(SameTimeAttackCommitCog.SameTimeAttackCommitCog(bot))
    bot.add_cog(SameTimeAttackEndCog.SameTimeAttackEndCog(bot))

    # サブ機能
    bot.add_cog(AttackCountWriteCog.AttackCountWriteCog(bot))
    bot.add_cog(BossLapCalcCog.BossLapCalcCog(bot))

    # schedule
    bot.add_cog(UpdateByDayChangeCog.UpdateByDayChangeCog(bot))
    bot.add_cog(UpdateAttackCountCog.UpdateAttackCountCog(bot))

    # ErrorHandling
    bot.add_cog(CommandErrorHandlerCog.CommandErrorHandlerCog(bot))

    # tokenを取得する
    config: LoadConfig = LoadConfig.get_instance()
    token: str = config.discord_bot_token

    # Botの起動とDiscordサーバーへの接続
    bot.run(token)
Ejemplo n.º 6
0
 def check_channel(message: discord.Message) -> bool:
     config: LoadConfig = LoadConfig.get_instance()
     return config.attack_management_channel_id == message.channel.id