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)
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
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)
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__)
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}")