Massive refactor of pretty much everything in the bot
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
import discord
|
||||
|
||||
from pluralkit import db
|
||||
|
||||
|
||||
def embed_set_author_name(embed: discord.Embed, channel_name: str, member_name: str, system_name: str, avatar_url: str):
|
||||
name = "#{}: {}".format(channel_name, member_name)
|
||||
if system_name:
|
||||
name += " ({})".format(system_name)
|
||||
|
||||
embed.set_author(name=name, icon_url=avatar_url or discord.Embed.Empty)
|
||||
|
||||
|
||||
class ChannelLogger:
|
||||
def __init__(self, client: discord.Client):
|
||||
self.logger = logging.getLogger("pluralkit.bot.channel_logger")
|
||||
self.client = client
|
||||
|
||||
async def get_log_channel(self, conn, server_id: str):
|
||||
server_info = await db.get_server_info(conn, server_id)
|
||||
|
||||
if not server_info:
|
||||
return None
|
||||
|
||||
log_channel = server_info["log_channel"]
|
||||
|
||||
if not log_channel:
|
||||
return None
|
||||
|
||||
return self.client.get_channel(str(log_channel))
|
||||
|
||||
async def send_to_log_channel(self, log_channel: discord.Channel, embed: discord.Embed):
|
||||
try:
|
||||
await self.client.send_message(log_channel, embed=embed)
|
||||
except discord.Forbidden:
|
||||
# TODO: spew big error
|
||||
self.logger.warning(
|
||||
"Did not have permission to send message to logging channel (server={}, channel={})".format(
|
||||
log_channel.server.id, log_channel.id))
|
||||
|
||||
async def log_message_proxied(self, conn,
|
||||
server_id: str,
|
||||
channel_name: str,
|
||||
channel_id: str,
|
||||
sender_name: str,
|
||||
sender_disc: int,
|
||||
member_name: str,
|
||||
member_hid: str,
|
||||
member_avatar_url: str,
|
||||
system_name: str,
|
||||
system_hid: str,
|
||||
message_text: str,
|
||||
message_image: str,
|
||||
message_timestamp: datetime,
|
||||
message_id: str):
|
||||
log_channel = await self.get_log_channel(conn, server_id)
|
||||
if not log_channel:
|
||||
return
|
||||
|
||||
embed = discord.Embed()
|
||||
embed.colour = discord.Colour.blue()
|
||||
embed.description = message_text
|
||||
embed.timestamp = message_timestamp
|
||||
|
||||
embed_set_author_name(embed, channel_name, member_name, system_name, member_avatar_url)
|
||||
embed.set_footer(
|
||||
text="System ID: {} | Member ID: {} | Sender: {}#{} | Message ID: {}".format(system_hid, member_hid,
|
||||
sender_name, sender_disc,
|
||||
message_id))
|
||||
|
||||
if message_image:
|
||||
embed.set_thumbnail(url=message_image)
|
||||
|
||||
message_link = "https://discordapp.com/channels/{}/{}/{}".format(server_id, channel_id, message_id)
|
||||
embed.author.url = message_link
|
||||
|
||||
await self.send_to_log_channel(log_channel, embed)
|
||||
|
||||
async def log_message_deleted(self, conn,
|
||||
server_id: str,
|
||||
channel_name: str,
|
||||
member_name: str,
|
||||
member_hid: str,
|
||||
member_avatar_url: str,
|
||||
system_name: str,
|
||||
system_hid: str,
|
||||
message_text: str,
|
||||
message_id: str,
|
||||
deleted_by_moderator: bool):
|
||||
log_channel = await self.get_log_channel(conn, server_id)
|
||||
if not log_channel:
|
||||
return
|
||||
|
||||
embed = discord.Embed()
|
||||
embed.colour = discord.Colour.dark_red()
|
||||
embed.description = message_text
|
||||
embed.timestamp = datetime.utcnow()
|
||||
|
||||
embed_set_author_name(embed, channel_name, member_name, system_name, member_avatar_url)
|
||||
embed.set_footer(
|
||||
text="System ID: {} | Member ID: {} | Message ID: {} | Deleted by moderator? {}".format(system_hid,
|
||||
member_hid,
|
||||
message_id,
|
||||
"Yes" if deleted_by_moderator else "No"))
|
||||
|
||||
await self.send_to_log_channel(log_channel, embed)
|
||||
Reference in New Issue
Block a user