From baa8eeead9317b6ef9c8514eb287a6661807a41f Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 9 Nov 2020 02:22:31 +0100 Subject: [PATCH] Just some cleanup code and deleting messages from queue --- src/discord/queue.py | 17 ++++++++++++++++- src/discord/redaction.py | 4 +++- src/fileio/database.py | 15 ++++++++++++++- src/rc.py | 5 ++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/discord/queue.py b/src/discord/queue.py index 51eb42d..a2794ed 100644 --- a/src/discord/queue.py +++ b/src/discord/queue.py @@ -9,7 +9,7 @@ import requests from src.configloader import settings from src.discord.message import DiscordMessage, DiscordMessageMetadata -AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": True}).get("enabled") +AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": False}).get("enabled") if AUTO_SUPPRESSION_ENABLED: from src.fileio.database import add_entry as add_message_redaction_entry @@ -40,6 +40,21 @@ class MessageQueue: def cut_messages(self, item_num): self._queue = self._queue[item_num:] + @staticmethod + def compare_message_to_dict(metadata: DiscordMessageMetadata, to_match: dict): + """Compare DiscordMessageMetadata fields and match them against dictionary""" + for name, val in to_match.items(): + if getattr(metadata, name, None) != val: + return False + return True + + def delete_all_with_matching_metadata(self, **properties): + """Deletes all of the messages that have matching metadata properties (useful for message redaction)""" + for message in messagequeue: + if self.compare_message_to_dict(message[1], properties): + # TODO Delete messages from the queue + raise NotImplemented + def resend_msgs(self): if self._queue: logger.info( diff --git a/src/discord/redaction.py b/src/discord/redaction.py index 941a8bd..499a241 100644 --- a/src/discord/redaction.py +++ b/src/discord/redaction.py @@ -2,7 +2,7 @@ import logging from src.configloader import settings from src.discord.message import DiscordMessageMetadata -from src.discord.queue import send_to_discord +from src.discord.queue import send_to_discord, messagequeue from src.fileio.database import db_cursor, db_connection logger = logging.getLogger("rcgcdw.discord.redaction") @@ -12,6 +12,8 @@ def delete_messages(pageid: int): """Delete messages that match that pageid""" logger.debug(type(pageid)) to_delete = db_cursor.execute("SELECT msg_id FROM event WHERE pageid = ?", (pageid,)) + if len(messagequeue) > 0: + messagequeue.delete_all_with_matching_metadata(pageid=pageid) msg_to_remove = [] logger.debug("Deleting messages for pageid: {}".format(pageid)) for message in to_delete: diff --git a/src/fileio/database.py b/src/fileio/database.py index a2870b8..4593f00 100644 --- a/src/fileio/database.py +++ b/src/fileio/database.py @@ -11,13 +11,15 @@ def create_schema(): """BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "messages" ( "message_id" TEXT, - "content" TEXT + "content" TEXT, + PRIMARY KEY("message_id") ); CREATE TABLE IF NOT EXISTS "event" ( "pageid" INTEGER, "revid" INTEGER, "logid" INTEGER, "msg_id" TEXT NOT NULL, + PRIMARY KEY("msg_id"), FOREIGN KEY("msg_id") REFERENCES "messages"("message_id") ON DELETE CASCADE ); COMMIT;""") @@ -47,5 +49,16 @@ def add_entry(pageid: int, revid: int, logid: int, message): logger.debug("Adding an entry to the database (pageid: {}, revid: {}, logid: {}, message: {})".format(pageid, revid, logid, message)) db_connection.commit() +def clean_entries(): + """Cleans entries that are 50+""" + cleanup = db_cursor.execute( + "SELECT message_id FROM messages WHERE message_id NOT IN (SELECT message_id FROM messages ORDER BY message_id asc LIMIT 50);") + for row in cleanup: + db_cursor.execute("DELETE FROM messages WHERE message_id = ?", (cleanup[0])) + cleanup = db_cursor.execute("SELECT msg_id FROM event WHERE msg_id NOT IN (SELECT msg_id FROM event ORDER BY msg_id asc LIMIT 50);") + for row in cleanup: + db_cursor.execute("DELETE FROM event WHERE msg_id = ?", (cleanup[0])) + db_connection.commit() + db_connection, db_cursor = create_connection() check_tables() diff --git a/src/rc.py b/src/rc.py index 51e3b6d..1d4b5f6 100644 --- a/src/rc.py +++ b/src/rc.py @@ -6,7 +6,7 @@ import requests from bs4 import BeautifulSoup from src.configloader import settings -from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, LinkParser +from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, LinkParser, AUTO_SUPPRESSION_ENABLED from src.discord.queue import messagequeue from src.exceptions import MWError from src.session import session @@ -333,6 +333,9 @@ class Recent_Changes_Class(object): def clear_cache(self): self.map_ips = {} + if AUTO_SUPPRESSION_ENABLED: + from src.fileio.database import clean_entries + clean_entries() def init_info(self): startup_info = safe_read(self.safe_request(