mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-13 09:10:14 +00:00
Message and error logging, various bugfixes
This commit is contained in:
parent
ea62ede21b
commit
58d8927380
7 changed files with 161 additions and 37 deletions
|
|
@ -7,12 +7,14 @@ import os
|
|||
import logging
|
||||
|
||||
import discord
|
||||
import traceback
|
||||
|
||||
from pluralkit import db
|
||||
from pluralkit.bot import commands, proxy
|
||||
from pluralkit.bot import commands, proxy, channel_logger, embeds
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s")
|
||||
|
||||
|
||||
def connect_to_database() -> asyncpg.pool.Pool:
|
||||
username = os.environ["DATABASE_USER"]
|
||||
password = os.environ["DATABASE_PASS"]
|
||||
|
|
@ -21,7 +23,9 @@ def connect_to_database() -> asyncpg.pool.Pool:
|
|||
port = os.environ["DATABASE_PORT"]
|
||||
|
||||
if username is None or password is None or name is None or host is None or port is None:
|
||||
print("Database credentials not specified. Please pass valid PostgreSQL database credentials in the DATABASE_[USER|PASS|NAME|HOST|PORT] environment variable.", file=sys.stderr)
|
||||
print(
|
||||
"Database credentials not specified. Please pass valid PostgreSQL database credentials in the DATABASE_[USER|PASS|NAME|HOST|PORT] environment variable.",
|
||||
file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
|
|
@ -38,11 +42,20 @@ def connect_to_database() -> asyncpg.pool.Pool:
|
|||
port=port
|
||||
))
|
||||
|
||||
|
||||
def run():
|
||||
pool = connect_to_database()
|
||||
|
||||
async def create_tables():
|
||||
async with pool.acquire() as conn:
|
||||
await db.create_tables(conn)
|
||||
|
||||
asyncio.get_event_loop().run_until_complete(create_tables())
|
||||
|
||||
client = discord.Client()
|
||||
|
||||
logger = channel_logger.ChannelLogger(client)
|
||||
|
||||
@client.event
|
||||
async def on_ready():
|
||||
print("PluralKit started.")
|
||||
|
|
@ -64,8 +77,51 @@ def run():
|
|||
return
|
||||
|
||||
# Second pass: do proxy matching
|
||||
await proxy.try_proxy_message(message, conn)
|
||||
await proxy.try_proxy_message(conn, message, logger)
|
||||
|
||||
@client.event
|
||||
async def on_raw_message_delete(payload: discord.RawMessageDeleteEvent):
|
||||
async with pool.acquire() as conn:
|
||||
await proxy.handle_deleted_message(conn, client, payload.message_id, None, logger)
|
||||
|
||||
@client.event
|
||||
async def on_raw_bulk_message_delete(payload: discord.RawBulkMessageDeleteEvent):
|
||||
async with pool.acquire() as conn:
|
||||
for message_id in payload.message_ids:
|
||||
await proxy.handle_deleted_message(conn, client, message_id, None, logger)
|
||||
|
||||
@client.event
|
||||
async def on_raw_reaction_add(payload: discord.RawReactionActionEvent):
|
||||
if payload.emoji.name == "\u274c": # Red X
|
||||
async with pool.acquire() as conn:
|
||||
await proxy.try_delete_by_reaction(conn, client, payload.message_id, payload.user_id, logger)
|
||||
|
||||
@client.event
|
||||
async def on_error(event_name, *args, **kwargs):
|
||||
log_channel_id = os.environ["LOG_CHANNEL"]
|
||||
if not log_channel_id:
|
||||
return
|
||||
|
||||
log_channel = client.get_channel(int(log_channel_id))
|
||||
|
||||
# If this is a message event, we can attach additional information in an event
|
||||
# ie. username, channel, content, etc
|
||||
if args and isinstance(args[0], discord.Message):
|
||||
message: discord.Message = args[0]
|
||||
embed = embeds.exception_log(
|
||||
message.content,
|
||||
message.author.name,
|
||||
message.author.discriminator,
|
||||
message.author.id,
|
||||
message.guild.id if message.guild else None,
|
||||
message.channel.id
|
||||
)
|
||||
else:
|
||||
# If not, just post the string itself
|
||||
embed = None
|
||||
|
||||
traceback_str = "```python\n{}```".format(traceback.format_exc())
|
||||
await log_channel.send(content=traceback_str, embed=embed)
|
||||
|
||||
bot_token = os.environ["TOKEN"]
|
||||
if not bot_token:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue