async def help(self, ctx, *, command=None): """Shows the help message.""" prefix = (await self.bot.get_prefix(ctx.message))[2] if command: em = self.format_command_help(command, prefix) if em: return await ctx.send(embed=em) else: return await ctx.send( 'Could not find a cog or command by that name.') pages = [] for name, cog in sorted(self.bot.cogs.items()): em = self.format_cog_help(name, cog, prefix) pages.append(em) p_session = PaginatorSession( ctx, footer_text= f'Type {prefix}help command for more info on a command.', pages=pages) await p_session.run()
async def paginate(self, ctx): embeds = [] for x in range(10): em = discord.Embed(title=f'Page: {x+1}', description='hello' * x) embeds.append(em) session = PaginatorSession(ctx, pages=embeds) await session.run()
async def fnmatches(self, ctx, plat=None, name=None): '''Get a player's most recent matches.''' await ctx.trigger_typing() if plat is None and name is None: # connect to db plat = await self.get_plat(str(ctx.author.id)) name = await self.get_name(str(ctx.author.id)) if plat is None or name is None: return await ctx.send( f'Use `{ctx.prefix}fnsave <plat> <name>` to save a profile.' ) else: if plat is None or name is None: return await ctx.send( "Please specify a username as well as the platform.") if plat not in ['psn', 'xbl', 'pc']: return await ctx.send("Invalid platform.") try: player = await self.client.get_player(plat, name) except Exception as e: return await ctx.send(f'Error {e.code}: {e.error}') try: matches = player.recent_matches except Exception as e: return await ctx.send('This player has no recent matches.') modes = {'p2': 'Solos', 'p10': 'Duos', 'p9': 'Squads'} pages = [] for index, match in enumerate(matches): em = discord.Embed(color=discord.Color.green()) em.title = f'{player.epic_user_handle}- Match {index + 1}/{len(matches)}' em.description = 'Platform: ' + player.platform_name_long em.set_thumbnail( url= 'https://pbs.twimg.com/profile_images/872808170225270784/_ccP8lTm_400x400.jpg' ) em.add_field(name='Match ID', value=str(match.id)) em.add_field(name='Mode', value=modes[match.playlist]) em.add_field(name='Minutes Played', value=str(match.minutes_played)) em.add_field(name='Kills', value=str(match.kills)) pages.append(em) p_session = PaginatorSession( ctx, footer=f'Stats made by Cree-Py | Powered by fortnitetracker.com', pages=pages) await p_session.run()
async def topclans(self, ctx): '''Returns the global top 50 clans.''' await ctx.trigger_typing() try: clans = await self.cr.get_top_clans() except errors.ServerError as e: er = discord.Embed(title=f'Error {e.code}', color=discord.Color.red(), description=e.error) await ctx.send(embed=er) else: ems = await embeds.format_top_clans(ctx, clans) session = PaginatorSession(ctx=ctx, pages=ems) await session.run()
async def paginate(self, ctx): pages = [] embed = discord.Embed(color=0xf1c40f) embed.title = "page 1" embed.description = "lol" pages.append(embed) embed = discord.Embed(color=0xf1c40f) embed.title = "page 1" embed.description = "lol2" pages.append(embed) p_session = PaginatorSession(ctx, footer=f'pagination test', pages=pages) await p_session.run()
async def cocprofile(self, ctx, *, tag_or_user: TagCheck = None): '''Gets the Clash of Clans profile of a player.''' tag = await self.resolve_tag(ctx, tag_or_user) await ctx.trigger_typing() try: async with self.session.get( f"https://api.clashofclans.com/v1/players/%23{tag}") as p: profile = await p.json() except Exception as e: return await ctx.send(f'`{e}`') else: ems = await embeds_coc.format_profile(ctx, profile) session = PaginatorSession( ctx=ctx, pages=ems, footer_text='Statsy | Powered by the COC API') await session.run()
async def cocclan(self, ctx, *, tag_or_user: TagCheck = None): '''Gets a clan by tag or by profile. (tagging the user)''' tag = await self.resolve_tag(ctx, tag_or_user, clan=True) await ctx.trigger_typing() try: async with self.session.get( f"https://api.clashofclans.com/v1/clans/%23{tag}") as c: clan = await c.json() except Exception as e: return await ctx.send(f'`{e}`') else: ems = await embeds_coc.format_clan(ctx, clan) session = PaginatorSession( ctx=ctx, pages=ems, footer_text='Statsy | Powered by the COC API') await session.run()
async def clan(self, ctx, *, tag_or_user: TagCheck = None): '''Gets a clan by tag or by profile. (tagging the user)''' tag = await self.resolve_tag(ctx, tag_or_user, clan=True) await ctx.trigger_typing() try: clan = await self.cr.get_clan(tag) except errors.ServerError as e: er = discord.Embed(title=f'Error {e.code}', color=discord.Color.red(), description=e.error) await ctx.send(embed=er) except errors.NotFoundError: await ctx.send('Thae tag cannot be found!') else: ems = await embeds.format_clan(ctx, clan) session = PaginatorSession(ctx=ctx, pages=ems) await session.run()
async def cocmembers(self, ctx, *, tag_or_user: TagCheck = None): '''Gets all the members of a clan.''' tag = await self.resolve_tag(ctx, tag_or_user, clan=True) await ctx.trigger_typing() try: async with self.session.get( f"https://api.clashofclans.com/v1/clans/%23{tag}") as c: clan = await c.json() except Exception as e: return await ctx.send(f'`{e}`') else: ems = await embeds_coc.format_members(ctx, clan) if len(ems) > 1: session = PaginatorSession( ctx=ctx, pages=ems, footer_text=f'{clan["members"]}/50 members') await session.run() else: await ctx.send(embed=ems[0])
async def help(ctx, *, command: str = None): '''Shows this message''' if command is not None: command = command.title() aliases = { 'clash of clans': 'Clash_of_Clans', 'coc': 'Clash_of_Clans', 'cr': 'Clash_Royale', 'Clash Of Clans': 'Clash_of_Clans', 'utils': 'Utility' } if command.lower() in aliases.keys(): command = aliases[command] cog = bot.get_cog(command.replace(' ', '_')) cmd = bot.get_command(command) if cog is not None: em = format_cog_help(ctx, cog) elif cmd is not None: em = format_command_help(ctx, cmd) else: await ctx.send('No commands found.') return await ctx.send(embed=em) pages = [] for cog in bot.cogs.values(): em = format_cog_help(ctx, cog) pages.append(em) em = format_bot_help(ctx) pages.append(em) p_session = PaginatorSession( ctx, footer=f'Type {ctx.prefix}help command for more info on a command.', pages=pages) await p_session.run()
async def ovprofile(self, ctx, region, *, tag_or_user: TagCheck = None): '''Gets the Overwatch profile of a player.''' tag = await self.resolve_tag(ctx, tag_or_user) region = region.lower() tag = tag.replace('#', '-') region_aliases = {'korea': 'kr', 'america': 'us', 'europe': 'eu'} if region in region_aliases: region = region_aliases[region] regions = ['kr', 'us', 'eu'] if region not in regions: return await ctx.send('Please enter a correct region!') await ctx.trigger_typing() try: async with self.session.get( f"https://owapi.net/api/v3/u/{tag}/stats") as p: profile = await p.json() except Exception as e: return await ctx.send(f'`{e}`') else: try: ems = await embeds_ov.format_profile(ctx, tag.split('-')[0], profile[region]['stats']) except Exception as e: print(e) ems = [ discord.Embed( color=embeds_ov.random_color(), description="There aren't any stats for this region!") ] if len(ems) > 1: session = PaginatorSession(ctx=ctx, pages=ems) await session.run() else: await ctx.send(embed=ems[0])
async def members(self, ctx, *, tag_or_user: TagCheck = None): '''Gets all the members of a clan.''' tag = await self.resolve_tag(ctx, tag_or_user, clan=True) await ctx.trigger_typing() try: clan = await self.cr.get_clan(tag) except errors.ServerError as e: er = discord.Embed(title=f'Error {e.code}', color=discord.Color.red(), description=e.error) await ctx.send(embed=em) except errors.NotFoundError: await ctx.send('Thae tag cannot be found!') else: ems = await embeds.format_members(ctx, clan) if len(ems) > 1: session = PaginatorSession( ctx=ctx, pages=ems, footer_text=f'{len(clan.members)}/50 members') await session.run() else: await ctx.send(embed=ems[0])
async def seasons(self, ctx, *, tag_or_user: TagCheck = None): '''Gets the season results a player.''' tag = await self.resolve_tag(ctx, tag_or_user) await ctx.trigger_typing() try: profile = await self.cr.get_profile(tag) except errors.ServerError as e: er = discord.Embed(title=f'Error {e.code}', color=discord.Color.red(), description=e.error) await ctx.send(embed=er) except errors.NotFoundError: await ctx.send('Thae tag cannot be found!') else: ems = await embeds.format_seasons(ctx, profile) if len(ems) > 0: session = PaginatorSession(ctx=ctx, pages=ems, footer_text=f'{len(ems)} seasons') await session.run() else: await ctx.send( f"**{profile.name}** doesn't have any season results.")
async def bsband(self, ctx, id=None): '''Get a brawl stars band's stats''' def get_attr(type: str, attr: str): return soup.find(type, class_=attr).text def get_all_attrs(type: str, attr: str): return soup.find_all(type, class_=attr) await ctx.trigger_typing() if not id: id = await self.get_tag(str(ctx.message.author.id)) id = id.strip('#').replace('O', '0') if id == 'None': return await ctx.send( f'Please save your player tag using `{ctx.prefix}bs save <tag>`' ) else: id = await self.get_tag(str(ctx.author.id)) if self.check_tag(id): # get player stats try: async with aiohttp.ClientSession() as session: async with session.get( f'https://brawlstats.io/players/{id}' ) as resp: data = await resp.read() soup = BeautifulSoup(data, 'lxml') except Exception as e: await ctx.send(f'`{e}`') bandtag = get_attr('div', 'band-tag').strip("#") try: async with aiohttp.ClientSession() as session: async with session.get( f'https://brawlstats.io/bands/{bandtag}' ) as resp: data = await resp.read() soup = BeautifulSoup(data, 'lxml') except Exception as e: await ctx.send(f'`{e}`') else: success = True else: return await ctx.send("You have an invalid tag.") else: id = id.strip('#').replace('O', '0') if self.check_tag(id): bandtag = id.strip('#') try: async with aiohttp.ClientSession() as session: async with session.get( f'https://brawlstats.io/bands/{bandtag}' ) as resp: data = await resp.read() soup = BeautifulSoup(data, 'lxml') except Exception as e: await ctx.send(f'`{e}`') else: success = True else: await ctx.send( "Invalid tag. Tags can only contain the following characters: `0289PYLQGRJCUV`" ) if success: pages = [] name = str(get_attr('div', 'name')) desc = str(get_attr('div', 'clan-description')) trophies = get_all_attrs('div', 'trophies')[0].text required = get_all_attrs('div', 'trophies')[1].text n = 1 r = 0 t = 0 info = [] for i in range(4): player = {} player['name'] = get_all_attrs('div', 'name')[n].text player['role'] = get_all_attrs('div', 'clan')[r].text player['trophies'] = get_all_attrs('div', 'trophy-count')[t].text info.append(player) n += 1 r += 1 t += 1 source = str(get_all_attrs('div', 'badge')) src = source.split('src="')[1] url = src.split('" w')[0] imgpath = url.split('"')[0] em = discord.Embed(color=discord.Color.green()) em.title = f'{name} (#{bandtag})' em.description = desc em.set_thumbnail(url=f'https://brawlstats.io{imgpath}') em.add_field(name="Total trophies", value=trophies) em.add_field(name="Required trophies", value=required) em.set_footer(icon_url='http://brawlstats.io/images/bs-stats.png') pages.append(em) em = discord.Embed(color=discord.Color.green()) em.title = "Top members" em.description = "This is calculated through total trophy count." em.set_thumbnail(url=f'https://brawlstats.io{imgpath}') em.set_footer(icon_url='http://brawlstats.io/images/bs-stats.png') for entry in info: em.add_field( name=entry['name'], value= f"{entry['role'].replace(' ', '-')}\n{entry['trophies']}") pages.append(em) p_session = PaginatorSession( ctx, footer=f'Stats made by Cree-Py | Powered by brawlstats', pages=pages) await p_session.run()
async def bsevents(self, ctx, when=None): '''Information about events.''' url = 'https://brawlstats.io/events/' def get_attr(type: str, attr: str): return soup.find(type, class_=attr).text def get_all_attrs(type: str, attr: str): return soup.find_all(type, class_=attr) now = datetime.datetime.now(pytz.UTC) now = now.astimezone(pytz.timezone("US/Pacific")) dayofwk = int(now.weekday()) + 1 async with aiohttp.ClientSession() as session: async with session.get(url) as resp: data = await resp.read() soup = BeautifulSoup(data, 'lxml') if when not in ('current', 'upcoming', 'both'): return await ctx.send( f'Usage: `{ctx.prefix}bsevents <current|upcoming|both>`') if when == "current": await ctx.trigger_typing() em = discord.Embed(color=discord.Color.green()) em.set_footer(text='Stats made by Cree-Py | Powered by brawlstats', icon_url='http://brawlstats.io/images/bs-stats.png') if dayofwk in [1, 2, 3, 4, 5]: em.title = "Current events" j = 0 for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i].text) + '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i].text), value=val) await ctx.send(embed=em) else: em = discord.Embed(color=discord.Color.green()) em.set_footer( text='Stats made by Cree-Py | Powered by brawlstats', icon_url='http://brawlstats.io/images/bs-stats.png') em.title = "Current events" j = 0 for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i].text) + '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[3].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[3].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') await ctx.send(embed=em) elif when == "upcoming": await ctx.trigger_typing() em = discord.Embed(color=discord.Color.green()) em.set_footer(text='Stats made by Cree-Py | Powered by brawlstats', icon_url='http://brawlstats.io/images/bs-stats.png') j = 6 if dayofwk in [1, 2, 3, 4, 5]: em.title = "Upcoming events" for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i + 3].text) val += '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i + 3].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[6].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[6].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') await ctx.send(embed=em) else: em.title = "Upcoming events" for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i + 4].text) val += '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i + 4].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[7].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[7].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') await ctx.send(embed=em) elif when == "both": em = discord.Embed(color=discord.Color.green()) em.set_footer(icon_url='http://brawlstats.io/images/bs-stats.png') pages = [] await ctx.trigger_typing() if dayofwk in [1, 2, 3, 4, 5]: em.title = "Current events" j = 0 for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i].text) + '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i].text), value=val) pages.append(em) em = discord.Embed(color=discord.Color.green()) em.set_footer( icon_url='http://brawlstats.io/images/bs-stats.png') em.title = "Upcoming events" for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i + 3].text) val += '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i + 3].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[6].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[6].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') pages.append(em) p_session = PaginatorSession( ctx, footer='Stats made by Cree-Py | Powered by brawlstats', pages=pages) await p_session.run() else: em = discord.Embed(color=discord.Color.green()) em.set_footer( icon_url='http://brawlstats.io/images/bs-stats.png') em.title = "Current events" j = 0 for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i].text) + '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[3].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[3].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') pages.append(em) em = discord.Embed(color=discord.Color.green()) em.set_footer( icon_url='http://brawlstats.io/images/bs-stats.png') em.title = "Upcoming events" for i in range(3): val = str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[i + 4].text) val += '\n' val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins\n' j += 1 val += str(get_all_attrs('div', 'card-map-coins')[j].text) val += ' Coins' j += 1 em.add_field(name=str( get_all_attrs('h4', 'card-title')[i + 4].text), value=val) em.add_field( name=str(get_all_attrs('h4', 'card-title')[7].text), value=str( get_all_attrs( 'h6', 'card-subtitle mb-2 text-muted')[7].text) + '\n' + str(get_attr('div', 'card-map-tickets')) + ' Tickets') pages.append(em) p_session = PaginatorSession( ctx, footer='Stats made by Cree-Py | Powered by brawlstats', pages=pages) await p_session.run()
async def pokeinfo(self, ctx, pokemon): '''Get stats about a pokemon. You can specify either its pokedex number or name.''' await ctx.trigger_typing() pages = [] try: async with aiohttp.ClientSession() as session: async with session.get(f'https://pokeapi.co/api/v2/pokemon/{pokemon}/') as resp: data = await resp.json() id = data['id'] pokemonname = data['name'] em = discord.Embed(color=discord.Color.green()) em.title = data['name'].title() em.set_thumbnail(url=data['sprites']['front_default']) em.add_field(name="Height", value=str(data['height'] / 10) + ' meters') em.add_field(name="Weight", value=str(data['weight'] / 10) + ' kilograms') j = 0 abilities = "" for i in range(len(data['abilities'])): abilities += data['abilities'][i]['ability']['name'].title().replace('-', ' ') + "\n" j += 1 if j == 1: em.add_field(name="Ability", value=abilities) else: em.add_field(name="Abilities", value=abilities) types = "" j = 0 for i in range(len(data['types'])): types += data['types'][i]['type']['name'].title().replace('-', ' ') + "\n" j += 1 if j == 1: em.add_field(name="Type", value=types) else: em.add_field(name="Types", value=types) for i in range(len(data['stats'])): name = data['stats'][i]['stat']['name'].title().replace('-', ' ') if name == "Hp": name = "HP" em.add_field(name=name, value=data['stats'][i]['base_stat']) async with aiohttp.ClientSession() as session: async with session.get('https://pokeapi.co/api/v2/pokedex/national/') as resp: data = await resp.json() pokedex = data['pokemon_entries'][id - 1]['pokemon_species']['url'] async with aiohttp.ClientSession() as session: async with session.get(pokedex) as resp: data = await resp.json() for i in range(len(data['flavor_text_entries'])): if data['flavor_text_entries'][i]['language']['name'] == "en": description = data['flavor_text_entries'][i]['flavor_text'] break em.description = description pages.append(em) async with aiohttp.ClientSession() as session: async with session.get(f'https://pokeapi.co/api/v2/pokemon/{pokemon}/') as resp: data = await resp.json() moves = "" for i in range(len(data['moves'])): if not i == 0: moves += ", " if len(moves) < 1024: moves += data['moves'][i]['move']['name'].title().replace('-', ' ') else: moves = "Sorry, this pokemon knows too many moves to be displayed within this embed." em = discord.Embed(color=discord.Color.green()) em.add_field(name="Learnable Moves", value=moves) em.set_thumbnail(url=data['sprites']['back_default']) pages.append(em) em = discord.Embed(color=discord.Color.green()) em.set_image(url=f'https://raw.githubusercontent.com/110Percent/beheeyem-data/master/gifs/{pokemonname}.gif') em.title = pokemonname.title() p_session = PaginatorSession(ctx, pages=pages) await p_session.run() except Exception as e: await ctx.send("That is not a valid pokemon name or pokedex number. Please check your spelling or note that no Gen 7 pokemon are included in pokeapi.") await ctx.send(e)
async def random(self, ctx): '''Get stats about a random pokemon.''' await ctx.trigger_typing() num = random.randint(1, 721) pages = [] async with aiohttp.ClientSession() as session: async with session.get( f'https://pokeapi.co/api/v2/pokemon/{num}/') as resp: data = await resp.json() id = data['id'] em = discord.Embed(color=discord.Color.green()) em.title = data['name'].title() em.set_thumbnail(url=data['sprites']['front_default']) em.add_field(name="Height", value=str(data['height'] / 10) + ' meters') em.add_field(name="Weight", value=str(data['weight'] / 10) + ' kilograms') j = 0 abilities = "" for i in range(len(data['abilities'])): abilities += data['abilities'][i]['ability']['name'].title( ).replace('-', ' ') + "\n" j += 1 if j == 1: em.add_field(name="Ability", value=abilities) else: em.add_field(name="Abilities", value=abilities) types = "" j = 0 for i in range(len(data['types'])): types += data['types'][i]['type']['name'].title().replace( '-', ' ') + "\n" j += 1 if j == 1: em.add_field(name="Type", value=types) else: em.add_field(name="Types", value=types) for i in range(len(data['stats'])): name = data['stats'][i]['stat']['name'].title().replace( '-', ' ') if name == "Hp": name = "HP" em.add_field(name=name, value=data['stats'][i]['base_stat']) async with aiohttp.ClientSession() as session: async with session.get( 'https://pokeapi.co/api/v2/pokedex/national/') as resp: data = await resp.json() pokedex = data['pokemon_entries'][id - 1]['pokemon_species']['url'] async with aiohttp.ClientSession() as session: async with session.get(pokedex) as resp: data = await resp.json() for i in range(len(data['flavor_text_entries'])): if data['flavor_text_entries'][i]['language'][ 'name'] == "en": description = data['flavor_text_entries'][i][ 'flavor_text'] break else: pass em.description = description pages.append(em) async with aiohttp.ClientSession() as session: async with session.get( f'https://pokeapi.co/api/v2/pokemon/{num}/') as resp: data = await resp.json() moves = "" tooMany = False for i in range(len(data['moves'])): if not i == 0: moves += ", " if len(moves) < 1024: moves += data['moves'][i]['move']['name'].title( ).replace('-', ' ') else: tooMany = True if tooMany: moves = "Sorry, this pokemon knows too many moves to be displayed within this embed." em = discord.Embed(color=discord.Color.green()) em.add_field(name="Learnable Moves", value=moves) em.set_thumbnail(url=data['sprites']['back_default']) pages.append(em) p_session = PaginatorSession(ctx, pages=pages) await p_session.run()
async def fnprofile(self, ctx, plat=None, name=None): '''Get your fortnite stats.''' await ctx.trigger_typing() if plat is None and name is None: # connect to db plat = await self.get_plat(str(ctx.author.id)) name = await self.get_name(str(ctx.author.id)) if plat is None or name is None: return await ctx.send( f'Use `{ctx.prefix}fnsave <plat> <name>` to save a profile.' ) else: if plat is None or name is None: return await ctx.send( "Please specify a username as well as the platform.") if plat not in ['psn', 'xbl', 'pc']: return await ctx.send("Invalid platform.") hasSolos = True hasDuos = True hasSquads = True hasLifetime = True try: player = await self.client.get_player(plat, name) except Exception as e: return await ctx.send(f'```py\nError {e.code}: {e.error}\n```') try: solos = await player.get_solos() except Exception as e: hasSolos = False try: duos = await player.get_duos() except Exception as e: hasDuos = False try: squads = await player.get_squads() except Exception as e: hasSquads = False try: lifetime = await player.get_lifetime_stats() except Exception as e: hasLifetime = False pages = [] if hasLifetime: em = discord.Embed(color=discord.Color.green()) em.title = player.epic_user_handle + '- Lifetime Stats' em.description = 'Platform: ' + player.platform_name_long em.add_field(name='Wins (%)', value=f'{lifetime[8].value} ({lifetime[9] .value})') em.add_field(name='Top 5', value=lifetime[1].value) em.add_field(name='Top 12', value=lifetime[4].value) em.add_field(name='Score', value=lifetime[6].value) em.add_field(name='Matches Played', value=lifetime[7].value) em.add_field(name='Time Played', value=lifetime[13].value) em.add_field(name='Kills', value=lifetime[10].value) em.add_field(name='Kill/Death Ratio', value=lifetime[11].value) em.add_field(name='Kills/Min', value=lifetime[12].value) pages.append(em) if hasSolos: em = discord.Embed(color=discord.Color.green()) em.title = player.epic_user_handle + '- Solos' em.description = f'Platform: {player.platform_name_long}' em.add_field(name="Victory Royales", value=solos.top1.value) em.add_field(name='Top 10', value=solos.top10.value) em.add_field(name='Top 25', value=solos.top25.value) em.add_field(name="Score", value=solos.score.value) em.add_field( name="TRN Rating", value= f'[{solos.trn_rating.display_value}](https://fortnitetracker.com/article/23/trn-rating-you)' ) em.add_field(name="K/D", value=solos.kd.value) em.add_field(name="Kills", value=solos.kills.value) em.add_field(name="Kills per Minute", value=solos.kpm.value) em.add_field(name="Kills per Match", value=solos.kpg.value) em.add_field(name="Matches Played", value=solos.matches.value) em.add_field(name="Minutes Played", value=solos.minutes_played.display_value) em.add_field(name="Average Match Time", value=solos.avg_time_played.display_value) pages.append(em) if hasDuos: em = discord.Embed(color=discord.Color.green()) em.title = player.epic_user_handle + '- Duos' em.description = f'Platform: {player.platform_name_long}' em.add_field(name="Victory Royales", value=duos.top1.value) em.add_field(name='Top 5', value=duos.top5.value) em.add_field(name='Top 10', value=duos.top10.value) em.add_field(name="Score", value=duos.score.value) em.add_field( name="TRN Rating", value= f'[{duos.trn_rating.display_value}](https://fortnitetracker.com/article/23/trn-rating-you)' ) em.add_field(name="K/D", value=duos.kd.value) em.add_field(name="Kills", value=duos.kills.value) em.add_field(name="Kills per Minute", value=duos.kpm.value) em.add_field(name="Kills per Match", value=duos.kpg.value) em.add_field(name="Matches Played", value=duos.matches.value) em.add_field(name="Minutes Played", value=duos.minutes_played.display_value) em.add_field(name="Average Match Time", value=duos.avg_time_played.display_value) pages.append(em) if hasSquads: em = discord.Embed(color=discord.Color.green()) em.title = player.epic_user_handle + '- Squads' em.description = f'Platform: {player.platform_name_long}' em.add_field(name="Victory Royales", value=squads.top1.value) em.add_field(name='Top 3', value=squads.top3.value) em.add_field(name='Top 6', value=squads.top6.value) em.add_field(name="Score", value=squads.score.value) em.add_field( name="TRN Rating", value= f'[{squads.trn_rating.display_value}](https://fortnitetracker.com/article/23/trn-rating-you)' ) em.add_field(name="K/D", value=squads.kd.value) em.add_field(name="Kills", value=squads.kills.value) em.add_field(name="Kills per Minute", value=squads.kpm.value) em.add_field(name="Kills per Match", value=squads.kpg.value) em.add_field(name="Matches Played", value=squads.matches.value) em.add_field(name="Minutes Played", value=squads.minutes_played.display_value) em.add_field(name="Average Match Time", value=squads.avg_time_played.display_value) pages.append(em) p_session = PaginatorSession( ctx, footer=f'Stats made by Cree-Py | Powered by fortnitetracker.com', pages=pages) await p_session.run()
async def fnprofile(self, ctx, name=None, *, plat=None): '''Get stats for your fortnite account !''' pages = [] client = pynite.Client('5a20baea-b8a7-4e42-9de3-741534219452') player = await client.get_player(plat, name) lifetime = await player.get_lifetime_stats() solo = await player.get_solos() duos = await player.get_duos() squads = await player.get_squads() if plat is None: plat = 'pc' if name is None: return await ctx.send("Please specify a username as well as the platform (defaults to pc if not specified).") if plat not in ['psn', 'xbl', 'pc']: return await ctx.send("Invalid platform, platforms are {psn, xbl, pc}.") embed = discord.Embed(color=discord.Color.blue()) embed.title = 'Name: ' + player.epic_user_handle + ' - LifeTime stats' embed.description = 'Platform: ' + player.platform_name_long embed.add_field(name=lifetime[9].key, value=lifetime[9].value) embed.add_field(name=lifetime[1].key, value=lifetime[1].value) embed.add_field(name=lifetime[4].key, value=lifetime[4].value) embed.add_field(name=lifetime[6].key, value=lifetime[6].value) embed.add_field(name=lifetime[7].key, value=lifetime[7].value) embed.add_field(name=lifetime[13].key, value=lifetime[13].value) embed.add_field(name=lifetime[10].key, value=lifetime[10].value) embed.add_field(name=lifetime[11].key, value=lifetime[11].value) embed.add_field(name=lifetime[12].key, value=lifetime[12].value) pages.append(embed) embed = discord.Embed(color=discord.Color.blue()) embed.title = 'Name: ' + player.epic_user_handle + ' - Solo Stats' embed.description = 'Platform: ' + player.platform_name_long embed.add_field(name='Victory Royales', value=solo.top1.value) embed.add_field(name='Top 10', value=solo.top10.value) embed.add_field(name='Score', value=solo.score.value) embed.add_field(name='K/D', value=solo.kd.value) embed.add_field(name='Kills', value=solo.kills.value) embed.add_field(name='Average kills per match', value=solo.kpg.value) embed.add_field(name='Matches Played', value=solo.matches.value) pages.append(embed) embed = discord.Embed(color=discord.Color.blue()) embed.title = 'Name: ' + player.epic_user_handle + ' - Duo Stats' embed.description = 'Platform: ' + player.platform_name_long embed.add_field(name='Victory Royales', value=solo.top1.value) embed.add_field(name='Top 10', value=duos.top10.value) embed.add_field(name='Score', value=duos.score.value) embed.add_field(name='K/D', value=duos.kd.value) embed.add_field(name='Kills', value=duos.kills.value) embed.add_field(name='Average kills per match', value=duos.kpg.value) embed.add_field(name='Matches Played', value=duos.matches.value) pages.append(embed) embed = discord.Embed(color=discord.Color.blue()) embed.title = 'Name: ' + player.epic_user_handle + ' - Squad Stats' embed.description = 'Platform: ' + player.platform_name_long embed.add_field(name='Victory Royales', value=solo.top1.value) embed.add_field(name='Top 10', value=squads.top10.value) embed.add_field(name='Score', value=squads.score.value) embed.add_field(name='K/D', value=squads.kd.value) embed.add_field(name='Kills', value=squads.kills.value) embed.add_field(name='Average kills per match', value=squads.kpg.value) embed.add_field(name='Matches Played', value=squads.matches.value) pages.append(embed) p_session = PaginatorSession(ctx, footer=f'Bot made by Nyan Pikachu#4148 | Powered by fortnitetracker.com', pages=pages) await p_session.run()
async def roleinfo(self, ctx, *, rolename): '''Get information about a role. Case Sensitive!''' try: role = discord.utils.get(ctx.message.guild.roles, name=rolename) except: return await ctx.send( f"Role could not be found. The system IS case sensitive!") em = discord.Embed(description=f'Role ID: {str(role.id)}', color=role.color or discord.Color.green()) em.title = role.name perms = "" if role.permissions.administrator: perms += "Administrator, " if role.permissions.create_instant_invite: perms += "Create Instant Invite, " if role.permissions.kick_members: perms += "Kick Members, " if role.permissions.ban_members: perms += "Ban Members, " if role.permissions.manage_channels: perms += "Manage Channels, " if role.permissions.manage_guild: perms += "Manage Guild, " if role.permissions.add_reactions: perms += "Add Reactions, " if role.permissions.view_audit_log: perms += "View Audit Log, " if role.permissions.read_messages: perms += "Read Messages, " if role.permissions.send_messages: perms += "Send Messages, " if role.permissions.send_tts_messages: perms += "Send TTS Messages, " if role.permissions.manage_messages: perms += "Manage Messages, " if role.permissions.embed_links: perms += "Embed Links, " if role.permissions.attach_files: perms += "Attach Files, " if role.permissions.read_message_history: perms += "Read Message History, " if role.permissions.mention_everyone: perms += "Mention Everyone, " if role.permissions.external_emojis: perms += "Use External Emojis, " if role.permissions.connect: perms += "Connect to Voice, " if role.permissions.speak: perms += "Speak, " if role.permissions.mute_members: perms += "Mute Members, " if role.permissions.deafen_members: perms += "Deafen Members, " if role.permissions.move_members: perms += "Move Members, " if role.permissions.use_voice_activation: perms += "Use Voice Activation, " if role.permissions.change_nickname: perms += "Change Nickname, " if role.permissions.manage_nicknames: perms += "Manage Nicknames, " if role.permissions.manage_roles: perms += "Manage Roles, " if role.permissions.manage_webhooks: perms += "Manage Webhooks, " if role.permissions.manage_emojis: perms += "Manage Emojis, " if perms is None: perms = "None" else: perms = perms.strip(", ") em.add_field(name='Hoisted', value=str(role.hoist)) em.add_field(name='Position from bottom', value=str(role.position)) em.add_field(name='Managed by Integration', value=str(role.managed)) em.add_field(name='Mentionable', value=str(role.mentionable)) em.add_field(name='People in this role', value=str(len(role.members))) pages = [] pages.append(em) em2 = discord.Embed(description=f'Role ID: {str(role.id)}', color=role.color or discord.Color.green()) em2.title = role.name em2.add_field(name='Permissions', value=perms) pages.append(em2) thing = str(role.created_at.__format__('%A, %B %d, %Y')) p_session = PaginatorSession(ctx, footer=f'Created At: {thing}', pages=pages) await p_session.run()
async def paginate(self, ctx): session = PaginatorSession(ctx) for x in range(10): em = discord.Embed(title=f'Page: {x}', description='hello' * x) session.add_page(em) await session.run()