예제 #1
0
    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)
예제 #2
0
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
예제 #3
0
 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
예제 #4
0
파일: tools.py 프로젝트: ARiB-QT/LAcogs
    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))
예제 #5
0
 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)
예제 #6
0
    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)
예제 #7
0
 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)
예제 #8
0
파일: cr.py 프로젝트: VerySmolDuck/LAcogs
    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))
예제 #9
0
파일: cr.py 프로젝트: VerySmolDuck/LAcogs
    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))
예제 #10
0
파일: cr.py 프로젝트: ARiB-QT/LAcogs
    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!**"
            )
예제 #11
0
    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!**"
            )