From cf363fd738293b98bab248979f5d6dec55fe62d6 Mon Sep 17 00:00:00 2001 From: Interitio Date: Wed, 13 Aug 2025 14:41:16 +1000 Subject: [PATCH] feat: Add messagelogger module. --- .gitmodules | 7 +++- data/schema.sql | 83 ++++++++++++++++++++------------------- requirements.txt | 10 ++--- src/bot.py | 2 +- src/modules/__init__.py | 1 + src/modules/messagelogger | 1 + 6 files changed, 56 insertions(+), 48 deletions(-) create mode 160000 src/modules/messagelogger diff --git a/.gitmodules b/.gitmodules index 64ee955..8721b9e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,9 @@ [submodule "src/modules/voicefix"] path = src/modules/voicefix - url = git@github.com:Intery/StudyLion-voicefix.git + url = https://github.com/Intery/StudyLion-voicefix.git [submodule "src/modules/streamalerts"] path = src/modules/streamalerts - url = git@github.com:Intery/StudyLion-streamalerts.git + url = https://github.com/Intery/StudyLion-streamalerts.git +[submodule "src/modules/messagelogger"] + path = src/modules/messagelogger + url = https://git.thewisewolf.dev/HoloTech/discord-messagelogger-plugin.git diff --git a/data/schema.sql b/data/schema.sql index 74e0b84..14ba8a5 100644 --- a/data/schema.sql +++ b/data/schema.sql @@ -50,56 +50,59 @@ CREATE TABLE channel_links( PRIMARY KEY (linkid, channelid) ); - -- }}} --- Stream Alerts {{{ +-- Message Logging {{{ --- DROP TABLE IF EXISTS stream_alerts; --- DROP TABLE IF EXISTS streams; --- DROP TABLE IF EXISTS alert_channels; --- DROP TABLE IF EXISTS streamers; - -CREATE TABLE streamers( - userid BIGINT PRIMARY KEY, - login_name TEXT NOT NULL, - display_name TEXT NOT NULL +CREATE TABLE logging_guilds( + guildid BIGINT PRIMARY KEY, + webhook_url TEXT, + created_at TIMESTAMPTZ DEFAULT NOW(), + _timestamp TIMESTAMPTZ DEFAULT NOW() ); -CREATE TABLE alert_channels( - subscriptionid SERIAL PRIMARY KEY, - guildid BIGINT NOT NULL, +CREATE TRIGGER logging_guilds_timestamp BEFORE UPDATE ON logging_guilds + FOR EACH ROW EXECUTE FUNCTION update_timestamp_column(); + + +CREATE TABLE logged_messages( + messageid BIGINT PRIMARY KEY, + guildid BIGINT NOT NULL REFERENCES logging_guilds ON DELETE CASCADE, channelid BIGINT NOT NULL, - streamerid BIGINT NOT NULL REFERENCES streamers (userid) ON DELETE CASCADE, - created_by BIGINT NOT NULL, - created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - paused BOOLEAN NOT NULL DEFAULT FALSE, - end_delete BOOLEAN NOT NULL DEFAULT FALSE, - live_message TEXT, - end_message TEXT -); -CREATE INDEX alert_channels_guilds ON alert_channels (guildid); -CREATE UNIQUE INDEX alert_channels_channelid_streamerid ON alert_channels (channelid, streamerid); - -CREATE TABLE streams( - streamid SERIAL PRIMARY KEY, - streamerid BIGINT NOT NULL REFERENCES streamers (userid) ON DELETE CASCADE, - start_at TIMESTAMPTZ NOT NULL, - twitch_stream_id BIGINT, - game_name TEXT, - title TEXT, - end_at TIMESTAMPTZ + userid BIGINT NOT NULL, + created_at TIMESTAMPTZ NOT NULL, + deleted_at TIMESTAMPTZ, + _timestamp TIMESTAMPTZ DEFAULT NOW() ); -CREATE TABLE stream_alerts( - alertid SERIAL PRIMARY KEY, - streamid INTEGER NOT NULL REFERENCES streams (streamid) ON DELETE CASCADE, - subscriptionid INTEGER NOT NULL REFERENCES alert_channels (subscriptionid) ON DELETE CASCADE, - sent_at TIMESTAMPTZ NOT NULL, - messageid BIGINT NOT NULL, - resolved_at TIMESTAMPTZ +CREATE TRIGGER logged_messages_timestamp BEFORE UPDATE ON logged_messages + FOR EACH ROW EXECUTE FUNCTION update_timestamp_column(); + +CREATE TABLE message_states( + stateid INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + messageid BIGINT NOT NULL REFERENCES logged_messages ON DELETE CASCADE, + content TEXT NOT NULL, + embeds_raw TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); +CREATE INDEX message_states_messageid ON message_states (messageid); + +CREATE TABLE logged_attachments( + attachment_id BIGINT PRIMARY KEY, + proxy_url TEXT NOT NULL, + url TEXT NOT NULL, + content_type TEXT NOT NULL, + filesize INTEGER NOT NULL, + filename TEXT NOT NULL, + permalink TEXT, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); +CREATE TABLE logged_messages_attachments( + stateid INTEGER NOT NULL REFERENCES message_states(stateid) ON DELETE CASCADE, + attachment_id BIGINT NOT NULL REFERENCES logged_attachments(attachment_id) ON DELETE CASCADE +); +CREATE INDEX logged_messages_attachments_stateid ON logged_messages_attachments (stateid); -- }}} diff --git a/requirements.txt b/requirements.txt index 402aaf8..bf44950 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -aiohttp==3.7.4.post0 -cachetools==4.2.2 -configparser==5.0.2 +aiohttp +cachetools +configparser discord.py [voice] -iso8601==0.1.16 +iso8601 psycopg[pool] -pytz==2021.1 +pytz twitchAPI diff --git a/src/bot.py b/src/bot.py index 0b61a61..be64f1e 100644 --- a/src/bot.py +++ b/src/bot.py @@ -54,7 +54,7 @@ async def main(): intents = discord.Intents.all() intents.members = True intents.message_content = True - intents.presences = False + intents.presences = True async with db.open(): version = await db.version() diff --git a/src/modules/__init__.py b/src/modules/__init__.py index 099c81b..9c6fb5a 100644 --- a/src/modules/__init__.py +++ b/src/modules/__init__.py @@ -3,6 +3,7 @@ this_package = 'modules' active = [ '.sysadmin', '.voicefix', + '.messagelogger', ] diff --git a/src/modules/messagelogger b/src/modules/messagelogger new file mode 160000 index 0000000..0f7f058 --- /dev/null +++ b/src/modules/messagelogger @@ -0,0 +1 @@ +Subproject commit 0f7f0582d3fa4d040b76d206dd9b72b2eb95e8d9