async def bot(self, ctx: commands.Context, target: Union[Member, User, int] = None): if target is None: return await self.embed(ctx, "Please provide a target!") id = target if isinstance(target, int) else target.id try: bot = await self.dblstats.get_bot(id) except dblstats.errors.InvalidTarget: return await self.embed( ctx, "Oops, could not find that bot on Top.gg!") field_message = f"Owners: {', '.join(['<@' + str(owner) + '>' for owner in bot.owners])}\n" \ f"Library: `{bot.library}`\n" \ f"Prefix: `{bot.prefix}`\n" \ f"```" \ f"Montly Votes: {bot.monthly_votes}\tMonthly Votes Rank: {bot.monthly_votes_rank}\n" \ f"Server Count: {bot.server_count}\tServer Count Rank: {bot.server_count_rank}\n" \ f"Total Votes: {bot.total_votes}\tTotal Votes Rank: {bot.total_votes_rank}\n" \ f"Shard Count: {bot.shard_count}\tShard Count Rank: {bot.shard_count_rank}" \ f"```\n" \ f"Approved on {bot.approved_at.utcnow()}" await self.embed( ctx, bot.short_description, title=f"About {bot.name}:", footer=Footer(text=bot.website, icon_url=bot.avatar), fields=[Field(name="Top.gg Information", value=field_message)])
async def on_message(self, message: Message): if message.author.bot or message.channel.is_nsfw(): return Logger.debug(f"Started processing {message.id}") new_images = [] if message.attachments: process = [] for attachment in message.attachments: for extension in image_extensions: if attachment.filename.endswith(extension): process.append(attachment) for attachment in process: await attachment.save(f"./tmp/{attachment.filename}") classification = classifier.classify( f"./tmp/{attachment.filename}" )[f"./tmp/{attachment.filename}"] if classification["safe"] < classification["unsafe"]: name = f"./tmp/{round(time() * 1000)}-{attachment.filename}" detector.censor(f"./tmp/{attachment.filename}", name) new_images.append(File(name, attachment.filename)) if new_images: hooks = await message.channel.webhooks() sender = None for hook in hooks: if hook.user == self.bot.user: sender = hook break if sender is None: sender = await message.channel.create_webhook( name="Guardian", reason="No existing webhook was found, creating one!") for image in new_images: em = await self.embed( sender, "", get_embed=True, image=f"attachment://{image.filename}", footer=Footer("Auto detected NSFW, removed by Guardian", self.bot.user.avatar_url)) # await self.send(sender, "", embed=em, file=image) await sender.send(content=message.content, username=str(message.author), avatar_url=message.author.avatar_url, file=image, embed=em) await message.delete() Logger.debug(f"Successfully processed {message.id}")
async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): if not self.channel_is_set(): return guild = self.bot.get_guild(payload.guild_id) member = await guild.fetch_member(payload.user_id) channel = guild.get_channel(payload.channel_id) await self.embed(self.channel, title=reaction_logger["removed"]["title"], message=reaction_logger["removed"]["content"].format(member=member, guild=guild, emoji=payload.emoji, channel=channel), footer=Footer(reaction_logger["removed"]["footer"].get("text"), reaction_logger["removed"]["footer"].get("icon").format(guild=guild), reaction_logger["removed"]["footer"].get("timestamp")), color=(None if reaction_logger["removed"]["color"].get("random", True) else reaction_logger["removed"]["color"].get("color", 0xff0000)))
async def send_message(self, user: Member, role: Role, guild: Guild, state: str): if self.specific: if role.id not in self.specific_roles: return await self.embed(user, role_notifier[state].get("content", "Invalid lang.py").format(role=role, guild=guild, user=user), title=role_notifier[state].get("title", "Invalid lang.py"), footer=Footer( role_notifier[state]["footer"].get("text", "Invalid lang.py"), role_notifier[state]["footer"].get("icon", "").format(guild=guild), role_notifier[state]["footer"].get("timestamp", True)), color=(None if role_notifier[state]["color"].get("random", True) else role_notifier[state]["color"].get("color", 0xf0f0f0)))
async def bots(self, ctx: commands.Context, target: Union[Member, User, int] = None): if target is None: return await self.embed(ctx, "Please provide a author!") id = target if isinstance(target, int) else target.id try: user_bots = await self.dblstats.get_user_bots(id) except dblstats.errors.InvalidTarget: return await self.embed( ctx, "Oops, could not find that user on Top.gg!") user = user_bots.user bots = user_bots.bots message = f"Bots ({len(bots)})\n" + "\n".join([ f"[{bot.name}]({bot.website or 'https://top.gg/bot/' + bot.id})" for bot in bots ]) await self.embed(ctx, message, title=f"About {user.tag}:", footer=Footer(icon_url=user.avatar))