示例#1
0
文件: blog.py 项目: yupix/ssm
async def get_blog_info(ctx):
    search_channel = session.query(BlogsChannel).filter(
        BlogsChannel.channel_id == ctx.channel.id).first()
    if search_channel:
        search_user = session.query(BlogsUser).filter(
            and_(BlogsUser.channel_id == search_channel.channel_id,
                 BlogsUser.user_id == ctx.author.id)).first()
    else:
        search_user = None
    return search_channel, search_user
示例#2
0
文件: blog.py 项目: yupix/ssm
 async def on_message(self, ctx):
     if ctx.author.bot:
         return
     if ctx.content != f'{bot_prefix}blog user profile':  # blog statusコマンドが投稿にカウントされないように
         search_channel = session.query(BlogsChannel).filter(
             BlogsChannel.channel_id == ctx.channel.id).first()
         if search_channel:
             search_user = session.query(BlogsUser).filter(
                 and_(BlogsUser.channel_id == search_channel.channel_id,
                      BlogsUser.user_id == ctx.author.id)).first()
             if search_user:
                 await BlogLevelSystem(ctx, search_channel,
                                       search_user).check()
示例#3
0
    async def _remove(self, ctx, note_id: typing.Optional[int] = None):
        notes = session.query(NotesDetail).filter(
            and_(NotesDetail.user_id == f'{ctx.author.id}',
                 NotesDetail.id == f'{note_id}')).first()

        if notes is None:
            await ctx.send('存在しないidです')
            return
        if notes.user_id == ctx.author.id:
            await db_manager.commit(session.query(NotesDetail).filter(
                and_(NotesDetail.user_id == f'{ctx.author.id}',
                     NotesDetail.id == f'{note_id}')).delete(),
                                    commit_type='delete')
示例#4
0
文件: blocklist.py 项目: yupix/ssm
    async def remove(self, ctx, user: discord.User):
        search_blocklist_user = session.query(BlocklistUser).filter(
            and_(BlocklistUser.server_id == f'{ctx.guild.id}',
                 BlocklistUser.user_id == f'{user.id}')).first()

        if search_blocklist_user:
            embed = discord.Embed(
                title=f"{user.name} をブロックリストから解除しますか?",
                description="最後にもう一度、本当に解除しても問題ないですか?\n問題が無いようなら✅を押してください。",
                color=0xffc629)
            msg = await ctx.send(embed=embed)
            await msg.add_reaction('✅')
            await msg.add_reaction('✖')

            await db_manager.commit(
                Reactions(guild_id=msg.guild.id,
                          channel_id=msg.channel.id,
                          message_id=msg.id,
                          type='unregister',
                          action='BlockList',
                          content={"target_user_id": f"{user.id}"},
                          module_path='cogs.blocklist',
                          class_name='BlockList'))
        else:
            await embed_send(ctx, self.bot, 1, 'エラー', '登録されていないユーザーです')
示例#5
0
文件: blocklist.py 项目: yupix/ssm
    async def reaction(self):
        target_user_id = int(self.reactions.content['target_user_id'])
        user = self.bot.get_user(int(target_user_id))
        if self.emoji == '✅':
            action = 'continue'
        elif self.emoji == '✖':
            action = 'cancel'
        # TODO: 2021/3/15 elseで他のリアクションだったときの動作を作る

        embed_title = str(
            language['BlocklistReactions'][f'{self.reactions.type}']
            [f'{action}']['title']).format(user.name)
        embed_subtitle = language['BlocklistReactions'][
            f'{self.reactions.type}'][f'{action}']['subtitle']
        embed_color = language['BlocklistReactions'][f'{self.reactions.type}'][
            f'{action}']['embed_color']
        msg_channel = self.bot.get_channel(self.reactions.channel_id)
        msg = await msg_channel.fetch_message(self.reactions.message_id)
        embed = discord.Embed(title=embed_title,
                              description=embed_subtitle,
                              color=int(embed_color))
        if self.reactions.type == 'register' and action != 'cancel':
            target_user_mode = str(self.reactions.content['mode'])
            await db_manager.commit(
                BlocklistUser(server_id=self.reactions.guild_id,
                              user_id=target_user_id,
                              mode=target_user_mode))
        elif self.reactions.type == 'unregister' and action != 'cancel':
            await db_manager.commit(session.query(BlocklistUser).filter(
                and_(BlocklistUser.server_id == self.reactions.guild_id,
                     BlocklistUser.user_id == target_user_id)).delete(),
                                    commit_type='delete')
        await msg.edit(embed=embed)
示例#6
0
文件: main.py 项目: yupix/ssm
 async def fissure_check():
     for fissure in session.query(WarframeFissuresDetail).order_by(
             WarframeFissuresDetail.tier):
         if message.detail_id == fissure.id:
             return True, fissure
         else:
             message_search_result = False
     return message_search_result, fissure
示例#7
0
文件: blocklist.py 项目: yupix/ssm
    async def add(self,
                  ctx,
                  user: discord.User = None,
                  mode: check_mode = None):
        search_blocklist_server_settings = session.query(
            BlocklistSettings).filter(
                BlocklistSettings.server_id == f'{ctx.guild.id}').first()
        if mode is not None:
            if search_blocklist_server_settings:  # サーバーIDが既に登録されてるか確認
                search_blocklist_user = session.query(BlocklistUser).filter(
                    and_(BlocklistUser.server_id == f'{ctx.guild.id}',
                         BlocklistUser.user_id == f'{user.id}')).first()

                if search_blocklist_user is None:
                    embed = discord.Embed(
                        title=f"{user.name} をブロックリストに登録しますか?",
                        description=
                        "怒りに我を忘れていないかもう一度冷静になって確認してみましょう\n問題が無いようなら✅を押してください。",
                        color=0xffc629)
                    msg = await ctx.send(embed=embed)
                    await msg.add_reaction('✅')
                    await msg.add_reaction('✖')
                    await db_manager.commit(
                        Reactions(guild_id=msg.guild.id,
                                  channel_id=msg.channel.id,
                                  message_id=msg.id,
                                  type='register',
                                  action='BlockList',
                                  content={
                                      "target_user_id": f"{user.id}",
                                      "mode": f"{mode}"
                                  },
                                  module_path='cogs.blocklist',
                                  class_name='BlockList'))
                else:
                    await embed_send(ctx, self.bot, 1, 'エラー',
                                     '既に登録されているユーザーです')

            else:
                await embed_send(
                    ctx, self.bot, 1, 'エラー',
                    f'サーバーが登録されていません。\n`{bot_prefix}blocklist register mode role`\nを実行した後に再度実行してください。'
                )
        else:
            await embed_send(ctx, self.bot, 1, 'エラー', f'{mode}は存在しないモードです')
示例#8
0
文件: main.py 项目: yupix/ssm
async def bot_eew_loop():
    from ssm.cogs.eew import EewSendChannel
    url = "https://dev.narikakun.net/webapi/earthquake/post_data.json"
    result = requests.get(url).json()
    logger.debug(result)
    event_id = result['Head']['EventID']
    search_event_id = session.query(Eew).filter(
        Eew.event_id == event_id).first()
    if search_event_id is None:
        await db_manager.commit(Eew(event_id=event_id))
        eew_manager = EewSendChannel(bot)
        image_url = await eew_manager.get_nhk_image(
            result['Body']['Earthquake']['OriginTime'])
        search_eew_channel_list = session.query(EewChannel)
        for channel in search_eew_channel_list:
            logger.debug(f'{channel.channel_id}にEew情報を送信します')
            asyncio.ensure_future(
                eew_manager.main_title_send(channel, result, image_url))
示例#9
0
文件: blocklist.py 项目: yupix/ssm
 async def list(self, ctx):
     search_blocklist_users = session.query(BlocklistUser).filter(
         BlocklistUser.server_id == f'{ctx.guild.id}').all()
     guild = self.bot.get_guild(ctx.guild.id)
     embed = discord.Embed(title=f'{guild.name}のブロックリスト', color=0x859fff)
     for _user in search_blocklist_users:
         if len(embed) < 1800:
             user = self.bot.get_user(_user.user_id)
             embed.add_field(name=f"ユーザー名: {user.name}",
                             value=f"理由: 無し",
                             inline=True)
     await ctx.send(embed=embed)
示例#10
0
文件: blocklist.py 项目: yupix/ssm
    async def register(self,
                       ctx,
                       mode='AutoKick',
                       add_role: discord.Role = None,
                       remove_role: discord.Role = None):
        if ctx.author.guild_permissions.administrator:
            search_blocklist_server = session.query(BlocklistServer).filter(
                BlocklistServer.server_id == f'{ctx.guild.id}').first()
            if not search_blocklist_server:  # サーバーIDが既に登録されてるか確認
                await db_manager.commit(
                    BlocklistServer(server_id=f'{ctx.guild.id}'))

            search_blocklist_server_settings = session.query(
                BlocklistSettings).filter(
                    BlocklistSettings.server_id == f'{ctx.guild.id}').first()

            if not search_blocklist_server_settings:  # 既に設定が存在するか確認
                processing_mode_list = [
                    'AutoKick', 'AutoBan', 'AddRole', 'RemoveRole'
                ]
                for check_mode in processing_mode_list:
                    if f'{mode}' == f'{check_mode}':  # 存在するmodeか確認
                        logger.debug('モードの確認に成功しました')
                        if f'{mode}' == 'NoneRole' or f'{mode}' == 'AddRole' or f'{mode}' == 'RemoveRole':
                            add_role = add_role.id
                            remove_role = remove_role.id
                        else:
                            add_role = None
                            remove_role = None
                        await db_manager.commit(
                            BlocklistSettings(server_id=ctx.guild.id,
                                              mode=mode,
                                              add_role=add_role,
                                              remove_role=remove_role))
                        await embed_send(ctx, self.bot, 0, '成功', '設定を保存しました!')
                        break
                else:
                    await embed_send(ctx, self.bot, 1, 'エラー', '存在しないモードです')
            else:
                await embed_send(ctx, self.bot, 1, 'エラー', '既に設定が存在します')
示例#11
0
文件: main.py 项目: yupix/ssm
async def api_request():
    check_requests = session.query(ApiRequests).all()
    for request in check_requests:
        print(request.request_content)
        if request.type == 'server_info':
            if request.request_content is None:
                content = {
                    "result": {
                        "type": "failed",
                        "text": "invalid server id"
                    }
                }
            else:
                guild = bot.get_guild(request.request_content['server_id'])
                if guild is None:
                    content = {
                        "result": {
                            "type": "failed",
                            "text": "invalid server id"
                        }
                    }
                else:
                    content = {
                        "result": {
                            "type": "successful"
                        },
                        "body": {
                            "icon_url": f"{guild.icon_url}",
                            "name": f"{guild.name}"
                        }
                    }
            await db_manager.commit(
                ApiDetail(request_id=request.request_id, content=content))
            await db_manager.commit(session.query(ApiRequests).filter(
                ApiRequests.request_id == request.request_id).delete(),
                                    commit_type='delete')
        if request.request_content is not None:
            print(request.request_content['server_id'])
示例#12
0
文件: blog.py 项目: yupix/ssm
 async def setup(self, ctx):
     search_category = session.query(BlogsCategory).filter(
         BlogsCategory.category_id == ctx.channel.category_id).first()
     search_channel = session.query(BlogsChannel).filter(
         BlogsChannel.channel_id == ctx.channel.id).first()
     if search_category:
         if search_channel:
             owner = self.bot.get_user(search_channel.owner_id)
             embed = await EmbedManager().generate(
                 embed_title='登録に失敗',
                 embed_description=
                 f'`{ctx.channel.category.name}`は既に{owner.name}さんが既にブログとして登録しているチャンネルです。他のチャンネルをお使いになるか解除をお願いしてください。',
                 embed_content=[],
                 mode='failed')
             await EmbedManager().send(ctx, embed, True, 5)
             return
         await db_manager.commit(
             BlogsChannel(category_id=ctx.channel.category.id,
                          channel_id=ctx.channel.id,
                          owner_id=ctx.author.id))
         await db_manager.commit(
             BlogsUser(user_id=ctx.author.id, channel_id=ctx.channel.id))
         embed = await EmbedManager().generate(
             embed_title='登録に成功',
             embed_description=
             f'`{ctx.channel.name}`をブログとして登録しました。ようこそ{ctx.author.name}さん!',
             embed_content=[],
             mode='succesed')
     else:
         embed = await EmbedManager().generate(
             embed_title='登録に失敗',
             embed_description=
             f'`{ctx.channel.category.name}`はブログカテゴリとして登録されていません。\nブログを登録するには`{bot_prefix}blog register category`を設定したいカテゴリ内のチャンネルで実行してください。※管理者権限が必要です',
             embed_content=[],
             mode='failed')
     await ctx.send(embed=embed)
示例#13
0
async def server_info(server_id: int, waiting_id: int = None) -> dict:
    """与えられたサーバーIDからサーバーの基本情報を返します"""
    if waiting_id:
        check_completed = session.query(ApiDetail).filter(
            ApiDetail.request_id == waiting_id).first()
        if check_completed is not None and check_completed.content['result'][
                'type'] == 'successful':
            return check_completed.content
    request_id = random.randrange(10**10, 10**11)
    content = {'server_id': server_id}
    await db_manager.commit(ApiRequests(request_id=request_id,
                                        type='server_info',
                                        request_content=content),
                            autoincrement=True)

    return {"result": {"type": "waiting", "id": f"{request_id}"}}
示例#14
0
文件: basic.py 项目: yupix/ssm
	async def on_reaction_add(self, reaction, user):

		if user == self.bot.user:
			return
		emoji = reaction.emoji
		reaction_message_id = reaction.message.id  # リアクションが付いたメッセージID
		reaction_channel_id = reaction.message.channel.id  # リアクションが付いたメッセージのあるチャンネルID
		reaction_guild_id = reaction.message.guild.id  # リアクションが付いたメッセージのあるギルド
		logger.debug(f'リアクションがついたメッセージID: {reaction_message_id}')
		logger.debug(f'リアクションがついたメッセージのあるチャンネル: {reaction_channel_id}')
		logger.debug(f'リアクションが付いたメッセージのあるギルド: {reaction_guild_id}')

		reactions = session.query(Reactions).filter(Reactions.message_id == reaction_message_id).first()
		print(reactions)
		if reactions:
			exec(f'from {reactions.module_path} import {reactions.class_name}')
			cls = eval(reactions.action)(reactions, self.bot, emoji)
			await getattr(cls, 'reaction')()
示例#15
0
    async def _add(self, ctx, note, use_category=None, category_name=None):
        if re.findall('<@(.*?)>', f'{note}') or re.findall(
                '<@(.*?)>', f'{category_name}'):
            await ctx.send('メンションは使用することができません')
            return
        logger.debug(note)
        variable = await check_variable(note, 'addを使用するにはnoteをつける必要性があります',
                                        ctx)
        if variable == 0:
            await db_manager.commit(NotesUser(user_id=ctx.author.id))

            if use_category is not None and use_category == '-c' and category_name is not None:
                logger.debug(f'カテゴリ「{category_name}」が指定されました')
            else:
                category_name = 'デフォルト'
            search_category_name = session.query(NotesCategory).filter(
                NotesCategory.category_name == f'{category_name}').all()
            if len(search_category_name) == 0:
                logger.debug(f'カテゴリ「{category_name}」が存在しないため作成します')
                await db_manager.commit(
                    NotesCategory(category_name=f'{category_name}'))
            add_note_result = await db_manager.commit(
                NotesDetail(user_id=f'{ctx.author.id}',
                            content=f'{note}',
                            category_name=f'{category_name}'), True)
            if add_note_result != 'IntegrityError':
                embed = discord.Embed(title="ノートの登録に成功しました",
                                      description="このメッセージは10秒後に自動で削除されます",
                                      color=0xff7e70)
                embed.add_field(name="id",
                                value=f"{add_note_result}",
                                inline=True)
                embed.add_field(name="ノート内容", value=f"{note}", inline=True)
                await ctx.send(embed=embed)
            else:
                await ctx.send('重複した内容のnoteは追加できません')
示例#16
0
文件: main.py 项目: yupix/ssm
async def loop_bot_task():
    from ssm.cogs.warframe import get_warframe_fissures_api, fissure_tier_conversion, warframe_fissures_embed, mission_eta_conversion

    async def fissure_check():
        for fissure in session.query(WarframeFissuresDetail).order_by(
                WarframeFissuresDetail.tier):
            if message.detail_id == fissure.id:
                return True, fissure
            else:
                message_search_result = False
        return message_search_result, fissure

    # APIから情報を取得
    fissure_list = get_warframe_fissures_api()
    if fissure_list is None:  # Json形式ではなかった場合用
        return
    for warframe_fissure_id in session.query(WarframeFissuresId).all():
        for fissures in fissure_list:
            search_warframe_fissure_detail = session.query(
                WarframeFissuresDetail).filter(
                    WarframeFissuresDetail.api_id ==
                    f'{warframe_fissure_id.api_id}').first()
            if warframe_fissure_id.api_id != fissures[5]:
                await db_manager.commit(setattr(search_warframe_fissure_detail,
                                                'status', 'True'),
                                        commit_type='update',
                                        show_commit_log=False)
            else:
                await db_manager.commit(setattr(search_warframe_fissure_detail,
                                                'status', 'False'),
                                        commit_type='update',
                                        show_commit_log=False)
                break

    # API側で期限切れになっている亀裂がないかを確認
    for i in fissure_list:
        if i[6] is not True:
            check_warframe_fissure_detail = session.query(
                WarframeFissuresDetail).filter(
                    WarframeFissuresDetail.api_id == f'{i[5]}').first()
            if not check_warframe_fissure_detail or check_warframe_fissure_detail.api_id != f'{i[5]}':
                await db_manager.commit(WarframeFissuresId(api_id=f'{i[5]}'),
                                        show_commit_log=False)
                star_name = str(re.findall("(?<=\().+?(?=\))", i[0])).replace(
                    '{',
                    '').replace('}',
                                '').replace('[',
                                            '').replace(']',
                                                        '').replace('\'', '')
                await db_manager.commit(WarframeFissuresDetail(
                    api_id=f'{i[5]}',
                    node=f'{i[0]}',
                    enemy=f'{i[2]}',
                    type=f'{i[1]}',
                    tier=f'{i[3]}',
                    tier_original=f'{fissure_tier_conversion(i[3])}',
                    star_name=star_name,
                    eta=f'{i[4]}',
                    status=f'{i[6]}'),
                                        show_commit_log=False)
            else:
                await db_manager.commit(setattr(check_warframe_fissure_detail,
                                                'eta', f'{i[4]}'),
                                        commit_type='update',
                                        show_commit_log=False)
                await db_manager.commit(setattr(check_warframe_fissure_detail,
                                                'status', f'{i[6]}'),
                                        commit_type='update',
                                        show_commit_log=False)

    # 新しい亀裂が登録されてるチャンネルに送信されてない場合は送信
    for fissure_id in session.query(WarframeFissuresDetail).order_by(
            WarframeFissuresDetail.tier):
        check_already_fissure_message = session.query(
            WarframeFissuresMessage).filter(
                WarframeFissuresMessage.detail_id == fissure_id.id).first()
        if not check_already_fissure_message:
            for fissure_channel in session.query(
                    WarframeFissuresChannel).all():
                channel = bot.get_channel(int(fissure_channel.channel_id))
                embed = warframe_fissures_embed(
                    fissure_id.node, fissure_id.type, fissure_id.enemy,
                    fissure_tier_conversion(fissure_id.tier),
                    mission_eta_conversion(fissure_id.eta))
                send_embed = await channel.send(embed=embed)
                await db_manager.commit(WarframeFissuresMessage(
                    detail_id=fissure_id.id,
                    message_id=send_embed.id,
                    channel_id=send_embed.channel.id),
                                        show_commit_log=False)
                break
    for message in session.query(WarframeFissuresMessage).order_by(
            WarframeFissuresMessage.id):
        message_search_result, fissure = await fissure_check()
        channel = bot.get_channel(int(message.channel_id))
        get_message = await channel.fetch_message(int(message.message_id))
        if bool(strtobool(fissure.status)) is True:
            logger.debug(f'亀裂のAPI ID: {fissure.api_id} この亀裂は終了してる')
            embed = warframe_fissures_embed(
                fissure.node, fissure.type, fissure.enemy,
                fissure_tier_conversion(fissure.tier), '終了済み')
        else:
            logger.debug(f'亀裂のAPI ID: {fissure.api_id} この亀裂は終了していない')
            embed = warframe_fissures_embed(
                fissure.node, fissure.type, fissure.enemy,
                fissure_tier_conversion(fissure.tier),
                mission_eta_conversion(fissure.eta))
        await get_message.edit(embed=embed)
    # データに登録されている亀裂が期限切れになっていないかを確認
    for test in session.query(WarframeFissuresDetail).all():
        if bool(strtobool(test.status)) is True:
            await db_manager.commit(session.delete(
                session.query(WarframeFissuresId).filter(
                    WarframeFissuresId.api_id == f'{test.api_id}').first()),
                                    commit_type='delete',
                                    show_commit_log=False)
示例#17
0
文件: basic.py 项目: yupix/ssm
	async def on_member_join(self, member: discord.Member):
		search_user = session.query(BlocklistUser).filter(and_(BlocklistUser.server_id == f'{member.guild.id}', BlocklistUser.user_id == f'{member.id}')).first()
		search_guild = session.query(BlocklistSettings).filter(BlocklistSettings.server_id == member.guild.id).first()
		blocklist_action = BlocklistAction(search_guild=search_guild, search_user=search_user, member=member)
		await blocklist_action.check_blocklist()
示例#18
0
    async def _list(self,
                    ctx,
                    note_author: typing.Optional[discord.User] = 'me',
                    *,
                    args: check_args = None):

        if note_author == 'me':
            note_author = ctx.author  # ユーザー指定
        if args is not None:
            if type(args) is not dict:
                await ctx.send(f'{args[1]}')
                return
            else:
                if '-c' in args and args.get('-c') is not None:
                    category_name = args.get('-c')
                    notes = session.query(NotesDetail).filter(
                        and_(NotesDetail.user_id == f'{ctx.author.id}',
                             NotesDetail.category_name ==
                             f'{category_name}')).all()
                if '--type' in args and 'category' == args.get('--type'):
                    notes = session.query(NotesDetail).filter(
                        NotesDetail.user_id == f'{ctx.author.id}').all()
        else:
            category_name = 'デフォルト'
            notes = session.query(NotesDetail).filter(
                and_(NotesDetail.user_id == f'{ctx.author.id}',
                     NotesDetail.category_name == f'{category_name}')).all()

        note_list = ''
        embed = discord.Embed(color=0x859fff)
        for i in notes:
            custom_message = ''
            for emoji in re.finditer('e!(.*?)!e', f'{i.content}'):
                base_message = re.sub("\(|\)|\'", "",
                                      f'{i.content}').replace(',', '\n')
                for n in emoji.groups():  # emoji
                    check_emoji_type = re.sub("\\D", "", n)
                    if len(str(check_emoji_type)) == 18:
                        get_emoji = self.bot.get_emoji(int(check_emoji_type))
                        print(get_emoji)
                    else:
                        get_emoji = discord.utils.get(ctx.guild.emojis,
                                                      name=f'{n}'.replace(
                                                          ':', ''))
                    if len(custom_message) == 0:
                        custom_message = base_message.replace(
                            ',', '\n').replace(f'e!{n}!e', f'{get_emoji}')
                    else:
                        custom_message = custom_message.replace(
                            ',', '\n').replace(f'e!{n}!e', f'{get_emoji}')
            if 'emoji' not in locals():
                custom_message = i.content + '\n'
            else:
                del emoji
            print(custom_message)
            r_custom_message = i.content
            embed.add_field(name=f"ID: {i.id}",
                            value=f"{custom_message}",
                            inline=True)
        if not embed:
            await embed_send(ctx, self.bot, 0, 'INFO', 'ノートは空のようです', 0x859fff)
            return

        await ctx.send(embed=embed)