async def _paste_nginx(self, ctx, user: Optional[discord.Member] = None): """ Command to promt the user to send their nginx config """ msg = f"Hey{' ' + user.mention if user else ''}! Please share your nginx config" title = "Hey! Please show your nginx config" txt = "Please post your Nginx config using one of the following methods:\n" \ "**1 -** Using nginx pastebin: <https://paste.nginx.org/>\n" \ "**2 -** Using pastebin: <https://pastebin.com/>\n" \ "**3 -** Using discord markdown, by typing:\n\n" \ "\\```nginx\n" \ "\\<code>\n" \ "\\```\n\n" \ "If you have any includes, like proxy.conf, make sure to post that too.\n" \ "**Make sure to replace server_name to example.com, also remove any WAN-IP addresses. \n" \ "Otherwise the message will be removed by a moderator.**" embed = discord.Embed( title=title, colour=user.colour if user else ctx.author.colour) embed.description = txt embed.add_field(name="Gist", inline=True, value="[GIST](https://gist.github.com/)") embed.add_field(name="Nginx Pastebin", inline=True, value="[Nginx](https://paste.nginx.org/)") embed.add_field(name="Pastebin", inline=True, value="[Pastebin](https://pastebin.com)") if embed.colour.value == 0: embed = randomize_colour(embed=embed) await ctx.send(msg, embed=embed)
def post_embed(data: dict, now: dt) -> discord.Embed: created_at = dt.utcfromtimestamp(data["data"]["created_utc"]) created_at_str = get_delta_str(created_at, now) if data["data"]["link_flair_text"] is not None: title = "[{}] {}".format(data["data"]["link_flair_text"], data["data"]["title"]) else: title = data["data"]["title"] if len(title) > 256: title = title[:252] + "..." if "selftext" in data["data"] and data["data"]["selftext"] != "": desc = data["data"]["selftext"] if len(desc) > 2048: desc = desc[:2044] + "..." else: desc = data["data"]["domain"] em = discord.Embed(title=title, url=data["data"]["url"], description=desc) em = randomize_colour(em) em.add_field(name="Author", value=data["data"]["author"]) em.add_field( name="Created", value="{} ago (at {} UTC)".format( created_at_str, created_at.strftime("%Y-%m-%d %H:%M:%S") ), ) if data["data"]["stickied"]: em.add_field(name="Stickied", value="Yes") else: em.add_field(name="Stickied", value="No") em.add_field(name="Comments", value=str(data["data"]["num_comments"])) return em
async def make_guess_embed(self): embed = discord.Embed( title=_("Hmm... I think I've guessed..."), description=_("Is it {name}? The description is {desc}.").format( name=self.akinator.first_guess["name"], desc=self.akinator.first_guess["description"], ), ) embed = randomize_colour(embed) embed.set_image(url=self.akinator.first_guess["absolute_picture_path"]) embed.set_footer( icon_url=self.user.avatar_url, text=( _("Game running for {name}. I asked over {num} questions! (Cog version {ver})") ).format(name=self.user.name, num=self.count, ver=__version__), ) return embed
async def postjob(self, ctx): author = ctx.author intro = await ctx.send( "Please head over to a DM with me to answer some questions.") await ctx.message.delete(delay=10) await intro.delete(delay=10) jobChannel = self.bot.get_channel(602906639217197085) def check(msg): return msg.channel == author.dm_channel and msg.author == author await author.send("Is this job posting or position opening:") job = (await self.bot.wait_for('message', check=check)).content await author.send("Completion deadline:") deadline = (await self.bot.wait_for('message', check=check)).content await author.send("Availability (who can apply for this job?):") availability = (await self.bot.wait_for('message', check=check)).content await author.send("How should interested people contact you:") contact = (await self.bot.wait_for('message', check=check)).content await author.send("Description of the job:") jobdesc = (await self.bot.wait_for('message', check=check)).content await author.send( f"Done! Your offer was posted in {jobChannel.mention}") embed = discord.Embed(title=job) embed.set_thumbnail(url=author.avatar_url) embed.add_field(name="Posted by:", value=f"{author.mention} ({author.top_role})", inline=False) embed.add_field(name="Date:", value=datetime.now().strftime('%d %b %Y'), inline=False) embed.add_field(name="Completion deadline:", value=deadline, inline=False) embed.add_field(name="Availability:", value=availability, inline=False) embed.add_field(name="How to contact:", value=contact, inline=False) embed.add_field(name="Job description:", value=jobdesc, inline=False) await jobChannel.send(embed=randomize_colour(embed))
async def _user(self, ctx: commands.Context, username: str): """Commands for getting user info""" url = REDDIT_OAUTH_API_ROOT.format("/user/{}/about".format(username)) headers = await self.get_headers() try: resp_json = await make_request(self.session, "GET", url, headers=headers) except NotFoundError as e: await ctx.send(str(e)) return except AccessForbiddenError as e: await ctx.send(str(e)) return except RedditAPIError as e: await ctx.send(str(e)) return resp_json = resp_json["data"] created_at = dt.utcfromtimestamp(resp_json["created_utc"]) desc = "Created at " + created_at.strftime("%m/%d/%Y %H:%M:%S") em = discord.Embed( title=resp_json["name"], url="https://reddit.com/u/" + resp_json["name"], description=desc, ) em = randomize_colour(em) em.add_field(name="Comment karma", value=resp_json["comment_karma"]) em.add_field(name="Link karma", value=resp_json["link_karma"]) if "over_18" in resp_json and resp_json["over_18"]: em.add_field(name="Over 18?", value="Yes") else: em.add_field(name="Over 18?", value="No") if "is_gold" in resp_json and resp_json["is_gold"]: em.add_field(name="Is gold?", value="Yes") else: em.add_field(name="Is gold?", value="No") await ctx.send(embed=em)
async def _f12(self, ctx, user: Optional[discord.Member] = None, *, tab: Optional[str] = "console"): """ Command to promt the user to send the output of their browser-console """ msg = f"Hey{' ' + user.mention if user else ''}! Please post a screenshot"\ ", or the text showing up in your browser-console" title = "Hey! Please show your browser-console" txt = "Press the `f12` key on your keyboard, or `CTRL + SHIFT + I`.\n" \ f"Then switch to the **{tab.lower()}** tab.\n" \ "Paste, or screenshot the contents of the tab" embed = discord.Embed( title=title, colour=user.colour if user else ctx.author.colour) embed.description = txt embed.add_field( name="Chrome", inline=True, value= "[HOW TO](https://developers.google.com/web/tools/chrome-devtools/open)" ) embed.add_field( name="Firefox", inline=True, value= "[HOW TO](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console)" ) embed.add_field( name="Safari", inline=True, value="[HOW TO](https://support.apple.com/guide/safari/" "use-the-developer-tools-in-the-develop-menu-sfri20948/mac)") if embed.colour.value == 0: embed = randomize_colour(embed=embed) await ctx.send(msg, embed=embed)
async def subreddit_info(self, ctx: commands.Context, subreddit: str): """Command for getting subreddit info""" url = REDDIT_OAUTH_API_ROOT.format("/r/{}/about".format(subreddit)) headers = await self.get_headers() try: resp_json = await make_request(self.session, "GET", url, headers=headers) except NotFoundError as e: await ctx.send(str(e)) return except AccessForbiddenError as e: await ctx.send(str(e)) return except RedditAPIError as e: await ctx.send(str(e)) return resp_json = resp_json["data"] created_at = dt.utcfromtimestamp( resp_json["created_utc"]).strftime("%m/%d/%Y %H:%M:%S") em = discord.Embed( title=resp_json["url"], url="https://reddit.com" + resp_json["url"], description=resp_json["header_title"], ) em = randomize_colour(em) em.add_field(name="Title", value=resp_json["title"]) em.add_field(name="Created at", value=created_at) em.add_field(name="Subreddit type", value=resp_json["subreddit_type"]) em.add_field(name="Subscriber count", value=resp_json["subscribers"]) if resp_json["over18"]: em.add_field(name="Over 18?", value="Yes") else: em.add_field(name="Over 18?", value="No") await ctx.send(embed=em)
async def clan(self, ctx, key: Union[discord.Member, str] = None, keyword=None): """View players clan or clan saved in a server""" await ctx.trigger_typing() key = ctx.author if key is None else key if isinstance(key, discord.Member): mtag = await self.config.user(ctx.author).tag() if mtag is None: return await ctx.send(embed=badEmbed( f"This user has no tag saved! Use {ctx.prefix}crsave <tag>" )) try: player = await self.crapi.get_player(mtag) if player.clan is None: return await ctx.send( embed=self.badEmbed("This user is not in a clan!")) tag = player.clan.tag except clashroyale.RequestError as e: return await ctx.send(embed=self.badEmbed( f"CR API is offline, please try again later! ({str(e)})")) elif key.startswith("#"): tag = key.upper().replace('O', '0') else: tag = await self.config.guild(ctx.guild ).clans.get_raw(key.lower(), "tag", default=None) if tag is None: return await ctx.send(embed=self.badEmbed( f"{key.title()} isn't saved clan in this server!")) try: clan = await self.crapi.get_clan(tag) clan = clan.raw_data except clashroyale.NotFoundError: return await ctx.send( embed=self.badEmbed("No clan with this tag found, try again!")) except clashroyale.RequestError as e: return await ctx.send(embed=self.badEmbed( f"CR API is offline, please try again later! ({str(e)})")) if keyword is None: embed = discord.Embed(description=f"```{clan['description']}```") embed.set_author( name=f"{clan['name']} {clan['tag']}", icon_url= f"https://www.deckshop.pro/img/badges/{clan['badgeId']}.png") embed.add_field( name="Members", value=f"<:people:449645181826760734> {clan['members']}/50") embed.add_field( name="Required Trophies", value= f"<:trophycr:587316903001718789> {str(clan['requiredTrophies'])}" ) embed.add_field( name="Score", value=f"<:crstar:449647025999314954> {str(clan['clanScore'])}") embed.add_field( name="Clan War Trophies", value= f"<:cw_trophy:449640114423988234> {str(clan['clanWarTrophies'])}" ) embed.add_field( name="Type", value=f"<:bslock:552560387279814690> {clan['type'].title()}". replace("only", " Only")) embed.add_field(name="Location", value=f":earth_africa: {clan['location']['name']}") embed.add_field( name="Average Donations Per Week", value= f"<:deck:451062749565550602> {str(clan['donationsPerWeek'])}", inline=False) topm = "" for m in clan['memberList'][:5]: topm += f"<:trophycr:587316903001718789> `{m['trophies']}` {m['name']}\n" worstm = "" for m in clan['memberList'][-5:]: worstm += f"<:trophycr:587316903001718789> `{m['trophies']}` {m['name']}\n" embed.add_field(name="Top Members", value=topm, inline=True) embed.add_field(name="Lowest Members", value=worstm, inline=True) return await ctx.send(embed=randomize_colour(embed))
async def crprofile(self, ctx, member: Union[discord.Member, str] = None): """Clash Royale profile""" await ctx.trigger_typing() prefix = "/" tag = "" member = ctx.author if member is None else member if isinstance(member, discord.Member): tag = await self.config.user(member).tag() if tag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}crsave <tag>")) elif isinstance(member, str) and member.startswith("<"): id = member.replace("<", "").replace(">", "").replace("@", "").replace("!", "") try: member = discord.utils.get(ctx.guild.members, id=int(id)) if member is not None: tag = await self.config.user(member).tag() if tag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}crsave <tag>" )) except ValueError: pass elif isinstance(member, str) and member.startswith("#"): tag = member.upper().replace('O', '0') elif isinstance(member, str): try: member = discord.utils.get(ctx.guild.members, id=int(member)) if member is not None: tag = await self.config.user(member).tag() if tag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}crsave <tag>" )) except ValueError: member = discord.utils.get(ctx.guild.members, name=member) if member is not None: tag = await self.config.user(member).tag() if tag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}crsave <tag>" )) if tag is None or tag == "": desc = "/profile\n/profile @user\n/profile discord_name\n/profile discord_id\n/profile #CRTAG" embed = discord.Embed(title="Invalid argument!", colour=discord.Colour.red(), description=desc) return await ctx.send(embed=embed) try: player = await self.crapi.get_player(tag) chests = await self.crapi.get_player_chests(tag) except clashroyale.NotFoundError: return await ctx.send(embed=self.badEmbed( "No player with this tag found, try again!")) except clashroyale.RequestError as e: return await ctx.send(embed=self.badEmbed( f"CR API is offline, please try again later! ({str(e)})")) except Exception as e: return await ctx.send( "**Something went wrong, please send a personal message to LA Modmail bot or try again!****" ) embed = discord.Embed() embed.set_author(name=f"{player.name} {player.tag}", icon_url="https://i.imgur.com/Qs0Ter9.png") embed.add_field( name="Trophies", value=f"<:trophycr:587316903001718789>{player.trophies}") embed.add_field( name="Highest Trophies", value=f"<:nicertrophy:587565339038973963>{player.bestTrophies}") embed.add_field(name="Level", value=f"<:level:451064038420381717>{player.expLevel}") embed.add_field( name="Arena", value=f"<:training:587566327204544512>{player.arena.name}") embed.add_field( name="Star Points", value=f"<:starpoints:737613015242768397>{player.starPoints}") if player.clan is not None: clanbadge = discord.utils.get(self.bot.emojis, name=str(player.clan.badgeId)) embed.add_field(name="Clan", value=f"{clanbadge}{player.clan.name}") embed.add_field( name="Role", value=f"<:social:451063078096994304>{player.role.capitalize()}" ) embed.add_field( name="Total Games Played", value=f"<:swords:449650442033430538>{player.battleCount}") embed.add_field( name="Wins/Losses", value=f"<:starcr:587705837817036821>{player.wins}/{player.losses}") embed.add_field( name="Three Crown Wins", value=f"<:crownblue:449649785528516618>{player.threeCrownWins}") embed.add_field( name="War Day Wins", value=f"<:cw_win:449644364981993475>{player.warDayWins}") embed.add_field( name="Clan Cards Collected", value=f"<:cw_cards:449641339580317707>{player.clanCardsCollected}") embed.add_field( name="Max Challenge Wins", value=f"<:tournament:587706689357217822>{player.challengeMaxWins}") embed.add_field( name="Challenge Cards Won", value=f"<:cardcr:587702597855477770>{player.challengeCardsWon}") embed.add_field( name="Tournament Games Played", value=f"<:swords:449650442033430538>{player.tournamentBattleCount}" ) embed.add_field( name="Tournament Cards Won", value=f"<:cardcr:587702597855477770>{player.tournamentCardsWon}") if player.currentFavouriteCard is not None: embed.add_field( name="Favourite Card", value= f"<:epic:587708123087634457>{player.currentFavouriteCard.name}" ) embed.add_field( name="Total Donations", value=f"<:deck:451062749565550602>{player.totalDonations}") chests_msg = "" i = 0 for chest in chests: emoji = discord.utils.get(self.bot.emojis, name=str(chest.name.lower().replace( " ", ""))) chests_msg += f"{emoji}`{chest.index}`" if i == 8: chests_msg += "X" i += 1 embed.add_field(name="Upcoming Chests", value=chests_msg.split("X")[0], inline=False) embed.add_field(name="Rare Chests", value=chests_msg.split("X")[1], inline=False) await ctx.send(embed=randomize_colour(embed))
async def clans(self, ctx, key: str = None): """View all clans saved in this server""" offline = False prefix = ctx.prefix await ctx.trigger_typing() if key == "forceoffline": offline = True key = None if key is not None and key != "forceoffline": try: if key.startswith("<"): memberid = key.replace("<", "").replace(">", "").replace( "@", "").replace("!", "") member = discord.utils.get(ctx.guild.members, id=int(memberid)) if member is not None: mtag = await self.config.user(member).tag() if mtag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}save <tag>" )) try: player = await self.crapi.get_player(mtag) tag = player.clan.tag except clashroyale.RequestError as e: await ctx.send(embed=self.badEmbed( f"CR API is offline, please try again later! ({str(e)})" )) else: tag = await self.config.guild(ctx.guild ).clans.get_raw(key.lower(), "tag", default=None) if tag is None: return await ctx.send(embed=self.badEmbed( f"{key.title()} isn't saved clan in this server!")) try: clan = await self.crapi.get_clan(tag) clan = clan.raw_data except clashroyale.RequestError as e: await ctx.send(embed=self.badEmbed( f"CR API is offline, please try again later! ({str(e)})" )) return badge = discord.utils.get(self.bot.emojis, name=str(clan['badgeId'])) embed = discord.Embed( title=f"{badge}{clan['name']} ({clan['tag']})", description=f"```{clan['description']}```") embed.add_field( name="Members", value=f"<:people:449645181826760734> {clan['members']}/50") embed.add_field( name="Required Trophies", value= f"<:trophycr:587316903001718789> {str(clan['requiredTrophies'])}" ) embed.add_field( name="Score", value= f"<:crstar:449647025999314954> {str(clan['clanScore'])}") embed.add_field( name="Clan War Trophies", value= f"<:cw_trophy:449640114423988234> {str(clan['clanWarTrophies'])}" ) embed.add_field( name="Type", value=f"<:bslock:552560387279814690> {clan['type'].title()}" .replace("only", " Only")) embed.add_field( name="Location", value=f":earth_africa: {clan['location']['name']}") embed.add_field( name="Average Donations Per Week", value= f"<:deck:451062749565550602> {str(clan['donationsPerWeek'])}" ) return await ctx.send(embed=randomize_colour(embed)) except Exception as e: return await ctx.send( "**Something went wrong, please send a personal message to LA Modmail bot or try again!**" ) if len((await self.config.guild(ctx.guild).clans()).keys()) < 1: return await ctx.send(embed=self.badEmbed( f"This server has no clans saved. Save a clan by using {ctx.prefix}clans add!" )) try: try: clans = [] for key in (await self.config.guild(ctx.guild).clans()).keys(): clan = await self.crapi.get_clan(await self.config.guild( ctx.guild).clans.get_raw(key, "tag")) clans.append(clan.raw_data) except clashroyale.RequestError as e: offline = True embedFields = [] if not offline: clans = sorted(clans, key=lambda sort: (sort['requiredTrophies'], sort['clanScore']), reverse=True) for i in range(len(clans)): cemoji = discord.utils.get(self.bot.emojis, name=str(clans[i]['badgeId'])) key = "" for k in (await self.config.guild(ctx.guild).clans()).keys(): if clans[i]['tag'].replace( "#", "") == await self.config.guild( ctx.guild).clans.get_raw(k, "tag"): key = k await self.config.guild(ctx.guild).clans.set_raw( key, 'lastMemberCount', value=clans[i]['members']) await self.config.guild(ctx.guild).clans.set_raw( key, 'lastRequirement', value=clans[i]['requiredTrophies']) await self.config.guild(ctx.guild).clans.set_raw( key, 'lastScore', value=clans[i]['clanScore']) await self.config.guild(ctx.guild ).clans.set_raw(key, 'lastPosition', value=i) await self.config.guild(ctx.guild).clans.set_raw( key, 'lastBadgeId', value=clans[i]['badgeId']) await self.config.guild(ctx.guild).clans.set_raw( key, 'warTrophies', value=clans[i]['clanWarTrophies']) info = await self.config.guild(ctx.guild ).clans.get_raw(key, "info", default="") e_name = f"{str(cemoji)} {clans[i]['name']} [{key}] ({clans[i]['tag']}) {info}" e_value = f"<:people:449645181826760734>`{clans[i]['members']}` <:trophycr:587316903001718789>`{clans[i]['requiredTrophies']}+` <:crstar:449647025999314954>`{clans[i]['clanScore']}` <:cw_trophy:449640114423988234>`{clans[i]['clanWarTrophies']}`" embedFields.append([e_name, e_value]) else: offclans = [] for k in (await self.config.guild(ctx.guild).clans()).keys(): offclans.append([ await self.config.guild(ctx.guild ).clans.get_raw(k, "lastPosition"), k ]) offclans = sorted(offclans, key=lambda x: x[0]) for clan in offclans: ckey = clan[1] cscore = await self.config.guild(ctx.guild).clans.get_raw( ckey, "lastScore") cname = await self.config.guild(ctx.guild).clans.get_raw( ckey, "name") ctag = await self.config.guild(ctx.guild).clans.get_raw( ckey, "tag") cinfo = await self.config.guild(ctx.guild).clans.get_raw( ckey, "info") cmembers = await self.config.guild( ctx.guild).clans.get_raw(ckey, "lastMemberCount") creq = await self.config.guild(ctx.guild).clans.get_raw( ckey, "lastRequirement") ccw = await self.config.guild(ctx.guild).clans.get_raw( ckey, "warTrophies") cemoji = discord.utils.get( self.bot.emojis, name=str(await self.config.guild(ctx.guild).clans.get_raw( ckey, "lastBadgeId"))) e_name = f"{cemoji} {cname} [{ckey}] (#{ctag}) {cinfo}" e_value = f"<:people:449645181826760734>`{cmembers}` <:trophycr:587316903001718789>`{creq}+` <:crstar:449647025999314954>`{cscore}` <:cw_trophy:449640114423988234>`{ccw}`" embedFields.append([e_name, e_value]) colour = choice([ discord.Colour.green(), discord.Colour.blue(), discord.Colour.purple(), discord.Colour.orange(), discord.Colour.red(), discord.Colour.teal() ]) embedsToSend = [] for i in range(0, len(embedFields), 8): embed = discord.Embed(colour=colour) embed.set_author(name=f"{ctx.guild.name} clans", icon_url=ctx.guild.icon_url) footer = "API is offline, showing last saved data." if offline else f"Do you need more info about a clan? Use {ctx.prefix}clan [key]" embed.set_footer(text=footer) for e in embedFields[i:i + 8]: embed.add_field(name=e[0], value=e[1], inline=False) embedsToSend.append(embed) async def next_page(ctx: commands.Context, pages: list, controls: dict, message: discord.Message, page: int, timeout: float, emoji: str): perms = message.channel.permissions_for(ctx.me) if perms.manage_messages: try: await message.remove_reaction(emoji, ctx.author) except discord.NotFound: pass if page == len(pages) - 1: page = 0 else: page = page + 1 return await menu(ctx, pages, controls, message=message, page=page, timeout=timeout) if len(embedsToSend) > 1: await menu(ctx, embedsToSend, {"➡": next_page}, timeout=300) else: await ctx.send(embed=embedsToSend[0]) except Exception as e: return await ctx.send( "**Something went wrong, please send a personal message to LA Modmail bot or try again!**" )
async def clubs(self, ctx, key: str = None): """View all clubs saved in this server""" offline = False prefix = ctx.prefix await ctx.trigger_typing() if key == "forceoffline": offline = True key = None if key is not None and key != "forceoffline": try: if key.startswith("<"): memberid = key.replace("<", "").replace(">", "").replace( "@", "").replace("!", "") member = discord.utils.get(ctx.guild.members, id=int(memberid)) if member is not None: mtag = await self.config.user(member).tag() if mtag is None: return await ctx.send(embed=self.badEmbed( f"This user has no tag saved! Use {prefix}bssave <tag>" )) try: player = await self.bsapi.get_player(mtag) if not player.club: return await ctx.send( "This user is not in a club!") tag = player.club.tag except brawlstats.errors.RequestError as e: await ctx.send(embed=self.badEmbed( f"BS API is offline, please try again later! ({str(e)})" )) else: tag = await self.config.guild(ctx.guild ).clubs.get_raw(key.lower(), "tag", default=None) if tag is None: return await ctx.send(embed=self.badEmbed( f"{key.title()} isn't saved club in this server!")) try: club = await self.bsapi.get_club(tag) except brawlstats.errors.RequestError as e: await ctx.send(embed=self.badEmbed( f"BS API is offline, please try again later! ({str(e)})" )) return embed = discord.Embed( description=f"```{self.remove_codes(club.description)}```") embed.set_author(name=f"{club.name} #{club.tag}", icon_url=club.badge_url) embed.add_field( name="Total Trophies", value=f"<:bstrophy:552558722770141204> {club.trophies}") embed.add_field( name="Required Trophies", value= f"{self.get_league_emoji(club.required_trophies)} {club.required_trophies}" ) embed.add_field( name="Members", value= f"<:icon_gameroom:553299647729238016> {club.members_count}/100" ) embed.add_field( name="Status", value=f"<:bslock:552560387279814690> {club.status}") topm = "" for i in range(10): try: topm += f"{self.get_league_emoji(club.members[i].trophies)}`{club.members[i].trophies}` {self.remove_codes(club.members[i].name)}\n" except IndexError: pass embed.add_field(name="Top Members", value=topm, inline=False) return await ctx.send(embed=randomize_colour(embed)) except Exception as e: return await ctx.send( "**Something went wrong while displaying club, please send a personal message to LA Modmail bot or try again!**" ) if len((await self.config.guild(ctx.guild).clubs()).keys()) < 1: return await ctx.send(embed=self.badEmbed( f"This server has no clubs saved. Save a club by using {ctx.prefix}clubs add!" )) try: try: clubs = [] for key in (await self.config.guild(ctx.guild).clubs()).keys(): club = await self.bsapi.get_club(await self.config.guild( ctx.guild).clubs.get_raw(key, "tag")) clubs.append(club) await asyncio.sleep(1) except brawlstats.errors.RequestError as e: offline = True embedFields = [] if not offline: clubs = sorted(clubs, key=lambda sort: (sort.trophies), reverse=True) for i in range(len(clubs)): cemoji = "<:bsband:600741378497970177>" key = "" for k in (await self.config.guild(ctx.guild).clubs()).keys(): if clubs[i].tag.replace("#", "") == await self.config.guild( ctx.guild ).clubs.get_raw(k, "tag"): key = k await self.config.guild(ctx.guild).clubs.set_raw( key, 'lastMemberCount', value=clubs[i].members_count) await self.config.guild(ctx.guild).clubs.set_raw( key, 'lastRequirement', value=clubs[i].required_trophies) await self.config.guild(ctx.guild).clubs.set_raw( key, 'lastScore', value=clubs[i].trophies) await self.config.guild(ctx.guild ).clubs.set_raw(key, 'lastPosition', value=i) info = await self.config.guild(ctx.guild ).clubs.get_raw(key, "info", default="") e_name = f"<:bsband:600741378497970177> {clubs[i].name} [{key}] #{clubs[i].tag} {info}" e_value = f"<:bstrophy:552558722770141204>`{clubs[i].trophies}` {self.get_league_emoji(clubs[i].required_trophies)}`{clubs[i].required_trophies}+` <:icon_gameroom:553299647729238016>`{clubs[i].members_count}`" embedFields.append([e_name, e_value]) else: offclubs = [] for k in (await self.config.guild(ctx.guild).clubs()).keys(): offclubs.append([ await self.config.guild(ctx.guild ).clubs.get_raw(k, "lastPosition"), k ]) offclubs = sorted(offclubs, key=lambda x: x[0]) for club in offclubs: ckey = club[1] cscore = await self.config.guild(ctx.guild).clubs.get_raw( ckey, "lastScore") cname = await self.config.guild(ctx.guild).clubs.get_raw( ckey, "name") ctag = await self.config.guild(ctx.guild).clubs.get_raw( ckey, "tag") cinfo = await self.config.guild(ctx.guild).clubs.get_raw( ckey, "info") cmembers = await self.config.guild( ctx.guild).clubs.get_raw(ckey, "lastMemberCount") creq = await self.config.guild(ctx.guild).clubs.get_raw( ckey, "lastRequirement") #cemoji = discord.utils.get(self.bot.emojis, name = str(await self.config.guild(ctx.guild).clans.get_raw(ckey, "lastBadgeId"))) e_name = f"<:bsband:600741378497970177> {cname} [{ckey}] #{ctag} {cinfo}" e_value = f"<:bstrophy:552558722770141204>`{cscore}` {self.get_league_emoji(creq)}`{creq}+` <:icon_gameroom:553299647729238016>`{cmembers}` " embedFields.append([e_name, e_value]) colour = choice([ discord.Colour.green(), discord.Colour.blue(), discord.Colour.purple(), discord.Colour.orange(), discord.Colour.red(), discord.Colour.teal() ]) embedsToSend = [] for i in range(0, len(embedFields), 8): embed = discord.Embed(colour=colour) embed.set_author(name=f"{ctx.guild.name} clubs", icon_url=ctx.guild.icon_url) footer = "API is offline, showing last saved data." if offline else f"Do you need more info about a club? Use {ctx.prefix}club [key]" embed.set_footer(text=footer) for e in embedFields[i:i + 8]: embed.add_field(name=e[0], value=e[1], inline=False) embedsToSend.append(embed) async def next_page(ctx: commands.Context, pages: list, controls: dict, message: discord.Message, page: int, timeout: float, emoji: str): perms = message.channel.permissions_for(ctx.me) if perms.manage_messages: try: await message.remove_reaction(emoji, ctx.author) except discord.NotFound: pass if page == len(pages) - 1: page = 0 else: page = page + 1 return await menu(ctx, pages, controls, message=message, page=page, timeout=timeout) if len(embedsToSend) > 1: await menu(ctx, embedsToSend, {"➡": next_page}, timeout=300) else: await ctx.send(embed=embedsToSend[0]) except ZeroDivisionError as e: return await ctx.send( "**Something went wrong, please send a personal message to LA Modmail bot or try again!**" )