Exemple #1
0
    async def guildlist(self, ctx: Context, page: int = 1) -> None:
        """List the guilds I am in."""
        guild_list = []

        for guild in self.bot.guilds:
            guild_list.append(guild)

        guild_count = len(self.bot.guilds)
        items_per_page = 10
        pages = math.ceil(guild_count / items_per_page)

        start = (page - 1) * items_per_page
        end = start + items_per_page

        guilds_list = ''
        for guild in guild_list[start:end]:
            guilds_list += f'**{guild.name}** ({guild.id})\n**Joined:** {humanize.naturaltime(guild.get_member(self.bot.user.id).joined_at)}\n>'
            guilds_list += "=====================================\n"

        embed = Embed(color=Color.greyple(),
                      title="Total Guilds",
                      description=guilds_list)
        embed.set_footer(text=f"Currently showing: {page} out of {pages}")

        await ctx.send(embed=embed)
Exemple #2
0
def global_info(ctx, lobby, match_list):
    embed = Embed(
        colour=Color.greyple(),
        title='Global Info',
        description=f'POG bot version `{cfg.VERSION}`'
    )
    lb_embed = lobby_list(ctx, names_in_lobby=lobby).fields[0]
    embed.add_field(name=lb_embed.name, value=lb_embed.value, inline=lb_embed.inline)
    for m in match_list:
        desc = ""
        if m.status is MatchStatus.IS_FREE:
            continue
        else:
            if m.round_no != 0:
                desc += f"Match {m.id} - Round {m.round_no}"
            else:
                desc += f"Match {m.id}"
            desc += "\n"
        desc += f"Status: *{m.status_str}*"
        if m.status is MatchStatus.IS_PLAYING:
            desc += f"\nTime Remaining: **{m.get_formatted_time_to_round_end()}**"
        if m.base:
            desc += f"\nBase: [{m.base.name}]({cfg.base_images[m.base.id]})"
        for tm in m.teams:
            if tm and tm.faction != 0:
                desc += f"\n{tm.name}: {cfg.emojis[cfg.factions[tm.faction]]} {cfg.factions[tm.faction]}"

        embed.add_field(name=m.channel.name, value=desc, inline=False)
    return embed
Exemple #3
0
 async def say(self, ctx: Context, *args):
     """Gives the user's statement a nice richtext quote format"""
     output = ''
     for word in args:
         output += word
         output += ' '
     user = ctx.message.author
     embed = Embed(title=f'{output}',
                   description=f'~{user}',
                   colour=Color.greyple())
     await ctx.send(embed=embed)
Exemple #4
0
 async def github(self, ctx, user: str, package: str = None):
     if package:
         base = f"https://api.github.com/users/{user}/repos"
     else:
         base = f"https://api.github.com/users/{user}"
     async with ClientSession() as session:
         data = await get(session, base)
     data = loads(data)
     if 'message' in data:
         return await ctx.send(f"Could not find the user `{user}`")
     gh = Embed(color=Color.greyple())
     if not package:
         gh.set_author(name=data['login'],
                       icon_url="https://i.ibb.co/k9HjpJn/gh.png",
                       url=data['html_url'])
         gh.set_thumbnail(url=data['avatar_url'])
         gh.add_field(name='**Name**', value=data['name'])
         gh.add_field(name='**Bio**', value=data['bio'])
         gh.add_field(name="**Created**", value=data['created_at'][:10])
         gh.add_field(name="**Followers**", value=data['followers'])
         gh.add_field(name="**Following**", value=data['following'])
         return await ctx.send(embed=gh)
     if package:
         d = None
         for i in data:
             if i['name'] == package:
                 d = i
                 break
         if d is None:
             return await ctx.send(
                 f"Could not find the repository `{package}` under `{user}`"
             )
         d: dict()
         gh.set_author(name=d["owner"]["login"],
                       url=d['html_url'],
                       icon_url="https://i.ibb.co/k9HjpJn/gh.png")
         gh.set_thumbnail(url=d['owner']['avatar_url'])
         gh.add_field(name="**Description**", value=d['description'])
         gh.add_field(name="**Created**", value=d['created_at'][:10])
         gh.add_field(name="**Updated**", value=d['updated_at'][:10])
         gh.add_field(name="**Stars** ⭐", value=d['stargazers_count'])
         gh.add_field(name="**Language**", value=d['language'])
         gh.add_field(name="**Forks** 🍴", value=d['forks'])
         return await ctx.send(embed=gh)
async def __main__(client: Client, _event: int, *args: Union[Message, Member, VoiceState, User, Member, Role]):
    try:
        super_log: TextChannel = client.get_channel(DATA.IDs.Channels.Super_Log)
        attachments = None

        if _event == EVENT.on_message:
            datetime_edit = False

            if args[0].channel.id != super_log.id:
                embed: Embed = Embed(title=f"on_message | "
                                           f"<{args[0].jump_url}> |" +
                                           (f" {args[0].channel.category} |"
                                            f" {args[0].channel.mention}" if hasattr(args[0].channel, "category") else " DM"),
                                     description=args[0].content+(" | EMBED" if args[0].embeds else "")+(" | ATTACHMENT" if args[0].attachments else ""),
                                     color=Color.gold())
                embed.set_author(name=args[0].author, url=args[0].author.avatar_url)
                embed.add_field(name="datetime.datetime",
                                value=args[0].created_at)

                from io import BytesIO
                if args[0].attachments:
                    attachments = []
                    for attachment in args[0].attachments:
                        fp = BytesIO()
                        await attachment.save(fp)
                        attachments.append(File(fp, attachment.filename))

                from json import dump
                if args[0].embeds:
                    attachments = []
                    for i, attachment in enumerate(args[0].embeds):
                        with open("_.log", "w") as fp:
                            dump(attachment.to_dict(), fp, indent=2)
                        with open("_.log", "rb") as fp:
                            attachments.append(File(fp, f"EMBED-{i}.json"))

            else:
                return

        elif _event == EVENT.on_message_delete:
            datetime_edit = False
            embed: Embed = Embed(title=f"on_message_delete | "
                                       f"<{args[0].jump_url}> |" +
                                       (f" {args[0].channel.category} |"
                                        f" {args[0].channel.mention}" if hasattr(args[0].channel, "category") else " DM"),
                                 description=args[0].content+(" | EMBED" if args[0].embeds else "")+(" | ATTACHMENT" if args[0].attachments else ""),
                                 color=Color.gold())
            embed.set_author(name=args[0].author, url=args[0].author.avatar_url)
            embed.add_field(name="datetime.datetime",
                            value=args[0].created_at)

            from io import BytesIO
            if args[0].attachments:
                attachments = []
                for attachment in args[0].attachments:
                    fp = BytesIO()
                    await attachment.save(fp)
                    attachments.append(File(fp, attachment.filename))

            from json import dump
            if args[0].embeds:
                attachments = []
                for i, attachment in enumerate(args[0].embeds):
                    with open("_.log", "w") as fp:
                        dump(attachment.to_dict(), fp, indent=2)
                    with open("_.log", "rb") as fp:
                        attachments.append(File(fp, f"EMBED-{i}.json"))

        elif _event == EVENT.on_message_edit:
            datetime_edit = False
            if args[0].author.id != client.user.id:
                embed: Embed = Embed(title=f"on_message_edit | "
                                           f"<{args[0].jump_url}> |" +
                                           (f" {args[0].channel.category} |"
                                            f" {args[0].channel.mention}" if hasattr(args[0].channel, "category") else " DM"),
                                     color=Color.gold())
                embed.set_author(name=args[0].author, url=args[0].author.avatar_url)
                embed.add_field(name=f"before ({args[0].created_at})",
                                value=args[0].content+(" | EMBED" if args[0].embeds else "")+(" | ATTACHMENT" if args[0].attachments else ""))
                embed.add_field(name=f"after ({args[0].edited_at})",
                                value=args[1].content+(" | EMBED" if args[0].embeds else "")+(" | ATTACHMENT" if args[0].attachments else ""))

                from io import BytesIO
                if args[0].attachments:
                    attachments = []
                    for attachment in args[0].attachments:
                        fp = BytesIO()
                        await attachment.save(fp)
                        attachments.append(File(fp, attachment.filename))

                from json import dump
                if args[0].embeds:
                    attachments = []
                    for i, attachment in enumerate(args[0].embeds):
                        with open("_.log", "w") as fp:
                            dump(attachment.to_dict(), fp, indent=2)
                        with open("_.log", "rb") as fp:
                            attachments.append(File(fp, f"EMBED-OLD-{i}.json"))

                if args[1].attachments:
                    attachments = []
                    for attachment in args[1].attachments:
                        fp = BytesIO()
                        await attachment.save(fp)
                        attachments.append(File(fp, attachment.filename))

                if args[1].embeds:
                    attachments = []
                    for i, attachment in enumerate(args[1].embeds):
                        with open("_.log", "w") as fp:
                            dump(attachment.to_dict(), fp, indent=2)
                        with open("_.log", "rb") as fp:
                            attachments.append(File(fp, f"EMBED-NEW-{i}.json"))
            else:
                return

        elif _event == EVENT.on_ready:
            datetime_edit = True
            embed: Embed = Embed(title=f"on_ready",
                                 color=Color.green())

        elif _event == EVENT.on_voice_state_update:
            datetime_edit = True
            embed: Embed = Embed(title=f"on_voice_state_update",
                                 color=Color.greyple())
            embed.set_author(name=args[0].__str__(), url=args[0].avatar_url)

            if args[1].channel is None:
                embed.description = f"joined {args[2].channel}"
            if args[2].channel is None:
                embed.description = f"leaved {args[1].channel}"
            if args[1].channel is not None and args[2].channel is not None and args[1].channel != args[2].channel:
                embed.add_field(name="moved", value=f"{args[1].channel} -> {args[2].channel}")
            if args[1].deaf != args[2].deaf:
                embed.add_field(name="server deafen", value=f"{args[1].deaf} -> {args[2].deaf}")
            if args[1].mute != args[2].mute:
                embed.add_field(name="server mute", value=f"{args[1].mute} -> {args[2].mute}")
            if args[1].self_deaf != args[2].self_deaf:
                embed.add_field(name="self self_deafen", value=f"{args[1].self_deaf} -> {args[2].self_deaf}")
            if args[1].self_mute != args[2].self_mute:
                embed.add_field(name="self mute", value=f"{args[1].self_mute} -> {args[2].self_mute}")
            if args[1].self_stream != args[2].self_stream:
                embed.add_field(name="self stream", value=f"{args[1].self_stream} -> {args[2].self_stream}")
            if args[1].self_video != args[2].self_video:
                embed.add_field(name="self video", value=f"{args[1].self_video} -> {args[2].self_video}")
            if args[1].afk != args[2].afk:
                embed.add_field(name="afk", value=f"{args[1].afk} -> {args[2].afk}")

        elif _event == EVENT.on_user_update:
            datetime_edit = True
            embed: Embed = Embed(title=f"on_user_update",
                                 color=Color.blurple())
            embed.set_author(name=args[0].__str__(), url=args[0].avatar_url)
            if args[0].avatar != args[1].avatar:
                embed.add_field(name="avatar", value=f"[IMG]({args[0].avatar_url}) -> [IMG]({args[1].avatar_url})")
            if args[0].name != args[1].name:
                embed.add_field(name="name", value=f"{args[0].name} -> {args[1].name}")
            if args[0].discriminator != args[1].discriminator:
                embed.add_field(name="discriminator", value=f"{args[0].discriminator} -> {args[1].discriminator}")

        elif _event == EVENT.on_member_update:
            datetime_edit = True
            embed: Embed = Embed(title=f"on_member_update",
                                 color=Color.blue())
            embed.set_author(name=args[0].__str__(), url=args[0].avatar_url)
            if args[0].nick != args[1].nick:
                embed.add_field(name="nickname", value=f"{args[0].nick} -> {args[1].nick}")
            if args[0].roles != args[1].roles:
                if len(args[0].roles) < len(args[1].roles):
                    meta = list()
                    for role in args[1].roles:
                        if role not in args[0].roles:
                            meta.append(f"**+** `{role.name}` `{role.id}`")
                    embed.add_field(name="role", value="\n".join(meta))
                if len(args[0].roles) > len(args[1].roles):
                    meta = list()
                    for role in args[0].roles:
                        if role not in args[1].roles:
                            meta.append(f"**-** `{role.name}` `{role.id}`")
                    embed.add_field(name="role", value="\n".join(meta))
                if len(args[0].roles) == len(args[1].roles):
                    embed.add_field(name="role", value="***__PLEASE CONTACT A <@820974562770550816>!!!__***")

            if len(embed.fields) == 0:
                return

        else:
            datetime_edit = True
            embed = Embed()

        message: Message = await super_log.send(embed=embed, files=attachments)

        if datetime_edit:
            from discord.utils import snowflake_time
            embed.add_field(name="datetime.datetime",
                            value=snowflake_time(message.id).__str__(),
                            inline=False)
            await message.edit(embed=embed)

    except Exception as e:
        await send_exception(client=client, exception=e, source_name=__name__)
Exemple #6
0
    async def close(self, ctx, outcome: str = "", *, reason: str = ""):
        """
        Closes a modmail thread.
        Additional replies will not be sent, and the outcome dealt (unmuted, kicked, etc)
        Outcomes: unmute, unprobate, kick, ban
        """

        # check if in modmail thread, otherwise complain
        if ctx.channel.name not in self.modmaillookup:
            return await ctx.send("This isn't a modmail thread!")

        # Grab the user by their id, which is in the channel title
        try:
            user = self.bot.guild.get_member(
                int(ctx.channel.name.split("-")[1]))
        except ValueError:
            return await ctx.send("This isn't a modmail thread!")

        if user is None:
            return await ctx.send("User not found!")

        # A reason to close is required!
        if reason == "":
            return await ctx.send(
                f"A reason must be provided for the consequence!")

        if outcome == "unmute":
            await user.remove_roles(self.bot.muted_role)
            await self.dm(
                user,
                f"You have been unmuted in {self.bot.guild.name}. Understand that next time you may be put on probation."
            )
            emb = Embed(title="User Unmuted (MM)", color=Color.greyple())
            emb.add_field(name="Username:"******"{user.name}#{user.discriminator}",
                          inline=True)
            emb.add_field(name="Member ID:", value=user.id, inline=True)
            emb.add_field(name="Reason:", value=reason, inline=True)
            emb.set_thumbnail(url=user.avatar_url)
            await self.bot.userlogs_channel.send("", embed=emb)
        elif outcome == "unprobate":
            await user.remove_roles(self.bot.probated_role)
            await self.dm(
                user,
                f"You have been unprobated in {self.bot.guild.name}. Understand that next time you may be banned outright."
            )
            emb = Embed(title="User Unprobated (MM)",
                        color=Color.darker_grey())
            emb.add_field(name="Username:"******"{user.name}#{user.discriminator}",
                          inline=True)
            emb.add_field(name="Member ID:", value=user.id, inline=True)
            emb.add_field(name="Reason:", value=reason, inline=True)
            emb.set_thumbnail(url=user.avatar_url)
            await self.bot.userlogs_channel.send("", embed=emb)
        elif outcome == "kick":
            await self.dm(user,
                          f"You have been kicked from {self.bot.guild.name}.")
            await user.kick(reason="(MM) - " + reason)
        elif outcome == "ban":
            await self.dm(user,
                          f"You have been banned from {self.bot.guild.name}.")
            await user.ban(delete_message_days=0, reason="(MM) - " + reason)
        else:
            return await ctx.send(f"Consequence \"{outcome}\" is not valid!")

        userthread = f"user-{user.id}"
        del self.modmaillookup[userthread]

        await ctx.channel.delete(reason=f"Closed - {outcome}'d - {reason}")