Пример #1
0
    async def _word(self, ctx, word):
        """
        미야야 조회 단어 < 키워드 >


        키워드에 등록된 모든 내용을 조회합니다.
        """
        word.lower()
        rows = await sql(
            0, f"SELECT * FROM `cc` WHERE `word` = '{word}' ORDER BY `no` ASC")
        embeds = []
        for i in range(len(rows)):
            embed = discord.Embed(
                title=f"{word}에 대한 지식 목록 ({i + 1} / {len(rows)})",
                color=0x5FE9FF,
                timestamp=datetime.datetime.utcnow(),
            )
            embed.add_field(name="지식 번호", value=rows[i][0], inline=False)
            embed.add_field(name="답장 내용", value=rows[i][2], inline=False)
            embed.add_field(name="가르친 유저의 ID", value=rows[i][3], inline=False)
            embed.add_field(name="비활성화되었나요?", value=rows[i][4], inline=False)
            embed.set_author(name="커맨드 목록", icon_url=self.miya.user.avatar_url)
            embeds.append(embed)
        msg = await ctx.send(embed=embeds[0])
        page = Paginator(bot=self.miya, message=msg, embeds=embeds)
        await page.start()
Пример #2
0
    async def send_bot_help(
        self, mapping: Mapping[Optional[Cog], List[Command]]
    ) -> None:
        ctx = self.context

        embeds = []
        for i, j in mapping.items():
            command_arr = [f"`{x.qualified_name}`" for x in j]
            embed = discord.Embed(
                title="📰 도움말", description="자세한 도움말을 보려면 `봇 도움 (명령어 이름)`을 사용하세요.", color=0x237CCD,
            )
            embed.add_field(
                name=f"{i.qualified_name}" if not i is None else "None",
                value=", ".join(command_arr),
            )
            embeds.append(embed)

        msg = await ctx.send(embed=embeds[0])
        page = Paginator(
            self.context.bot,
            msg,
            embeds=embeds,
            use_more=True,
            only=ctx.author,
        )
        await page.start()
Пример #3
0
 async def slist(self, ctx):
     Embeds = []
     Embeds.append(
         Embed(title="Bot changelogs", bot=self.bot, user=ctx.author))
     count = 0
     async for change in self.bot.admin_db["changelog"].find({}):
         if not count % 7 and count != 0:
             Embeds.append([
                 Embed(title="Bot changelogs",
                       bot=self.bot,
                       user=ctx.author)
             ])
         #print(Embeds[len(Embeds) - 1])
         Embeds[len(Embeds) - 1].add_field(
             name=f"{change['type']} {change['version']}",
             value=datetime.fromtimestamp(
                 change['date']).strftime("%m/%d/%y"))
         count += 1
     print(count)
     if not count == 0:
         msg = await ctx.send(embed=Embeds[0])
         if count > 0:
             pages = Paginator(self.bot,
                               msg,
                               embeds=Embeds,
                               timeout=60,
                               use_more=True,
                               only=ctx.author)
             await pages.start()
     else:
         return await ctx.send("Could not find any changelogs")
Пример #4
0
async def text_pagination_with_extend(ctx: Context):
    """ Text pagination with extended emoji """

    msg = await ctx.send("Test1")
    contents = ["Test1", "Test2", "Test3"]

    page = Paginator(bot=bot, message=msg, contents=contents, use_extend=True)
    await page.start()
Пример #5
0
async def text_pagination(ctx: Context):
    """ Basic text pagination """

    msg = await ctx.send("Test1")
    contents = ["Test1", "Test2", "Test3"]

    page = Paginator(bot=bot, message=msg, contents=contents)
    await page.start()
Пример #6
0
async def embed_pagination(ctx):
    embed1 = discord.Embed(title="Embed1", description="embed1")
    embed2 = discord.Embed(title="Embed2", description="embed2")
    embed3 = discord.Embed(title="Embed3", description="embed3")
    embeds = [embed1, embed2, embed3]
    msg = await ctx.send(embed=embed1)

    page = Paginator(bot, msg, embeds=embeds)
    await page.start()
Пример #7
0
 async def slist(self, ctx):
     # try:
     embeds = []
     async for i in self.bot.admin_db["suggestions"].find({}):
         #embeds.append(await self.view_suggestion(ctx, str(i["_id"])))
         embeds.append(await self.view_suggestion(ctx, str(i["_id"])))
     msg = await ctx.send(embed=embeds[0])
     pages = Paginator(self.bot, msg, embeds=embeds, timeout=60, use_more=True, only=ctx.author)
     await pages.start()
Пример #8
0
    async def on_message(self, message):
        ## 일반 메시지
        if message.content == "!페이징":
            msg = await message.channel.send("페이지1")
            contents = ["페이지1", "페이지2", "페이지3"]

            page = Paginator(self, msg, contents=contents)
            await page.start()

        ## Embed
        elif message.content == "!페이징2":
            embed1 = discord.Embed(title="Embed1", description="embed1")
            embed2 = discord.Embed(title="Embed2", description="embed2")
            embed3 = discord.Embed(title="Embed3", description="embed3")
            embeds = [embed1, embed2, embed3]

            msg = await message.channel.send(embed=embed1)
            page = Paginator(self, msg, embeds=embeds)
            await page.start()
Пример #9
0
 async def price(self, ctx, *, name:str):
     await ctx.trigger_typing()
     async with aiohttp.ClientSession() as session:
         async with session.get("https://api.slothpixel.me/api/skyblock/items") as resp:
             item_data = await resp.json()
     names = {item_data[z]["name"].lower(): z for z in item_data}
     results = {}
     bazaar_results = {}
     matches = {z: y for (z, y) in names.items() if name.lower() in z.lower()}
     async with aiohttp.ClientSession() as session:
         for i, item in enumerate(matches):
             if i < 5:
                 async with session.get(f"https://api.slothpixel.me/api/skyblock/auctions/{matches[item]}{self.bot.slothpixel_key_string}") as resp:
                     if not (await resp.json())["average_price"]:
                         pass
                     else:
                         results[item] = await resp.json()
                 async with session.get(f"https://api.slothpixel.me/api/skyblock/bazaar/{matches[item]}") as resp:
                     r = await resp.json()
                     if "error" not in r:
                         bazaar_results[item] = r
     if len(matches) < 5:
         string = f"showing all {len(results) + len(bazaar_results)} results"
     else:
         string = f"showing {len(results) + len(bazaar_results)} of {len(matches)} results."
     embed = Embed(self.bot, ctx.author, title=f"Price search for {name}", description=f"{string}\nAuction Items: {len(results)}\nBazaar Items: {len(bazaar_results)}")
     embeds = [embed]
     if not (results or bazaar_results):
         return await ctx.send(embed=discord.Embed(title=":x: Item not found!", description="No price could be found for that search on the auction house or bazaar", color=discord.Color.red()))
     if len(results) + len(bazaar_results) == 1:
         if results:
             result = list(results.keys())[0]
             return await ctx.send(embed=Embed(self.bot, ctx.author, title=f"Price of {result} on auction", description=f"Average Price: {results[result]['average_price']}\nPrice range: {results[result]['min_price']} - {results[result]['max_price']}"))
         else:
             result = list(bazaar_results.keys())[0]
             flip = round((bazaar_results[result]['buy_summary'][0]['pricePerUnit'] / bazaar_results[result]['sell_summary'][0]['pricePerUnit']) * 100) - 100
             await ctx.send(embed=Embed(self.bot, ctx.author, title=f"Price of {result} at the Bazaar", description=f"Instant buy price: {round(bazaar_results[result]['buy_summary'][0]['pricePerUnit'])}\nInstant sell price: {round(bazaar_results[result]['sell_summary'][0]['pricePerUnit'])}\nProfit Margin: {flip}%"))
     for i, result in enumerate(results):
         if "texture" in item_data[names[result]]:
             url = f"https://sky.lea.moe/head/{item_data[names[result]]['texture']}"
         else:
             url = ''
         embeds.append(Embed(self.bot, ctx.author, title=f"Price of {result} on auction", description=f"Average Price: {results[result]['average_price']}\nPrice range: {results[result]['min_price']} - {results[result]['max_price']}").set_footer(text=f"page {i + 1} of {len(results) + len(bazaar_results)}").set_thumbnail(url=url))
     for i, result in enumerate(bazaar_results):
         if "texture" in item_data[names[result]]:
             url = f"https://sky.lea.moe/head/{item_data[names[result]]['texture']}"
         else:
             url = ''
         flip = round((bazaar_results[result]['buy_summary'][0]['pricePerUnit'] / bazaar_results[result]['sell_summary'][0]['pricePerUnit']) * 100) - 100
         embeds.append(Embed(self.bot, ctx.author, title=f"Price of {result} at the Bazaar", description=f"Instant buy price: {round(bazaar_results[result]['buy_summary'][0]['pricePerUnit'])}\nInstant sell price: {round(bazaar_results[result]['sell_summary'][0]['pricePerUnit'])}\nProfit Margin: {flip}%").set_footer(text=f"page {len(results) + i + 1} of {len(results) + len(bazaar_results)}").set_thumbnail(url=url))
     msg = await ctx.send(embed=embeds[0])
     pages = Paginator(self.bot, msg, embeds=embeds, timeout=60, use_more=True, only=ctx.author)
     await pages.start()
Пример #10
0
    async def show_cc(self, ctx):
        async with self.conn_pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute(
                    """SELECT command FROM cc WHERE server = %s""",
                    (str(ctx.guild.id)),
                )
                row = await cur.fetchall()

        if row != ():
            if len(row) <= 100:
                text = " | ".join(_[0] for _ in row)
                embed = discord.Embed(
                    title="✅ 커스텀 보기",
                    description="%s" % (text),
                    color=0x1DC73A,
                )
                embed.set_footer(text="총 CC개수는 {}개입니다.".format(len(row)))
                await ctx.send(embed=embed)

            else:
                embeds = []
                sep = 100
                row = [x[0] for x in row]
                new_row = [
                    row[i * sep:(i + 1) * sep]
                    for i in range((len(row) + sep - 1) // sep)
                ]
                total = len(new_row)
                for i in new_row:
                    text = " | ".join(i)
                    embed = discord.Embed(
                        title="✅ 커스텀 보기",
                        description="%s" % (text),
                        color=0x1DC73A,
                    )
                    embed.set_footer(text="총 CC개수는 {}개입니다. ({} / {})".format(
                        len(row),
                        new_row.index(i) + 1, total))
                    embeds.append(embed)

                msg = await ctx.send(embed=embeds[0])
                page = Paginator(self.bot, msg, embeds=embeds)
                await page.start()

        else:
            embed = discord.Embed(
                title="✅ 커스텀 보기",
                description=
                "이 서버엔 커스텀 명령어가 없어요!\n`봇 커스텀 추가 <명령어>/<대답>`으로 추가를 진행해보세요.",
                color=0x1DC73A,
            )
            await ctx.send(embed=embed)
Пример #11
0
async def embed_pagination_with_extend(ctx: Context):
    """ Embed pagination with extended emoji """

    embed1 = discord.Embed(title="Test1", description="Page1")
    embed2 = discord.Embed(title="Test2", description="Page2")
    embed3 = discord.Embed(title="Test3", description="Page3")
    embeds = [embed1, embed2, embed3]

    msg = await ctx.send(embed=embed1)

    page = Paginator(bot=bot, message=msg, embeds=embeds, use_extend=True)
    await page.start()
Пример #12
0
async def embed_pagination(ctx: Context):
    """ Basic Embed pagination """

    embed1 = discord.Embed(title="Test1", description="Page1")
    embed2 = discord.Embed(title="Test2", description="Page2")
    embed3 = discord.Embed(title="Test3", description="Page3")
    embeds = [embed1, embed2, embed3]

    msg = await ctx.send(embed=embed1)

    page = Paginator(bot=bot, message=msg, embeds=embeds)
    await page.start()
Пример #13
0
 async def auctions(self, ctx, uname=None):
     uname = await self.get_uname(ctx, uname)
     if not uname: return
     player : skypy.Player = await skypy.Player(keys=self.bot.api_keys, uname=uname)
     await player.set_profile_automatically()
     async with ctx.typing():
         embeds = await self.get_auctions_embeds(ctx, player)
         if not embeds:
             return await ctx.send(f"{player.uname} has no auctions running.")
         msg = await ctx.send(embed=embeds[0])
     if len(embeds) > 1:
         pages = Paginator(self.bot, msg, embeds=embeds, only=ctx.author, use_more=True)
         await pages.start()
Пример #14
0
    async def info(self, ctx, user=None):
        try:
            converter = commands.UserConverter()
            user = await converter.convert(ctx, user)
        except commands.BadArgument:
            pass
        if user is None:
            user = ctx.author

        if isinstance(user, discord.abc.User):
            user_db = await self.connections.find_one({"id": user.id})

            if user_db:
                embed = await self.get_info_embed(ctx, user, user_db)
                return await ctx.send(embed=embed)
            if user != ctx.author:
                return await ctx.send("This user is not linked to the bot.")
            return await ctx.send("You are not linked to the bot.")

        if isinstance(user, str):
            uname, uuid = await skypy.fetch_uuid_uname(user)
            dc_users = self.connections.find({"uuid": uuid})
            dc_users = await dc_users.to_list(length=1000)

            if len(dc_users) > 0:
                embeds = []
                for dc_user in dc_users:
                    embed = await self.get_info_embed(
                        ctx, self.bot.get_user(dc_user["id"]), dc_user)
                    embeds.append(embed)

                msg = await ctx.send(embed=embeds[0])
                if len(embeds) > 1:
                    paginator = Paginator(self.bot,
                                          msg,
                                          embeds=embeds,
                                          timeout=60,
                                          use_more=True,
                                          only=ctx.author)
                    await paginator.start()
                return
            return await ctx.send(embed=await self.get_info_embed(
                ctx, None, {
                    "uuid": uuid,
                    "verified": False
                }, linked=False))

        raise commands.BadArgument(
            message="Discord User or Minecraft username")
Пример #15
0
    async def 서버목록(self, ctx):
        # 페이지 지정값이 없고, 총 서버수가 10 이하일 경우
        if len(self.bot.guilds) <= 10:
            embed = discord.Embed(
                title=f"{BOT_NAME} (이)가 들어가 있는 서버목록",
                description=
                f"**{len(self.bot.guilds)}개**의 서버, **{len(self.bot.users)}명**의 유저",
                color=self.color)
            srvr = str()
            for i in self.bot.guilds:
                srvr = srvr + f"**{i}** - **{i.member_count}명**\n"
            embed.add_field(name="​", value=srvr, inline=False)
            embed.set_footer(text=BOT_NAME_TAG_VER)
            return await ctx.send(embed=embed)

        # 서버수가 10개 이상일 경우
        # 총 페이지수 계산
        botguild = self.bot.guilds
        allpage = math.ceil(len(botguild) / 10)

        embeds = []
        chack = False
        for i in range(1, allpage + 1):
            srvr = ""
            numb = (10 * i)
            numa = numb - 10
            for a in range(numa, numb):
                try:
                    srvr = srvr + f"**{botguild[a]}** - **{botguild[a].member_count}명**\n"
                except IndexError:
                    break
            embed1 = discord.Embed(
                title=f"{BOT_NAME} (이)가 들어가 있는 서버목록",
                description=
                f"**{len(botguild)}개**의 서버, **{len(self.bot.users)}명**의 유저\n\n{srvr}",
                color=self.color)
            embed1.set_footer(
                text=f"페이지 {str(i)}/{str(allpage)}\n{BOT_NAME_TAG_VER}")
            if not chack:
                msg = await ctx.send(embed=embed1)
                chack = True
            embeds.append(embed1)

        page = Paginator(bot=self.bot,
                         message=msg,
                         embeds=embeds,
                         use_extend=True)
        await page.start()
Пример #16
0
 async def auctions(self, ctx, uname=None, profile=None):
     player: skypy.Player = await self.make_player(ctx, uname, profile)
     if not player: return
     async with ctx.typing():
         embeds = await self.get_auctions_embeds(ctx, player)
         if not embeds:
             return await ctx.send(
                 f"{player.uname} has no auctions running.")
         msg = await ctx.send(embed=embeds[0])
     if len(embeds) > 1:
         pages = Paginator(self.bot,
                           msg,
                           embeds=embeds,
                           only=ctx.author,
                           use_extend=True)
         await pages.start()
Пример #17
0
    async def 도움(self, ctx):

        e = discord.Embed(
            title='미니봇 도움말',
            description=
            '프리픽스는 **`**, **미니봇**, <@!520830713696878592> 이에요\n 개발자 : `!   "   A Minibox#3466`'
        )
        e.add_field(name='1페이지', value='도움말', inline=False)
        e.add_field(name='2페이지', value='음악', inline=False)
        e.add_field(name='3페이지', value='마이봇', inline=False)
        e.set_footer(text='[ 1 / 3 ] 이모지로 페이지를 넘길 수 있어요')

        e1 = discord.Embed(title='미니봇 음악 도움말')
        e1.add_field(name='미니봇 재생 [검색어]', value='음악을 재생해요', inline=False)
        e1.add_field(name='미니봇 나가', value='통화방에서 나가요', inline=False)
        e1.add_field(name='미니봇 재생목록', value='지금 플레이리스트를 보여줘요', inline=False)
        e1.add_field(name='미니봇 스킵', value='음악을 하나 스킵해요', inline=False)
        e1.add_field(name='미니봇 지금곡', value='지금 플레이중인 곡을 보여줘요', inline=False)
        e1.add_field(name='미니봇 시간스킵 [초]', value='초만큼 시간을 스킵해요', inline=False)
        e1.set_footer(text='[ 2 / 3 ] 이모지로 페이지를 넘길 수 있어요')

        e2 = discord.Embed(title='미니봇 마이봇 도움말',
                           description='마이봇은 마이봇을 만든 채널에서**만** 사용 가능해요')
        e2.add_field(
            name='미니봇 등록 [웹훅URL]',
            value=
            '채널을 DB에다 적용시켜요\n```사용법\n1. 봇을 배치할 채널의 채널 편집에 들어가요\n2. 웹후크칸을 누르고 웹후크 만들기 버튼을 눌러요\n3. 웹후크의 URL을 복사하고 저장하고 명령어에 써요```',
            inline=False)
        e2.add_field(name='미니봇 생성 "[봇 이름]" "[프리픽스]"',
                     value='봇을 만들어요',
                     inline=False)
        e2.add_field(name='미니봇 커맨드생성 "[봇 이름]" "[커맨드]" "[대답]"',
                     value='봇의 커맨드를 만들어요',
                     inline=False)
        e2.add_field(name='미니봇 프사변경 "[봇 이름]" [프사 URL]',
                     value='봇의 프로필사진을 바꿔요',
                     inline=False)
        e2.add_field(name='미니봇 봇정보 "[봇 이름]"',
                     value='봇의 커맨드들과 정보를 보여줘요',
                     inline=False)
        e2.set_footer(text='[ 3 / 3 ] 이모지로 페이지를 넘길 수 있어요')

        es = [e, e1, e2]
        print(e1.to_dict())
        msg = await ctx.send(embed=e)
        page = Paginator(self.bot, msg, embeds=es, only=ctx.author)
        await page.start()
Пример #18
0
 async def _view(self, ctx, user: discord.Member):
     await ctx.defer()
     sql = await self.bot.sql(
         f"SELECT * FROM `modlog` WHERE `user` = '{user.id}' ORDER BY `case` ASC",
         0)
     if not sql:
         await ctx.send(f"🧼 `{user}`님은 제재당한 내역이 없습니다.")
     else:
         embeds = []
         actions = {
             "warn": "경고",
             "mute": "채팅 제한",
             "unmute": "채팅 제한 해제",
             "kick": "추방",
             "ban": "차단",
         }
         for i in range(len(sql)):
             admin = self.bot.get_user(int(sql[i][3]))
             embed = discord.Embed(
                 title=f"⚠️ {user.name}님의 제재내역 ({i + 1} / {len(sql)})",
                 color=0xFF3333,
             )
             embed.add_field(name="🎬 CASE No.",
                             value=f"CASE #{sql[i][0]}",
                             inline=False)
             embed.add_field(name="📽 Action",
                             value=actions[sql[i][1]],
                             inline=False)
             embed.add_field(name="🗡 Moderator",
                             value=f"{admin} {admin.mention}",
                             inline=False)
             embed.add_field(name="📋 Reason", value=sql[i][4], inline=False)
             embed.add_field(name="⏰ Date", value=sql[i][5], inline=False)
             embed.set_author(name="관리 기록",
                              icon_url=self.bot.user.avatar_url)
             embed.set_thumbnail(
                 url=user.avatar_url_as(static_format="png", size=2048))
             embed.set_footer(text=ctx.guild.name,
                              icon_url=ctx.guild.icon_url)
             embeds.append(embed)
         msg = await ctx.send(ctx.author.mention, embed=embeds[0])
         page = Paginator(bot=self.bot, message=msg, embeds=embeds)
         await page.start()
Пример #19
0
 async def _readpost(self, ctx):
     if not isdir('posts'):
         makedirs('posts')
     if not isfile('posts/count.bin'):
         with open('posts/count.bin', 'wb') as f:
             pickle.dump(0, f)
     with open('posts/count.bin', 'rb') as f:
         count = pickle.load(f)
     if count == 0:
         await warn(ctx=ctx, content='공지가 없습니다')
         return
     embeds = []
     for i in range(count):
         with open(f'posts/{i}.json') as f:
             data = json.loads(f.read())
             date = data['date']
             content = data['content']
             writer = await self.bot.fetch_user(int(data['writer']))
         embeds.append(
             discord.Embed(
                 title=f'공지 - {1+i}개/{count}개',
                 description=
                 f'{content}\n\n------------------\n[서포트 서버 들어오기](http://support.thinkingbot.kro.kr)\n[ThinkingBot 권한없이 초대](http://invite.thinkingbot.kro.kr)\n[ThinkingBot 최소권한 초대](http://invite2.thinkingbot.kro.kr)\n[ThinkingBot 깃허브](http://github.thinkingbot.kro.kr)',
                 color=embedcolor).set_footer(icon_url=writer.avatar_url,
                                              text=f'{writer} - {date}'))
     embeds.reverse()
     page = Paginator(bot=self.bot,
                      message=await ctx.send(embed=embeds[0]),
                      embeds=embeds,
                      only=ctx.author,
                      use_extend=True,
                      extended_emojis=[
                          '<:leftend:809567692692258847>',
                          '<:left:809567681652981781>',
                          '<:right:809567682164424738>',
                          '<:rightend:809567696307617863>'
                      ])
     await page.start()
Пример #20
0
    async def help(self, ctx):

        functions_list = ["기본", "기본2", "게임", "커스텀 명령어", "관리자"]
        embeds = []
        for i in functions_list:
            embed = discord.Embed(
                title="📰 도움말",
                description="**{} 커맨드** ({} / {})".format(
                    i,
                    functions_list.index(i) + 1,
                    len(functions_list),
                ),
                color=0x237CCD,
            )
            embed.set_footer(text="이모지를 이용하여 페이지를 넘기세요.")
            for k in self.help_data[i]:
                for j in k.items():
                    embed.add_field(name=j[0], value=j[1], inline=False)
            embeds.append(embed)

        msg = await ctx.send(embed=embeds[0])
        page = Paginator(self.bot, msg, embeds=embeds)
        await page.start()
Пример #21
0
 async def _mails(self, ctx):
     mails = getmail(id=ctx.author.id)
     mails.reverse()
     main_embed = discord.Embed(title='메일함', color=embedcolor)
     for i in mails:
         if len(i['title']) > 20: title = i['title'][:20]
         else: title = i['title']
         main_embed.add_field(name=title,
                              value='`' +
                              i['time'].strftime("%y.%m.%d %H:%M") + '`')
     embeds = [main_embed]
     for i in mails:
         embeds.append(
             discord.Embed(title=i['title'],
                           description=i['content'],
                           color=embedcolor).set_footer(
                               text=i['time'].strftime("%y.%m.%d %H:%M")))
     page = Paginator(bot=self.bot,
                      message=await ctx.send(embed=embeds[0]),
                      embeds=embeds,
                      only=ctx.author,
                      auto_delete=True)
     await page.start()
Пример #22
0
 async def lyric(self, ctx, *, song_name="Counting Stars"):
     try:
         song = genius.search_song(song_name)
         print(song.lyrics)
     except:
         embed = discord.Embed(title=f"{song_name} 의 가사",
                               description=f"에러: {traceback.format_exc()}",
                               colour=discord.Colour.red())
         await ctx.send(embed=embed)
     else:
         embed = discord.Embed(title=f"{song_name} 의 가사",
                               colour=discord.Colour.green())
         try:
             embed.description = song.lyrics
             await ctx.send(embed=embed)
         except:
             embed.description = song.lyrics[:1900]
             embed2 = discord.Embed(title=f"{song_name} 의 가사",
                                    description=song.lyrics[1900:],
                                    colour=discord.Colour.green())
             msg = await ctx.send(embed=embed)
             embeds = [embed, embed2]
             page = Paginator(self.bot, msg, embeds=embeds)
             await page.start()
Пример #23
0
    async def price(self, ctx, *, name: str):
        await ctx.trigger_typing()
        async with aiohttp.ClientSession() as session:
            async with session.get(
                    "https://api.slothpixel.me/api/skyblock/items") as resp:
                item_data = await resp.json()
        names = {
            item_data[z]["name"].lower(): [z, b.get('bazaar')]
            for z, b in item_data.items()
        }
        btasks = []
        atasks = []
        matches = {
            z: y
            for (z, y) in names.items() if name.lower() in z.lower()
        }

        async def auctionData(sesh, i):
            id = matches.get(i)[0]
            r = await sesh.get(
                f'https://api.slothpixel.me/api/skyblock/auctions/{id}')
            j = await r.json()
            if 'error' not in j and j.get('average_price'):
                return i, j

        async def bazaarData(sesh, i):
            id = matches.get(i)[0]
            r = await sesh.get(
                f'https://api.slothpixel.me/api/skyblock/bazaar/{id}')
            j = await r.json()
            if not j.get('error') and j:
                return i, j

        counter = 0
        async with aiohttp.ClientSession() as session:
            for item, mdata in matches.items():
                if counter < 5:
                    if mdata[1]:
                        btasks.append(
                            asyncio.create_task(bazaarData(session, item)))
                    else:
                        atasks.append(
                            asyncio.create_task(auctionData(session, item)))
            auctions = await asyncio.gather(*atasks)
            bazaar = await asyncio.gather(*btasks)
        bazaar_results = {k[0]: k[1] for k in bazaar if k}
        results = {k[0]: k[1] for k in auctions if k}
        if not (results or bazaar_results):
            return await ctx.send(embed=discord.Embed(
                title=":x: Item not found!",
                description=
                "No price could be found for that search on the auction house or bazaar",
                color=discord.Color.red()))
        if len(matches) == len(results) + len(bazaar_results):
            string = f"showing all {len(matches)} results"
        else:
            string = f"showing {len(results) + len(bazaar_results)} of {len(matches)} results."
        embed = Embed(
            self.bot,
            ctx.author,
            title=f"Price search for {name}",
            description=
            f"{string}\nAuction Items: {len(results)}\nBazaar Items: {len(bazaar_results)}"
        )
        embeds = [embed]
        if len(results) + len(bazaar_results) == 1:
            if results:
                result = list(results.keys())[0]
                return await ctx.send(embed=Embed(
                    self.bot,
                    ctx.author,
                    title=f"Price of {result} on auction",
                    description=
                    f"Average Price: {results[result]['average_price']:,}\nLowest BIN: {results[result]['lowest_bin']:,}\nPrice range: {results[result]['min_price']:,} - {results[result]['max_price']:,}"
                ))
            else:
                result = list(bazaar_results.keys())[0]
                flip = round(
                    (bazaar_results[result]['buy_summary'][0]['pricePerUnit'] /
                     bazaar_results[result]['sell_summary'][0]['pricePerUnit'])
                    * 100) - 100
                await ctx.send(embed=Embed(
                    self.bot,
                    ctx.author,
                    title=f"Price of {result} at the Bazaar",
                    description=
                    f"Instant buy price: {round(bazaar_results[result]['buy_summary'][0]['pricePerUnit']):,}\nInstant sell price: {round(bazaar_results[result]['sell_summary'][0]['pricePerUnit']):,}\nProfit Margin: {flip}%"
                ))
        for i, result in enumerate(results):
            if "texture" in item_data[names[result][0]]:
                url = f"https://sky.lea.moe/head/{item_data[names[result][0]]['texture']}"
            else:
                url = ''
            embeds.append(
                Embed(
                    self.bot,
                    ctx.author,
                    title=f"Price of {result} on auction",
                    description=
                    f"Average Price: {results[result]['average_price']:,}\nLowest BIN: {results[result]['lowest_bin']:,}\nPrice range: {results[result]['min_price']:,} - {results[result]['max_price']:,}"
                ).set_footer(
                    text=f"page {i + 1} of {len(results) + len(bazaar_results)}"
                ).set_thumbnail(url=url))
        for i, result in enumerate(bazaar_results):
            if "texture" in item_data[names[result][0]]:
                url = f"https://sky.lea.moe/head/{item_data[names[result][0]]['texture']}"
            else:
                url = ''
            flip = round(
                (bazaar_results[result]['buy_summary'][0]['pricePerUnit'] /
                 bazaar_results[result]['sell_summary'][0]['pricePerUnit']) *
                100) - 100
            embeds.append(
                Embed(
                    self.bot,
                    ctx.author,
                    title=f"Price of {result} at the Bazaar",
                    description=
                    f"Instant buy price: {round(bazaar_results[result]['buy_summary'][0]['pricePerUnit']):,}\nInstant sell price: {round(bazaar_results[result]['sell_summary'][0]['pricePerUnit']):,}\nProfit Margin: {flip}%"
                ).set_footer(
                    text=
                    f"page {len(results) + i + 1} of {len(results) + len(bazaar_results)}"
                ).set_thumbnail(url=url))
        msg = await ctx.send(embed=embeds[0])
        pages = Paginator(self.bot,
                          msg,
                          embeds=embeds,
                          timeout=60,
                          use_extend=True,
                          only=ctx.author)
        await pages.start()
Пример #24
0
 async def _help(self, ctx, *, arg=None):
     command = self.bot.get_command(str(arg))
     if command is not None:
         embed = discord.Embed(title='도움말',
                               description=f'```{command.help}```',
                               color=embedcolor)
         if command.usage is None: usage = ''
         else: usage = command.usage
         embed.add_field(name='사용법',
                         value=f'{mainprefix}{arg} {usage}',
                         inline=False)
         if command.aliases != []:
             embed.add_field(name='또 다른 형태',
                             value=', '.join(command.aliases))
         else:
             embed.add_field(name='또 다른 형태', value=' ', inline=False)
         embed.add_field(name='카테고리', value=command.cog.qualified_name)
         embed.set_footer(text=f'{ctx.author} | {mainprefix}도움',
                          icon_url=ctx.author.avatar_url)
         await ctx.send(embed=embed)
     else:
         helps = []
         cogs = [i for i in self.bot.cogs]
         del cogs[cogs.index('Listener')]
         for i in range(len(cogs)):
             cogs[i] = self.bot.get_cog(cogs[i])
         embed = discord.Embed(
             title=f'1/{len(cogs)+1}페이지 - 카테고리 목록',
             description=
             '[]는 필수적인 값을, <>는 필수적이지 않은 값들을 의미합니다. 괄호들은 빼고 입력해 주세요!',
             color=embedcolor)
         embed.add_field(
             name='접두사',
             value=f'{self.bot.user.name}의 접두사는 `{"`, `".join(prefix)}`입니다')
         for i in cogs:
             embed.add_field(name=f'**{i.qualified_name}**',
                             value=f'`{i.description}`',
                             inline=False)
         helps.append(embed)
         for i in range(len(cogs)):
             embed = discord.Embed(
                 title=f'{i+2}/{len(cogs)+1} 페이지 - {cogs[i].qualified_name}',
                 color=embedcolor)
             for i in cogs[i].get_commands():
                 if i.usage is None:
                     usage = ''
                 else:
                     usage = ' ' + i.usage
                 if i.help is None:
                     embed.add_field(
                         name=f'\n**{i.name}**',
                         value=f'`{mainprefix}{i.name}{usage}`\n',
                         inline=False)
                 else:
                     embed.add_field(
                         name=f'\n**{i.name}**',
                         value=f'`{mainprefix}{i.name}{usage}`\n{i.help}\n',
                         inline=False)
             helps.append(embed)
         for i in range(len(helps)):
             helps[i] = helps[i].set_footer(
                 text=f'{ctx.author} | {mainprefix}도움',
                 icon_url=ctx.author.avatar_url)
         page = Paginator(bot=self.bot,
                          message=await ctx.send(embed=helps[0]),
                          embeds=helps,
                          only=ctx.author,
                          use_extend=True,
                          extended_emojis=[
                              '<:leftend:809567692692258847>',
                              '<:left:809567681652981781>',
                              '<:right:809567682164424738>',
                              '<:rightend:809567696307617863>'
                          ])
         await page.start()
Пример #25
0
async def text_pagination(ctx):
    msg = await ctx.send("페이지1")
    contents = ["페이지1", "페이지2", "페이지3"]

    page = Paginator(bot, msg, contents=contents)
    await page.start()
Пример #26
0
    async def Category(self, ctx):
        embed = discord.Embed(
            title="KDD - 카테고리",
            description="KDD의 카테고리입니다. 이모지를 클릭하여 원하는 카테고리를 열어보세요.\n\n:pushpin: 기본적인 디스코드 팁\n📂 디스코드 서버 팁\n🖍 글자 강조하기\n📝 채팅 꾸미기\n🖌 글자 색깔 꾸미기\n⚒ 서버 꾸미기",
            colour=0x00FFFF,
            inline=False,
        )

        r = ["📌", "📂", "🖍", "📝", "🖌", "⚒"]
        m = await ctx.send(embed=embed)
        for i in r:
            await m.add_reaction(i)

        def checks(reaction, user):
            return user == ctx.author and str(reaction.emoji) in r

        try:
            reaction, user = await self.bot.wait_for(
                "reaction_add", timeout=60.0, check=checks
            )

            if str(reaction.emoji) == "📌":
                pageinfo = discord.Embed(
                    title="기본적인 디스코드 팁",
                    description="``이모지``로 페이지를 넘겨 정보를 확인해보세요.\n\n**1페이지**. 디스코드란 무엇인가\n\n**2페이지**. 키보드 콤보 - 디스코드 단축키\n\n**3페이지**. eon28이 소개한 봇\n\n**4페이지**. 디스코드 오류 해결법\n\n**5페이지**. 이모지, 이모티콘\n\n**6페이지**. 배지 badges\n\n**7페이지**. 프로필 꾸미기 rich presence\n\n**8페이지**. 디스코드 문의하기 \n\n**9페이지**. HypeSquad 배지 얻기",
                    color=0x00FFFF,
                    inline=False,
                    timestamp=ctx.message.created_at,
                )
                page1 = Embed(
                    title="디스코드란?",
                    description="디스코드란?\n디스코드는 게이머를 위한 메신저이다.\n\n#기본 정보\n\n개발자 - Discord lnc.\n발매 - 2015년 3월 "
                    "6일\n\n#특징\n● 뛰어난 성능과 무료 사용을 토대로 급부상하고 있는 메신저 프로그램\n● 한국에서는 주로 온라인 게임을 즐기는 "
                    "사람들이 많이 이용하는 편\n● 뛰어난 성능과 간편함\n● 단순한 보이스 채팅말고도 텍스트 채팅과 정보 공유, "
                    "관리 기능 등을 지원\n● 게임 내에서 자체적으로 보이스톡 시스템을 지원하더라도 Discord를 병용하거나 Discord만을 이용하는 "
                    "경우도 많은 "
                    "편",
                    color=0x00FFFF,
                    timestamp=ctx.message.created_at,
                )
                page1.set_thumbnail(
                    url="https://cdn.discordapp.com/attachments/655651598671937586"
                    "/655654221173227531/hgfhfhf.PNG"
                )
                page1.set_footer(text="1/9 페이지")

                page2 = Embed(
                    title="키보드 콤보 (디스코드 단축키)",
                    description="키보드 콤보 (디스코드 단축키) - 디스코드에서 사용할 수 있는 단축키 모음\n\nI.설명\n디스코드 프로그램에서 Ctrl+/를 동시에 누르면 키보드 콤보라는 작은 화면이 뜨게 됩니다.\n키보드 콤보는 디스코드 내에서 사용할 수 있는 단축키입니다.\n게임을 하거나 다른 작업, 디스코드 내에서 작업할 때도 편리하게 사용할 수 있겠죠?\nII. DDR 화살표 소리\nCtrl+/ (키보드 콤보)에서 상하좌우 화살표 키를 누르면 오른쪽 위의 DDR 화살표에 불이 들어오면서 소리가 난다\n\n\nIII. 이스터에그\nCtrl+/ (키보드 콤보)에서 HH -> NK 를 입력하면 순옥살이 나간다.\n\n참고영상\nhttps://www.youtube.com/watch?v=5ZvzS3aAXEA&app=desktop",
                    color=0x00FFFF,
                    timestamp=ctx.message.created_at,
                )
                page2.add_field(
                    name="이미지",
                    value="[키보드 콤보 목록](https://cdn.discordapp.com/attachments/649570312723234827/663283154848579585/dsffdsfdsfdsfdsfs.PNG) \n[상하좌우 키](https://cdn.discordapp.com/attachments/649570312723234827/663283217801019403/dsasddad.PNG)",
                )
                page2.set_footer(text="2/9 페이지")

                page3 = Embed(
                    title="Eon28(김만찬)이 소개한 봇",
                    description="[여기](https://blog.naver.com/PostList.nhn?blogId=alscks140&categoryNo=42&parentCategoryNo=42&skinType=&skinId=&from=menu)를 클릭하여 자세히 알아보세요.",
                    color=0x00FFFF,
                    timestamp=ctx.message.created_at,
                )
                page3.set_footer(text="3/9 페이지")

                page4 = Embed(
                    title="디스코드 오류 해결법",
                    description="1. 디스코드 알림음이 들리지 않습니다.\n> (정확하지는 않지만 해결이 되었던 방법) \n> 껐다 키면 해결이 됩니다.\n\n2. 화면 공유가 되지 않습니다.\n> 화면 공유를 하는 사람의 컴퓨터 운영체제가 \n> 윈도우 7이면 소리가 안들립니다.",
                    color=0x00FFFF,
                    timestamp=ctx.message.created_at,
                )
                page4.set_footer(text="4/9 페이지")

                page5 = Embed(
                    title="디스코드 이모지",
                    description="이모지, 이모티콘 - 다들 알고 있는 이모티콘이다.\n> I. 설명\n디스코드에서 사용하는 이모티콘이다.\n이모지라고도 불리고 이모티콘이라고도 불린다.\n\n> II. 사용방법\n채팅 입력칸 우측에 이모지 버튼이 있어 이모지를 전송할 수 있다.\n누르게 되면 사용할 수 있는 (글로벌) 이모지, 서버 이모지를 골라 사용할 수 있다.\n상단에 검색창도 있어 검색을 통해 빠르게 이모지/이모티콘을 사용할 수 있다.\n자신이 많이 사용하는 이모지/이모티콘이 있다면 :(이름): 형태로 이모티콘을 채팅을 통해 사용할 수 있다.\n추가로 이모지/이모티콘을 통해 채팅에 반응을 추가 할 수 있다.",
                    color=0x00FFFF,
                    timestamp=ctx.message.created_at,
                )
                page5.set_footer(text="5/9 페이지")
                pages = [pageinfo, page1, page2, page3, page4, page5]

                msg = await ctx.send(embed=pageinfo)

                page = Paginator(
                    bot=self.bot, message=msg, embeds=pages, use_extend=True, only=ctx.author
                )
                await page.start()

            if str(reaction.emoji) == "📂":
                await ctx.send(
                    "보고 싶은 항목의 번호를 입력하세요. (1번을 보고 싶다면 1 입력)\n\n1. 개발자 모드\n2. 디스코드 파트너 \n3. 공개 서버 기능\n4. 디스코드 웹후크"
                )

            if str(reaction.emoji) == "🖍":
                await ctx.send(
                    "보고 싶은 항목의 번호를 입력하세요. (1번을 보고 싶다면 1 입력)\n\n1. 기울기 \n2. 굵은 글씨\n3. 밑줄\n4. 취소선\n5. 마크다운 효과 제거\n6. 공백 만들기"
                )

            if str(reaction.emoji) == "📝":
                await ctx.send(
                    "보고 싶은 항목의 번호를 입력하세요. (1번을 보고 싶다면 1 입력)\n\n1. single_line_highlight\n2. multi_line_highlight\n3. code_block\n4. spoiler_tags\n5. single_line_block_quotes\n6. multi_line_block_quotes\n7. color embed"
                )

            if str(reaction.emoji) == "🖌":
                await ctx.send("글자 색깔 꾸미기")

            if str(reaction.emoji) == "⚒":
                await ctx.send("서버 꾸미기")

        except asyncio.TimeoutError:
            await ctx.send("시간이 초과되었습니다.\n시간 제한은 60초입니다.")
Пример #27
0
    async def 서버목록(self, ctx, arg: int = None):
        # 페이지 지정값이 없고, 총 서버수가 10 이하일 경우
        if len(self.bot.guilds) <= 10:
            embed = discord.Embed(
                title=get_lan(ctx.author.id,
                              "owners_server_list_title").format(
                                  BOT_NAME=self.bot.user.name),
                description=get_lan(ctx.author.id,
                                    "owners_server_list_description").format(
                                        server_count=len(self.bot.guilds),
                                        members_count=len(self.bot.users)),
                color=color_code)
            srvr = str()
            for i in self.bot.guilds:
                srvr = srvr + get_lan(
                    ctx.author.id, "owners_server_list_info").format(
                        server_name=i, server_members_count=i.member_count)
            embed.add_field(name="​", value=srvr, inline=False)
            return await ctx.send(embed=embed)

        # 서버수가 10개 이상일 경우

        # 총 페이지수 계산
        botguild = self.bot.guilds
        allpage = math.ceil(len(botguild) / 10)

        embeds = []
        chack = False
        for i in range(1, allpage + 1):
            srvr = ""
            numb = (10 * i)
            numa = numb - 10
            for a in range(numa, numb):
                try:
                    srvr = srvr + get_lan(
                        ctx.author.id, "owners_server_list_info").format(
                            server_name=botguild[a],
                            server_members_count=botguild[a].member_count)
                except Exception:
                    break
            embed1 = discord.Embed(
                title=get_lan(ctx.author.id,
                              "owners_server_list_title").format(
                                  BOT_NAME=self.bot.user.name),
                description=get_lan(ctx.author.id,
                                    "owners_server_list_description2").format(
                                        server_count=len(self.bot.guilds),
                                        members_count=len(self.bot.users),
                                        servers=srvr),
                color=color_code)
            embed1.set_footer(
                text=
                f"{get_lan(ctx.author.id, 'owners_page')} {str(i)}/{str(allpage)}"
            )
            if not chack:
                msg = await ctx.send(embed=embed1)
                chack = True
            embeds.append(embed1)

        page = Paginator(bot=self.bot,
                         message=msg,
                         embeds=embeds,
                         use_extend=True)
        await page.start()
Пример #28
0
    async def help(self, ctx):

        e = discord.Embed(title='태시아봇 도움말',
                          description='프리픽스: **ㅌ**\n 개발자 : 가위#1111')
        e.add_field(name='1페이지', value='목차', inline=False)
        e.add_field(name='2페이지', value='음악', inline=False)
        e.add_field(name='3페이지', value='이코노미 1/3', inline=False)
        e.add_field(name='4페이지', value='이코노미 2/3', inline=False)
        e.add_field(name='5페이지', value='이코노미 3/3', inline=False)
        e.add_field(name='6페이지', value='서버관리', inline=False)
        e.add_field(name='7페이지', value='기타', inline=False)
        e.set_footer(text='[ 1 / 7 ]')

        e1 = discord.Embed(title='태시아봇 음악 도움말',
                           description='음악소스는 `STORM#0001`님이 제공해주셨습니다.')
        e1.add_field(name='ㅌ재생 [검색어 or URL]', value='음악을 재생해요', inline=False)
        e1.add_field(name='ㅌ나가', value='통화방에서 나가요', inline=False)
        e1.add_field(name='ㅌ재생목록', value='지금 플레이리스트를 보여줘요', inline=False)
        e1.add_field(name='ㅌ스킵', value='음악을 하나 스킵해요', inline=False)
        e1.add_field(name='ㅌ지금곡', value='지금 플레이중인 곡을 보여줘요', inline=False)
        e1.add_field(name='ㅌ시간스킵 [초]', value='초만큼 시간을 스킵해요', inline=False)
        e1.add_field(name='ㅌ일시정지',
                     value='재생중이던 음악을 일시정지해요, 일시정지상태에서 한번더 입력하면 다시 재생해요',
                     inline=False)
        e1.add_field(name='ㅌ볼륨 [설정할 볼륨]',
                     value='설정한 볼륨만큼 소리크기를 조정해요, 만약 볼륨값을 입력하지않으면 현재 볼륨값을 알려줘요',
                     inline=False)
        e1.add_field(name='ㅌ셔플', value='대기목록의 순서를 랜덤으로 바꿔 재생해요', inline=False)
        e1.add_field(name='ㅌ반복', value='최근재생한 곡을 반복재생해요', inline=False)
        e1.add_field(name='ㅌ삭제 [대기번호]',
                     value='대기목록의 번호를 대기열에서 삭제시켜요',
                     inline=False)
        e1.add_field(name='ㅌ시간스킵 [초]', value='초만큼 시간을 스킵해요', inline=False)
        e1.set_footer(text='[ 2 / 7 ]')

        e2 = discord.Embed(title='태시아봇 이코노미 도움말 1/3')
        e2.add_field(name='ㅌ가입', value='모든서비스에 가입해요', inline=False)
        e2.add_field(name='ㅌ직업', value='직업리스트를 보여줘요', inline=False)
        e2.add_field(name='ㅌ취직 [직업이름]',
                     value='직업리스트에 있는 직업이름을 입력하면 해당 직업으로 취직해요',
                     inline=False)
        e2.add_field(name='ㅌ지갑', value='자기가 가진 현금을 보여줘요', inline=False)
        e2.add_field(name='ㅌ통장', value='자기가 입금한 돈을 보여줘요', inline=False)
        e2.add_field(name='ㅌ가방', value='가방내용물을 보여줘요', inline=False)
        e2.add_field(name='ㅌ탈퇴', value='전체서비스에서 탈퇴해요', inline=False)
        e2.add_field(name='ㅌ통장', value='자기가 입금한 돈을 보여줘요', inline=False)
        e2.add_field(name='ㅌ로또구매', value='복권을 구매해요', inline=False)
        e2.add_field(name='ㅌ당첨확인', value='구매한 복권의 당첨유무를 확인해요', inline=False)
        e2.add_field(name='ㅌ랜덤입양', value='펫을 랜덤으로 입양해요', inline=False)
        e2.add_field(name='ㅌ유저입양', value='다른 유저가 분양중인 펫을 입양해요', inline=False)
        e2.set_footer(text='[ 3 / 7 ]')

        e3 = discord.Embed(title='태시아봇 이코노미 도움말 2/3')
        e3.add_field(name='ㅌ자판기', value='자판기에서 펫사료를 구매해요', inline=False)
        e3.add_field(name='ㅌ펫이름변경', value='펫이름을 번경해요', inline=False)
        e3.add_field(name='ㅌ파양', value='펫을 파양(소유권포기)해요', inline=False)
        e3.add_field(name='ㅌ펫분양', value='펫을 분양게시글에 등록해요', inline=False)
        e3.add_field(name='ㅌ펫상태', value='펫상태를 알려줘요', inline=False)
        e3.add_field(name='ㅌ길들이기', value='펫을 길들여요', inline=False)
        e3.add_field(name='ㅌ파양', value='펫을 파양(소유권포기)해요', inline=False)
        e3.set_footer(text='[ 4 / 7 ]')

        e4 = discord.Embed(title='태시아봇 이코노미 도움말 3/3')
        e4.add_field(name='ㅌ입금 [금액]', value='현금을 통장에 입금해요', inline=False)
        e4.add_field(name='ㅌ출금 [금액]', value='통장에서 돈을 뽑아요', inline=False)
        e4.add_field(name='ㅌ도박 [금액]',
                     value='도박을 하여 랜덤으로 돈을 얻거나 잃어요',
                     inline=False)
        e4.add_field(name='ㅌ나무', value='나무를 캐서 돈을 벌어요', inline=False)
        e4.add_field(name='ㅌ지원금', value='지원금을 받아요', inline=False)
        e4.add_field(name='ㅌ송금 [돈을 보낼 유저;@user]',
                     value='지정한 상대에게 돈을 보내요',
                     inline=False)
        e4.add_field(name='ㅌ일하기', value='일해서 돈을 벌어요', inline=False)
        e4.add_field(name='ㅌ파양', value='펫을 파양(소유권포기)해요', inline=False)
        e4.set_footer(text='[ 5 / 7 ]')

        e5 = discord.Embed(title='태시아봇 서버관리 도움말')
        e5.add_field(name='ㅌ유저메모 [유저;@user] [내용]',
                     value='지정한 상대에게 간단한 메모를 남겨요',
                     inline=False)
        e5.add_field(name='ㅌ메모삭제 [유저;@user]',
                     value='지정한 상대에게 남긴 메모를 삭제해요',
                     inline=False)
        e5.add_field(name='ㅌ유저정보 [유저;@user]',
                     value='지정한 상대의 정보를 확인해요',
                     inline=False)
        e5.add_field(name='ㅌ알림판 [채널;#channel]',
                     value='지정한 채널에 공지를 등록해요(everyone멘션포함되어있아요)',
                     inline=False)
        e5.add_field(name='ㅌ청소 [갯수]', value='설정한 갯수만큼 채팅을 지워요', inline=False)
        e5.add_field(name='ㅌ밴 [유저;@user]',
                     value='지정한 상대를 서버에서 밴해요',
                     inline=False)
        e5.add_field(name='ㅌ언밴 [유저;@user]',
                     value='지정한 상대를 서버에서 언밴해요',
                     inline=False)
        e5.add_field(name='ㅌ킥 [유저;@user]',
                     value='지정한 상대를 서버에서 강제퇴장시켜요',
                     inline=False)
        e5.add_field(name='ㅌ경고 [유저;@user]',
                     value='지정한 상대에게 경고를 부여해요',
                     inline=False)
        e5.add_field(name='ㅌ경고리셋 [유저;@user]',
                     value='지정한 상대에게 부여된 경고를 초기화해요',
                     inline=False)
        e5.add_field(name='ㅌ처벌기록리셋 [유저;@user]',
                     value='지정한 상대에게 기록된 처벌기록을 초기화해요',
                     inline=False)
        e5.set_footer(text='[ 6 / 7 ]')

        e6 = discord.Embed(title='태시아봇 기타 도움말')
        e6.add_field(name='ㅌ설명', value='간단한 설명을 해줘요', inline=False)
        e6.add_field(name='ㅌ크레딧', value='봇제작에 도움을 주신 정보를 알려줘요', inline=False)
        e6.add_field(name='ㅌ봇정보', value='봇의 상태를 알려줘요', inline=False)
        e6.add_field(
            name='ㅌ정보카드 [유저;@user]',
            value='지정한 상대의 정보를 이미지화 하여 알려주거나 상대를 지정하지않으면 자신의 정보로 알려줘요',
            inline=False)
        e6.add_field(name='ㅌ날씨 [지역]', value='지정한 지역의 날씨정보를 알려줘요', inline=False)
        e6.add_field(name='ㅌ인벤', value='인벤에서 핫뉴스를 알려줘요', inline=False)
        e6.add_field(name='ㅌ노래순위', value='실시간 노래순위를 알려줘요', inline=False)
        e6.add_field(name='ㅌ실검', value='실시간 실검을 알려줘요', inline=False)
        e6.add_field(name='ㅌ뉴스 [검색할 뉴스]', value='뉴스를 검색해요', inline=False)
        e6.add_field(name='ㅌ웹 [검색할 주제]', value='네이버로 검색해요', inline=False)
        e6.add_field(name='ㅌ카페 [검색할 게시글]',
                     value='카페에서 게시글을 검색해요',
                     inline=False)
        e6.add_field(name='ㅌ한강(이미지)', value='한강온도를 알려줘요', inline=False)
        e6.add_field(name='ㅌ데일리셋업',
                     value='매일 아침7시에 날씨와 뉴스를 포함해 DM을 보내주는 서비스에 가입해요',
                     inline=False)
        e6.add_field(name='ㅌ데일리삭제',
                     value='데일리서비스에서 자신의 가입정보를 삭제해요',
                     inline=False)
        e6.set_footer(text='[ 7 / 7 ]')

        es = [e, e1, e2, e3, e4, e5, e6]
        print(e1.to_dict())
        msg = await ctx.send(embed=e)
        page = Paginator(self.app,
                         msg,
                         embeds=es,
                         only=ctx.author,
                         use_more=True)
        await page.start()
Пример #29
0
    async def list(self, ctx, *, arg: str = None):
        anilistpath = "musicbot/anilist"

        # 파일 목록
        files = []
        for file in os.listdir(anilistpath):
            if file.endswith(".txt"):
                files.append(file.replace(".txt", ""))
        # 정렬
        file = sorted(files)
        # 재생목록 총 개수
        if arg == "-a":
            embed=discord.Embed(title=get_lan(ctx.author.id, "music_len_list"), description=get_lan(ctx.author.id, "music_len_list").format(files_len=len(files)), color=self.normal_color)
            embed.set_footer(text=BOT_NAME_TAG_VER)
            return await ctx.send(embed=embed)

        if arg is None:
            arg = 1

        try:
            arg1 = int(arg)

        # 리스트 재생
        except ValueError:
            embed=discord.Embed(title=get_lan(ctx.author.id, "music_list_finding"), color=self.normal_color)
            embed.set_footer(text=BOT_NAME_TAG_VER)
            playmsg = await ctx.send(embed=embed)

            try:
                f = open(f"{anilistpath}/{arg}.txt", 'r')
                list_str = f.read()
                f.close()

            except Exception:
                embed=discord.Embed(title=get_lan(ctx.author.id, "music_list_can_not_find"), description=arg, color=self.normal_color)
                embed.set_footer(text=BOT_NAME_TAG_VER)
                return await playmsg.edit(embed=embed)

            player = self.bot.lavalink.player_manager.get(ctx.guild.id)
            music_list = list_str.split('\n')
            passmusic = get_lan(ctx.author.id, "music_none")
            playmusic = get_lan(ctx.author.id, "music_none")
            trackcount = 0

            loading_dot_count = 0
            for music in music_list:
                if not music == "":
                    # ... 개수 변경
                    loading_dot = ""
                    loading_dot_count += 1
                    if loading_dot_count == 4:
                        loading_dot_count = 1
                    for a in range(0, loading_dot_count):
                        loading_dot = loading_dot + "."

                    embed=discord.Embed(title=get_lan(ctx.author.id, "music_adding_music").format(loading_dot=loading_dot), description=music, color=self.normal_color)
                    embed.set_footer(text=BOT_NAME_TAG_VER)
                    await playmsg.edit(embed=embed)

                    query = music.strip('<>')
                    if not url_rx.match(query):
                        query = f'ytsearch:{query}'

                    nofind = 0
                    while True:
                        results = await player.node.get_tracks(query)
                        if results['loadType'] == 'PLAYLIST_LOADED' or not results or not results['tracks']:
                            if nofind < 3:
                                nofind += 1
                            elif nofind == 3:
                                if passmusic == get_lan(ctx.author.id, "music_none"):
                                    passmusic = music
                                else:
                                    passmusic = f"{passmusic}\n{music}"
                        else:
                            break

                    track = results['tracks'][0]
                    if playmusic == get_lan(ctx.author.id, "music_none"):
                        playmusic = music
                    else:
                        playmusic = f"{playmusic}\n{music}"
                    if trackcount != 1:
                        info = track['info']
                        trackcount = 1
                    track = lavalink.models.AudioTrack(track, ctx.author.id, recommended=True)
                    player.add(requester=ctx.author.id, track=track)

            embed=discord.Embed(title=get_lan(ctx.author.id, "music_play_music"), description='', color=self.normal_color)
            embed.add_field(name=get_lan(ctx.author.id, "music_played_music"), value = playmusic, inline=False)
            embed.add_field(name=get_lan(ctx.author.id, "music_can_not_find_music"), value = passmusic, inline=False)
            embed.set_thumbnail(url="http://img.youtube.com/vi/%s/0.jpg" %(info['identifier']))
            embed.set_footer(text=BOT_NAME_TAG_VER)
            await playmsg.edit(embed=embed)
            if not player.is_playing:
                await player.play()

        # 리스트 목록
        else:
            # 총 리스트 수가 10 이하일 경우
            if len(file) <= 10:
                embed=discord.Embed(title=get_lan(ctx.author.id, "music_playlist_list"), description="\n".join(file), color=color_code)
                embed.set_footer(text=BOT_NAME_TAG_VER)
                return await playmsg.edit(embed=embed)

            # 총 페이지수 계산
            allpage = math.ceil(len(file) / 15)

            embeds = []
            chack = False
            for i in range(1, allpage+1):
                filelist = ""
                numb = (15 * i)
                numa = numb - 15
                for a in range(numa, numb):
                    try:
                        filelist = filelist + f"{file[a]}\n"
                    except IndexError:
                        break
                embed1 = discord.Embed(title=get_lan(ctx.author.id, "music_playlist_list"), description=filelist, color=color_code)
                embed1.set_footer(text=f"{get_lan(ctx.author.id, 'music_page')} {str(i)}/{str(allpage)}\n{BOT_NAME_TAG_VER}")
                if not chack:
                    msg = await ctx.send(embed=embed1)
                    chack = True
                embeds.append(embed1)

            page = Paginator(bot=self.bot, message=msg, embeds=embeds, use_extend=True)
            await page.start()