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()
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()
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")
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()
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()
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()
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()
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()
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()
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)
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()
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()
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()
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")
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
async def text_pagination(ctx): msg = await ctx.send("페이지1") contents = ["페이지1", "페이지2", "페이지3"] page = Paginator(bot, msg, contents=contents) await page.start()
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초입니다.")
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()
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()
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()