Exemplo n.º 1
0
    def render_guild_channel_update_event(self, *args, **kwargs):
        """Renders the named event."""
        before = kwargs.get("before")
        after = kwargs.get("after")
        server_text = self.get_server_text(before)

        attrs = [
            "category",
            "changed_roles",
            "name",
            "overwrites",
            "permissions_synced",
            "position",
        ]
        diff = self.get_object_diff(before, after, attrs)

        message = (
            f"Channel with ID {before.id} modified in guild with ID {before.guild.id}"
        )

        embed = embed_lib.generate_log_embed(message, "event")

        embed = self.add_diff_fields(embed, diff)

        embed.add_field(name="Channel Name", value=before.name)
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 2
0
    def render_member_update_event(self, *args, **kwargs):
        """Renders the named event."""
        before = kwargs.get("before")
        after = kwargs.get("after")
        server_text = self.get_server_text(before)

        attrs = ["avatar_url", "avatar", "nick", "roles", "status"]
        diff = self.get_object_diff(before, after, attrs)

        message = (
            f"Member with ID {before.id} was updated in guild with ID {before.guild.id}"
        )

        if diff:
            embed = embed_lib.generate_log_embed(message, "event")

            embed = self.add_diff_fields(embed, diff)

            embed.add_field(name="Member", value=before)
            embed.add_field(name="Server", value=server_text)
        else:
            # avoid spamming of member activity changes
            message, embed = None, None

        return message, embed
Exemplo n.º 3
0
    def render_message_edit_event(self, *args, **kwargs):
        """Renders the named event."""
        before = kwargs.get("before")
        after = kwargs.get("after")

        attrs = ["content", "embeds"]
        diff = self.get_object_diff(before, after, attrs)

        server_text = self.get_server_text(before.channel)

        message = f"Message edit detected on message with ID {before.id}"

        embed = embed_lib.generate_log_embed(message, "event")

        embed = self.add_diff_fields(embed, diff)

        embed.add_field(name="Author", value=before.author)
        embed.add_field(name="Channel",
                        value=getattr(before.channel, "name", "DM"))
        embed.add_field(
            name="Server",
            value=server_text,
        )

        return message, embed
Exemplo n.º 4
0
    def render_default_event(self, *args, **kwargs):
        """Renders the message and embed for the default case."""
        event_type = kwargs.get("event_type")

        message = f"New event: {event_type}"
        embed = embed_lib.generate_log_embed(message, "event")

        return message, embed
Exemplo n.º 5
0
    def render_guild_remove_event(self, *args, **kwargs):
        """Renders the named event."""
        guild = kwargs.get("guild")
        server_text = self.get_server_text(None, guild=guild)

        message = f"Left guild with ID {guild.id}"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 6
0
    def render_member_remove_event(self, *args, **kwargs):
        """Renders the named event."""
        member = kwargs.get("member")
        server_text = self.get_server_text(member)

        message = f"Member with ID {member.id} has left guild with ID {member.guild.id}"
        embed = embed_lib.generate_log_embed(message, "event")

        embed.add_field(name="Member", value=member)
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 7
0
    def render_webhooks_update_event(self, *args, **kwargs):
        """Renders the named event."""
        channel = kwargs.get("channel_")
        server_text = self.get_server_text(channel)

        message = f"Webooks updated for channel with ID {channel.id} in guild with ID {channel.guild.id}"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Channel", value=channel.name)
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 8
0
    def render_guild_role_delete_event(self, *args, **kwargs):
        """Renders the named event."""
        role = kwargs.get("role")
        server_text = self.get_server_text(role)

        message = (
            f"Role with name {role.name} deleted from guild with ID {role.guild.id}"
        )

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 9
0
    def render_guild_emojis_update_event(self, *args, **kwargs):
        """Renders the named event."""
        guild = kwargs.get("guild")
        # before = kwargs.get("before")
        # after = kwargs.get("after")
        server_text = self.get_server_text(None, guild=guild)

        message = f"Emojis updated in guild with ID {guild.id}"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 10
0
    def render_member_unban_event(self, *args, **kwargs):
        """Renders the named event."""
        guild = kwargs.get("guild")
        user = kwargs.get("user")
        server_text = self.get_server_text(None, guild=guild)

        message = f"User with ID {user.id} unbanned from guild with ID {guild.id}"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="User", value=user)
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 11
0
    async def handle_error_log(self, message, *args, **kwargs):
        """Handles error logging.

        parameters:
            message (str): the message to log with the error
            exception (Exception): the exception object
            send (bool): The reverse of the above (overrides console_only)
            channel (int): the ID of the channel to send the log to
            critical (bool): True if the critical error handler should be invoked
        """
        exception = kwargs.get("exception", None)
        critical = kwargs.get("critical")
        channel_id = kwargs.get("channel", None)
        console_only = self._is_console_only(kwargs, is_error=True)

        self.console.error(message)

        if console_only:
            return

        exception_string = "".join(
            traceback.format_exception(type(exception), exception,
                                       exception.__traceback__))
        exception_string = exception_string[:1992]

        embed = embed_lib.generate_log_embed(message, "error")
        embed.timestamp = kwargs.get("time", datetime.datetime.utcnow())

        if channel_id:
            channel = self.bot.get_channel(int(channel_id))
        else:
            channel = None

        # tag user if critical
        if channel:
            content = channel.guild.owner.mention if critical else None
            target = channel
        else:
            target = await self.bot.get_owner()
            content = target.mention if critical else None

        if not target:
            self.console.warning(
                "Could not determine Discord target to send ERROR log")
            return

        try:
            await target.send(content=content, embed=embed)
            await target.send(f"```py\n{exception_string}```")
        except discord.Forbidden:
            pass
Exemplo n.º 12
0
    def render_guild_channel_pins_update_event(self, *args, **kwargs):
        """Renders the named event."""
        channel = kwargs.get("channel_")
        # last_pin = kwargs.get("last_pin")
        server_text = self.get_server_text(channel)

        message = f"Channel pins updated in channel with ID {channel.id} in guild with ID {channel.guild.id}"

        embed = embed_lib.generate_log_embed(message, "event")

        embed.add_field(name="Channel Name", value=channel.name)
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 13
0
    def render_command_event(self, *args, **kwargs):
        """Renders the named event."""
        ctx = kwargs.get("context", kwargs.get("ctx"))
        server_text = self.get_server_text(ctx)

        sliced_content = f"Command detected: `{ctx.message.content[:100]}`"
        message = f"Command detected: {sliced_content}"

        embed = embed_lib.generate_log_embed(sliced_content, "event")
        embed.add_field(name="User", value=ctx.author)
        embed.add_field(name="Channel",
                        value=getattr(ctx.channel, "name", "DM"))
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 14
0
    def render_message_delete_event(self, *args, **kwargs):
        """Renders the named event."""
        message_object = kwargs.get("message")
        server_text = self.get_server_text(message_object)

        message = f"Message with ID {message_object.id} deleted"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Content", value=message_object.content or "None")
        embed.add_field(name="Author", value=message_object.author)
        embed.add_field(
            name="Channel",
            value=getattr(message_object.channel, "name", "DM"),
        )
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 15
0
    def render_bulk_message_delete_event(self, *args, **kwargs):
        """Renders the named event."""
        messages = kwargs.get("messages")

        unique_channels = set()
        unique_servers = set()
        for message in messages:
            unique_channels.add(message.channel.name)
            unique_servers.add(
                f"{message.channel.guild.name} ({message.channel.guild.id})")

        message = f"{len(messages)} messages bulk deleted!"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Channels", value=",".join(unique_channels))
        embed.add_field(name="Servers", value=",".join(unique_servers))

        return message, embed
Exemplo n.º 16
0
    def render_reaction_remove_event(self, *args, **kwargs):
        """Renders the named event."""
        reaction = kwargs.get("reaction")
        user = kwargs.get("user")
        server_text = self.get_server_text(reaction.message.channel)

        message = f"Reaction removed from message with ID {reaction.message.id} by user with ID {user.id}"

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Emoji", value=reaction.emoji)
        embed.add_field(name="User", value=user)
        embed.add_field(name="Message",
                        value=reaction.message.content or "None")
        embed.add_field(name="Message Author", value=reaction.message.author)
        embed.add_field(name="Channel",
                        value=getattr(reaction.message.channel, "name", "DM"))
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 17
0
    def render_reaction_clear_event(self, *args, **kwargs):
        """Renders the named event."""
        message = kwargs.get("message")
        reactions = kwargs.get("reactions")
        server_text = self.get_server_text(message.channel)

        message = f"{len(reactions)} cleared from message with ID {message.id}"

        unique_emojis = set()
        for reaction in reactions:
            unique_emojis.add(reaction.emoji)

        embed = embed_lib.generate_log_embed(message, "event")
        embed.add_field(name="Emojis", value=",".join(unique_emojis))
        embed.add_field(name="Message", value=message.content or "None")
        embed.add_field(name="Message Author", value=message.author)
        embed.add_field(name="Channel",
                        value=getattr(message.channel, "name", "DM"))
        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 18
0
    async def handle_generic_log(self, message, level_, console, *args,
                                 **kwargs):
        """Handles most logging contexts.

        parameters:
            message (str): the message to log
            level (str): the logging level
            console (func): logging level method
            send (bool): The reverse of the above (overrides console_only)
            channel (int): the ID of the channel to send the log to
        """
        console_only = self._is_console_only(kwargs, is_error=False)

        channel_id = kwargs.get("channel", None)

        console(message)

        if console_only:
            return

        channel = self.bot.get_channel(int(channel_id)) if channel_id else None

        if channel:
            target = channel
        else:
            target = await self.bot.get_owner()

        if not target:
            self.console.warning(
                f"Could not determine Discord target to send {level_} log")
            return

        embed = embed_lib.generate_log_embed(message, level_)
        embed.timestamp = kwargs.get("time", datetime.datetime.utcnow())

        try:
            await target.send(embed=embed)
        except discord.Forbidden:
            pass
Exemplo n.º 19
0
    def render_guild_role_update_event(self, *args, **kwargs):
        """Renders the named event."""
        before = kwargs.get("before")
        after = kwargs.get("after")
        server_text = self.get_server_text(before)

        attrs = [
            "color", "mentionable", "name", "permissions", "position", "tags"
        ]
        diff = self.get_object_diff(before, after, attrs)

        message = (
            f"Role with name {before.name} updated in guild with ID {before.guild.id}"
        )

        embed = embed_lib.generate_log_embed(message, "event")

        embed = self.add_diff_fields(embed, diff)

        embed.add_field(name="Server", value=server_text)

        return message, embed
Exemplo n.º 20
0
    def render_guild_update_event(self, *args, **kwargs):
        """Renders the named event."""
        before = kwargs.get("before")
        after = kwargs.get("after")
        server_text = self.get_server_text(None, guild=before)

        attrs = [
            "banner",
            "banner_url",
            "bitrate_limit",
            "categories",
            "default_role",
            "description",
            "discovery_splash",
            "discovery_splash_url",
            "emoji_limit",
            "emojis",
            "explicit_content_filter",
            "features",
            "icon",
            "icon_url",
            "name",
            "owner",
            "region",
            "roles",
            "rules_channel",
            "verification_level",
        ]
        diff = self.get_object_diff(before, after, attrs)

        message = f"Guild with ID {before.id} updated"

        embed = embed_lib.generate_log_embed(message, "event")

        embed = self.add_diff_fields(embed, diff)

        embed.add_field(name="Server", value=server_text)

        return message, embed