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 ..
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
xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py
done

View file

@ -72,9 +72,9 @@ class DiscordMessage:
class DiscordMessageRaw(DiscordMessage):
def __init__(self, content: dict):
def __init__(self, content: dict, webhook_url: str):
self.webhook_object = content
self.webhook_url = webhook_url
class DiscordMessageMetadata:
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":
req = requests.Request("DELETE", metadata.webhook_url, **standard_args)
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:
time.sleep(rate_limit)
rate_limit = 0

View file

@ -1,11 +1,14 @@
import logging
import json
from src.configloader import settings
from src.discord.message import DiscordMessageMetadata, DiscordMessage, DiscordMessageRaw
from src.discord.queue import send_to_discord, messagequeue
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):
@ -38,24 +41,30 @@ def redact_messages(ids: list, entry_type: int, to_censor: dict):
to_censor: dict - logparams of message parts to censor"""
for event_id in ids:
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:
message = db_cursor.execute(
"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 message is not None:
message = message.fetchone()
new_embed = message["embeds"][0]
try:
message = json.loads(message[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:
new_embed["author"]["name"] = _("Removed")
new_embed["author"].pop("url")
if "action" in to_censor:
new_embed["title"] = _("Removed")
new_embed.pop("url")
if "content" in to_censor:
new_embed.pop("fields")
if "comment" in to_censor:
new_embed["description"] = _("Removed")
message["embeds"][0] = new_embed
send_to_discord(DiscordMessageRaw(message), DiscordMessageMetadata("PATCH"))
raise NotImplemented
logger.debug(message)
send_to_discord(DiscordMessageRaw(message, settings["webhookURL"]), DiscordMessageMetadata("PATCH"))

View file

@ -1,5 +1,6 @@
import sqlite3
import logging
import json
from src.configloader import settings
logger = logging.getLogger("rcgcdw.fileio.database")
@ -44,7 +45,7 @@ def check_tables():
def add_entry(pageid: int, revid: int, logid: int, message):
"""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")))
logger.debug("Adding an entry to the database (pageid: {}, revid: {}, logid: {}, message: {})".format(pageid, revid, logid, message))
db_connection.commit()

View file

@ -11,8 +11,9 @@ try:
rc = gettext.translation('rc', 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"]])
redaction = gettext.translation('redaction', localedir='locale', languages=[settings["lang"]])
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:
logger.critical("No language files have been found. Make sure locale folder is located in the directory.")
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} ",
"Changed visibility of {amount} revisions on page {article} ", amount).format(
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":
link = create_article_path(change["title"])
embed["title"] = ngettext("Imported {article} with {count} revision",