Kinda finished working on message deletion? Needs testing and fix for the PATCH requests

This commit is contained in:
Frisk 2020-11-16 23:09:34 +01:00
parent 5032716226
commit b2be691ccc
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
8 changed files with 32 additions and 17 deletions

View file

@ -1,5 +1,5 @@
cd .. cd ..
declare -a StringArray=("discussion_formatters" "rc_formatters" "rcgcdw" "rc" "misc") declare -a StringArray=("discussion_formatters" "rc_formatters" "rcgcdw" "rc" "misc", "redaction")
for file in ${StringArray[@]}; do for file in ${StringArray[@]}; do
xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py
done done

View file

@ -72,9 +72,9 @@ class DiscordMessage:
class DiscordMessageRaw(DiscordMessage): class DiscordMessageRaw(DiscordMessage):
def __init__(self, content: dict): def __init__(self, content: dict, webhook_url: str):
self.webhook_object = content self.webhook_object = content
self.webhook_url = webhook_url
class DiscordMessageMetadata: class DiscordMessageMetadata:
def __init__(self, method, log_id = None, page_id = None, rev_id = None, webhook_url = None, new_data = None): def __init__(self, method, log_id = None, page_id = None, rev_id = None, webhook_url = None, new_data = None):

View file

@ -121,7 +121,7 @@ def send_to_discord_webhook(data: Optional[DiscordMessage], metadata: DiscordMes
elif metadata.method == "DELETE": elif metadata.method == "DELETE":
req = requests.Request("DELETE", metadata.webhook_url, **standard_args) req = requests.Request("DELETE", metadata.webhook_url, **standard_args)
elif metadata.method == "PATCH": elif metadata.method == "PATCH":
req = requests.Request("PATCH", metadata.webhook_url, data=data, **standard_args) req = requests.Request("PATCH", data.webhook_url, data=repr(data), **standard_args)
try: try:
time.sleep(rate_limit) time.sleep(rate_limit)
rate_limit = 0 rate_limit = 0

View file

@ -1,11 +1,14 @@
import logging import logging
import json
from src.configloader import settings from src.configloader import settings
from src.discord.message import DiscordMessageMetadata, DiscordMessage, DiscordMessageRaw from src.discord.message import DiscordMessageMetadata, DiscordMessage, DiscordMessageRaw
from src.discord.queue import send_to_discord, messagequeue from src.discord.queue import send_to_discord, messagequeue
from src.fileio.database import db_cursor, db_connection from src.fileio.database import db_cursor, db_connection
from src.i18n import redaction as redaction_translation
logger = logging.getLogger("rcgcdw.discord.redaction") logger = logging.getLogger("rcgcdw.discord.redaction") # TODO Figure out why does this logger do not work
_ = redaction_translation.gettext
#ngettext = redaction_translation.ngettext
def delete_messages(matching_data: dict): def delete_messages(matching_data: dict):
@ -38,24 +41,30 @@ def redact_messages(ids: list, entry_type: int, to_censor: dict):
to_censor: dict - logparams of message parts to censor""" to_censor: dict - logparams of message parts to censor"""
for event_id in ids: for event_id in ids:
if entry_type == 0: # TODO check if queries are proper if entry_type == 0: # TODO check if queries are proper
message = db_cursor.execute("SELECT content FROM messages INNER JOIN event ON event.msg_id = messages.message_id WHERE event.revid = ?;", event_id) message = db_cursor.execute("SELECT content FROM messages INNER JOIN event ON event.msg_id = messages.message_id WHERE event.revid = ?;", (event_id, ))
else: else:
message = db_cursor.execute( message = db_cursor.execute(
"SELECT content FROM messages INNER JOIN event ON event.msg_id = messages.message_id WHERE event.logid = ?;", "SELECT content FROM messages INNER JOIN event ON event.msg_id = messages.message_id WHERE event.logid = ?;",
event_id) (event_id,))
if settings["appearance"]["mode"] == "embed": if settings["appearance"]["mode"] == "embed":
if message is not None: if message is not None:
message = message.fetchone() message = message.fetchone()
try:
message = json.loads(message[0])
new_embed = message["embeds"][0] new_embed = message["embeds"][0]
except ValueError:
logger.error("Couldn't loads JSON for message data. What happened? Data: {}".format(message[0]))
return
if "user" in to_censor: if "user" in to_censor:
new_embed["author"]["name"] = _("Removed") new_embed["author"]["name"] = _("Removed")
new_embed["author"].pop("url") new_embed["author"].pop("url")
if "action" in to_censor: if "action" in to_censor:
new_embed["title"] = _("Removed") new_embed["title"] = _("Removed")
new_embed.pop("url") new_embed.pop("url")
if "content" in to_censor:
new_embed.pop("fields")
if "comment" in to_censor: if "comment" in to_censor:
new_embed["description"] = _("Removed") new_embed["description"] = _("Removed")
message["embeds"][0] = new_embed message["embeds"][0] = new_embed
send_to_discord(DiscordMessageRaw(message), DiscordMessageMetadata("PATCH")) logger.debug(message)
send_to_discord(DiscordMessageRaw(message, settings["webhookURL"]), DiscordMessageMetadata("PATCH"))
raise NotImplemented

View file

@ -1,5 +1,6 @@
import sqlite3 import sqlite3
import logging import logging
import json
from src.configloader import settings from src.configloader import settings
logger = logging.getLogger("rcgcdw.fileio.database") logger = logging.getLogger("rcgcdw.fileio.database")
@ -44,7 +45,7 @@ def check_tables():
def add_entry(pageid: int, revid: int, logid: int, message): def add_entry(pageid: int, revid: int, logid: int, message):
"""Add an edit or log entry to the DB""" """Add an edit or log entry to the DB"""
db_cursor.execute("INSERT INTO messages (message_id, content) VALUES (?, ?)", (message.get("id"), str(message))) db_cursor.execute("INSERT INTO messages (message_id, content) VALUES (?, ?)", (message.get("id"), json.dumps(message)))
db_cursor.execute("INSERT INTO event (pageid, revid, logid, msg_id) VALUES (?, ?, ?, ?)", (pageid, revid, logid, message.get("id"))) db_cursor.execute("INSERT INTO event (pageid, revid, logid, msg_id) VALUES (?, ?, ?, ?)", (pageid, revid, logid, message.get("id")))
logger.debug("Adding an entry to the database (pageid: {}, revid: {}, logid: {}, message: {})".format(pageid, revid, logid, message)) logger.debug("Adding an entry to the database (pageid: {}, revid: {}, logid: {}, message: {})".format(pageid, revid, logid, message))
db_connection.commit() db_connection.commit()

View file

@ -11,8 +11,9 @@ try:
rc = gettext.translation('rc', localedir='locale', languages=[settings["lang"]]) rc = gettext.translation('rc', localedir='locale', languages=[settings["lang"]])
rc_formatters = gettext.translation('rc_formatters', localedir='locale', languages=[settings["lang"]]) rc_formatters = gettext.translation('rc_formatters', localedir='locale', languages=[settings["lang"]])
misc = gettext.translation('misc', localedir='locale', languages=[settings["lang"]]) misc = gettext.translation('misc', localedir='locale', languages=[settings["lang"]])
redaction = gettext.translation('redaction', localedir='locale', languages=[settings["lang"]])
else: else:
rcgcdw, discussion_formatters, rc, rc_formatters, misc = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations() rcgcdw, discussion_formatters, rc, rc_formatters, misc, redaction = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations()
except FileNotFoundError: except FileNotFoundError:
logger.critical("No language files have been found. Make sure locale folder is located in the directory.") logger.critical("No language files have been found. Make sure locale folder is located in the directory.")
sys.exit(1) sys.exit(1)

View file

@ -1,3 +0,0 @@

View file

@ -738,6 +738,13 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes):
embed["title"] = ngettext("Changed visibility of revision on page {article} ", embed["title"] = ngettext("Changed visibility of revision on page {article} ",
"Changed visibility of {amount} revisions on page {article} ", amount).format( "Changed visibility of {amount} revisions on page {article} ", amount).format(
article=change["title"], amount=amount) article=change["title"], amount=amount)
if AUTO_SUPPRESSION_ENABLED:
try:
logparams = change["logparams"]
except KeyError:
pass
else:
redact_messages(logparams.get("ids", []), 0, logparams.get("new", {}))
elif action == "import/upload": elif action == "import/upload":
link = create_article_path(change["title"]) link = create_article_path(change["title"])
embed["title"] = ngettext("Imported {article} with {count} revision", embed["title"] = ngettext("Imported {article} with {count} revision",