示例#1
0
    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)])
示例#2
0
    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}")
示例#3
0
 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)))
示例#4
0
    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)))
示例#5
0
    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))