Changed to function format instead of method

This commit is contained in:
Frisk 2021-04-27 09:35:15 +02:00
parent 18aae9eabe
commit 0db3be3e76
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
5 changed files with 125 additions and 86 deletions

View file

@ -44,22 +44,19 @@ _ = rc_formatters.gettext
logger = logging.getLogger("extensions.abusefilter") logger = logging.getLogger("extensions.abusefilter")
class abusefilter():
def __init__(self, api): @formatter.embed(event="abuselog/modify", mode="embed")
super().__init__(api) def embed_modify(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url)
embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"])))
embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId'])
return embed
@formatter.embed(event="abuselog/modify", mode="embed") @formatter.compact(event="abuselog/modify")
def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage: def embed_modify(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"])))
embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link)
embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) return DiscordMessage
return embed
@formatter.compact(event="abuselog/modify")
def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage:
link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"])))
content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link)
return DiscordMessage
``` ```

View file

@ -27,73 +27,69 @@ _ = rc_formatters.gettext
logger = logging.getLogger("extensions.base") logger = logging.getLogger("extensions.base")
class base(): @formatter.embed(event="edit", mode="embed")
def __init__(self, api): def embed_edit(ctx: Context, change: dict) -> DiscordMessage:
super().__init__(api) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
action = ctx.event
@formatter.embed(event="edit", mode="embed") editsize = change["newlen"] - change["oldlen"]
def embed_edit(self, ctx: Context, change: dict) -> DiscordMessage: if editsize > 0:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) if editsize > 6032:
action = ctx.event embed["color"] = 65280
editsize = change["newlen"] - change["oldlen"] else:
if editsize > 0: embed["color"] = 35840 + (math.floor(editsize / 52)) * 256
if editsize > 6032: elif editsize < 0:
embed["color"] = 65280 if editsize < -6032:
embed["color"] = 16711680
else:
embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536
elif editsize == 0:
embed["color"] = 8750469
if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited
ctx.client.refresh_internal_data()
embed.set_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format(
wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"],
article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")))
embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format(
redirect="" if "redirect" in change else "", article=change["title"], editsize="+" + str(
editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "",
minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "",
space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "")
if settings["appearance"]["embed"]["show_edit_changes"]:
try:
if action == "new":
changed_content = ctx.client.make_api_request(
"{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format(
wiki=ctx.client.WIKI_API_PATH, diff=change["revid"]
), "compare", "*")
else: else:
embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 changed_content = ctx.client.make_api_request(
elif editsize < 0: "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format(
if editsize < -6032: wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"]
embed["color"] = 16711680 ), "compare", "*")
else: except ServerError:
embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 changed_content = None
elif editsize == 0: if changed_content:
embed["color"] = 8750469 EditDiff = ctx.client.content_parser()
if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited EditDiff.feed(changed_content)
ctx.client.refresh_internal_data() if EditDiff.small_prev_del:
link = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( if EditDiff.small_prev_del.replace("~~", "").isspace():
wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], EditDiff.small_prev_del = _('__Only whitespace__')
article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26"))
embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format(
redirect="" if "redirect" in change else "", article=change["title"], editsize="+" + str(
editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "",
minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "",
space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "")
if settings["appearance"]["embed"]["show_edit_changes"]:
try:
if action == "new":
changed_content = ctx.client.make_api_request(
"{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format(
wiki=ctx.client.WIKI_API_PATH, diff=change["revid"]
), "compare", "*")
else: else:
changed_content = ctx.client.make_api_request( EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "")
"{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( if EditDiff.small_prev_ins:
wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] if EditDiff.small_prev_ins.replace("**", "").isspace():
), "compare", "*") EditDiff.small_prev_ins = _('__Only whitespace__')
except (ServerError): else:
changed_content = None EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "")
if changed_content: logger.debug("Changed content: {}".format(EditDiff.small_prev_ins))
EditDiff = ctx.client.content_parser() if EditDiff.small_prev_del and not action == "new":
EditDiff.feed(changed_content) embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True)
if EditDiff.small_prev_del: if EditDiff.small_prev_ins:
if EditDiff.small_prev_del.replace("~~", "").isspace(): embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True)
EditDiff.small_prev_del = _('__Only whitespace__') else:
else: logger.warning("Unable to download data on the edit content!")
EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") return embed
if EditDiff.small_prev_ins:
if EditDiff.small_prev_ins.replace("**", "").isspace():
EditDiff.small_prev_ins = _('__Only whitespace__')
else:
EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "")
logger.debug("Changed content: {}".format(EditDiff.small_prev_ins))
if EditDiff.small_prev_del and not action == "new":
embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True)
if EditDiff.small_prev_ins:
embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True)
else:
logger.warning("Unable to download data on the edit content!")
return embed
@formatter.compact(event="edit", mode="compact") @formatter.compact(event="edit", mode="compact")
def compact_edit(self, ctx: Context, change: dict): def compact_edit(ctx: Context, change: dict):
return DiscordMessage() return DiscordMessage()

View file

@ -23,4 +23,7 @@ class Context:
self.event = None self.event = None
def set_categories(self, cats): def set_categories(self, cats):
self.categories = cats self.categories = cats
def set_parsedcomment(self, parsedcomment: str):
self.parsedcomment = parsedcomment

View file

@ -18,7 +18,9 @@ from typing import Optional, Callable
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.configloader import settings from src.configloader import settings
import src.misc import src.misc
import logging
logger = logging.getLogger("src.api.util")
def default_message(event: str, formatter_hooks: dict) -> Callable: def default_message(event: str, formatter_hooks: dict) -> Callable:
"""Returns a method of a formatter responsible for the event or None if such does not exist.""" """Returns a method of a formatter responsible for the event or None if such does not exist."""
@ -37,4 +39,45 @@ def escape_formatting(data: str) -> str:
def create_article_path(article: str) -> str: def create_article_path(article: str) -> str:
"""Takes the string and creates an URL with it as the article name""" """Takes the string and creates an URL with it as the article name"""
return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) return src.misc.WIKI_ARTICLE_PATH.replace("$1", article)
def embed_helper(ctx, message: DiscordMessage, change: dict):
"""Helps in preparing common edit/log fields for events. Sets up:
author, author_url, icon"""
def format_user(change, recent_changes, action):
if "anon" in change:
author_url = create_article_path("Special:Contributions/{user}".format(
user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75
logger.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys()))
if change["user"] not in list(recent_changes.map_ips.keys()):
contibs = ctx.client.make_api_request(
"{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format(
wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query",
"usercontribs")
if contibs is None:
logger.warning(
"WARNING: Something went wrong when checking amount of contributions for given IP address")
if settings.get("hide_ips", False):
change["user"] = _("Unregistered user")
change["user"] = change["user"] + "(?)"
else:
recent_changes.map_ips[change["user"]] = len(contibs)
logger.debug(
"Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips))
if settings.get("hide_ips", False):
change["user"] = _("Unregistered user")
change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs))
else:
logger.debug(
"Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips))
if action in ("edit", "new"):
recent_changes.map_ips[change["user"]] += 1
change["user"] = "{author} ({amount})".format(
author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"),
amount=recent_changes.map_ips[change["user"]])
else:
author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_")))
message.set_author(change["user"], author_url)

View file

@ -245,6 +245,7 @@ def rc_processor(change, changed_categories):
parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment) parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment)
else: else:
parsed_comment = _("~~hidden~~") parsed_comment = _("~~hidden~~")
context.set_parsedcomment(parsed_comment)
if "userhidden" in change: if "userhidden" in change:
change["user"] = _("hidden") change["user"] = _("hidden")
if change.get("ns", -1) in settings.get("ignored_namespaces", ()): if change.get("ns", -1) in settings.get("ignored_namespaces", ()):
@ -268,6 +269,7 @@ def abuselog_processing(entry, recent_changes):
abuselog_appearance_mode(entry, recent_changes) abuselog_appearance_mode(entry, recent_changes)
load_extensions()
# Log in and download wiki information # Log in and download wiki information
wiki = Wiki(rc_processor, abuselog_processing) wiki = Wiki(rc_processor, abuselog_processing)
client = src.api.client.Client(formatter_hooks, wiki) client = src.api.client.Client(formatter_hooks, wiki)
@ -306,8 +308,6 @@ if 1 == 2: # additional translation strings in unreachable code
_("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1))
# noinspection PyUnreachableCode # noinspection PyUnreachableCode
load_extensions()
if TESTING: if TESTING:
logger.debug("DEBUGGING ") logger.debug("DEBUGGING ")