Fixes that allowed to start RcGcDb

This commit is contained in:
Frisk 2022-10-03 15:34:36 +02:00
parent 08710b32b9
commit a947971858
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
22 changed files with 385 additions and 372 deletions

View file

@ -18,10 +18,12 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, sanitize_to_markdown
create_article_path, sanitize_to_markdown
abusefilter_translatable = lambda string, _, default: {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation"), "": _("None"), "warn": _("Warning issued"), "block": _("**Blocked user**"), "tag": _("Tagged the edit"), "disallow": _("Disallowed the action"), "rangeblock": _("**IP range blocked**"), "throttle": _("Throttled actions"), "blockautopromote": _("Removed autoconfirmed group"), "degroup": _("**Removed from privileged groups**")}.get(string, default) # Order results from most drastic first to less drastic last
abuselog_results = ["degroup", "blockautopromote", "rangeblock", "block", "disallow", "throttle", "warn", "tag", ""]
abusefilter_results = lambda string, _, default: {"degroup": _("**Removed from privileged groups**"), "blockautopromote": _("Removed autoconfirmed group"), "rangeblock": _("**IP range blocked**"), "block": _("**Blocked user**"), "disallow": _("Disallowed the action"), "throttle": _("Throttled actions"), "warn": _("Warning issued"), "tag": _("Tagged the edit"), "": _("None")}.get(string, default)
abusefilter_actions = lambda string, _, default: {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation")}.get(string, default)
logger = logging.getLogger("extensions.base") logger = logging.getLogger("extensions.base")
@ -29,6 +31,15 @@ logger = logging.getLogger("extensions.base")
# Processing Abuselog LOG events, separate from RC logs # Processing Abuselog LOG events, separate from RC logs
def abuselog_action(results):
action = "unknown"
for result in abuselog_results:
if result in results:
action = "abuselog/{}".format(result)
break
return action
def abuse_filter_format_user(change, settings): def abuse_filter_format_user(change, settings):
author = change["user"] author = change["user"]
if settings.get("hide_ips", False): if settings.get("hide_ips", False):
@ -43,36 +54,38 @@ def abuse_filter_format_user(change, settings):
@formatter.embed(event="abuselog") @formatter.embed(event="abuselog")
def embed_abuselog(ctx: Context, change: dict): def embed_abuselog(ctx: Context, change: dict):
action = "abuselog/{}".format(change["result"]) results = change["result"].split(",")
embed = DiscordMessage(ctx.message_type, action) action = abuselog_action(results)
embed = DiscordMessage(ctx.message_type, action, ctx.webhook_url)
author = abuse_filter_format_user(change, ctx.settings) author = abuse_filter_format_user(change, ctx.settings)
embed["title"] = ctx._("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=sanitize_to_markdown(change["filter"])) embed["title"] = ctx._("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=sanitize_to_markdown(change["filter"]))
embed.add_field(ctx._("Performed"), abusefilter_translatable(change["action"], ctx._, ctx._("Unknown"))) embed.add_field(ctx._("Performed"), abusefilter_actions(change["action"], ctx._, change["action"]))
embed.add_field(ctx._("Action taken"), abusefilter_translatable(change["result"], ctx._, ctx._("Unknown")))
embed.add_field(ctx._("Title"), sanitize_to_markdown(change.get("title", ctx._("Unknown")))) embed.add_field(ctx._("Title"), sanitize_to_markdown(change.get("title", ctx._("Unknown"))))
embed.add_field(ctx._("Action taken"), ctx._(", ").join([abusefilter_results(result, ctx._, result) for result in results]))
return embed return embed
@formatter.compact(event="abuselog") @formatter.compact(event="abuselog")
def compact_abuselog(ctx: Context, change: dict): def compact_abuselog(ctx: Context, change: dict):
action = "abuselog/{}".format(change["result"]) results = change["result"].split(",")
author_url = clean_link(create_article_path("User:{user}".format(user=change["user"]))) action = abuselog_action(results)
author_url = clean_link(ctx.client.create_article_path("User:{user}".format(user=change["user"])))
author = abuse_filter_format_user(change, ctx.settings) author = abuse_filter_format_user(change, ctx.settings)
message = ctx._("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format( message = ctx._("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format(
author=author, author_url=author_url, abuse_filter=sanitize_to_markdown(change["filter"]), author=author, author_url=author_url, abuse_filter=sanitize_to_markdown(change["filter"]),
action=abusefilter_translatable(change["action"], ctx._, ctx._("Unknown")), target=change.get("title", ctx._("Unknown")), action=abusefilter_actions(change["action"], ctx._, change["action"]), target=change.get("title", ctx._("Unknown")),
target_url=clean_link(create_article_path(sanitize_to_url(change.get("title", ctx._("Unknown"))))), target_url=clean_link(ctx.client.create_article_path(sanitize_to_url(change.get("title", ctx._("Unknown"))))),
result=abusefilter_translatable(change["result"], ctx._, ctx._("Unknown"))) result=ctx._(", ").join([abusefilter_results(result, ctx._, result) for result in results]))
return DiscordMessage(ctx.message_type, action, content=message) return DiscordMessage(ctx.message_type, action, ctx.webhook_url, content=message)
# abusefilter/modify - AbuseFilter filter modification # abusefilter/modify - AbuseFilter filter modification
@formatter.embed(event="abusefilter/modify") @formatter.embed(event="abusefilter/modify")
def embed_abuselog_modify(ctx: Context, change: dict): def embed_abuselog_modify(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path( embed["url"] = ctx.client.create_article_path(
"Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'],
historyid=change["logparams"]["historyId"])) historyid=change["logparams"]["historyId"]))
embed["title"] = ctx._("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) embed["title"] = ctx._("Edited abuse filter number {number}").format(number=change["logparams"]['newId'])
@ -82,7 +95,7 @@ def embed_abuselog_modify(ctx: Context, change: dict):
@formatter.compact(event="abusefilter/modify") @formatter.compact(event="abusefilter/modify")
def compact_abuselog_modify(ctx: Context, change: dict): def compact_abuselog_modify(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path( link = clean_link(ctx.client.create_article_path(
"Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'],
historyid=change["logparams"][ historyid=change["logparams"][
"historyId"]))) "historyId"])))
@ -93,16 +106,16 @@ def compact_abuselog_modify(ctx: Context, change: dict):
"logparams"][ "logparams"][
'newId'], 'newId'],
filter_url=link) filter_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# abusefilter/create - AbuseFilter filter creation # abusefilter/create - AbuseFilter filter creation
@formatter.embed(event="abusefilter/create") @formatter.embed(event="abusefilter/create")
def embed_abuselog_create(ctx: Context, change: dict): def embed_abuselog_create(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])) embed["url"] = ctx.client.create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))
embed["title"] = ctx._("Created abuse filter number {number}").format(number=change["logparams"]['newId']) embed["title"] = ctx._("Created abuse filter number {number}").format(number=change["logparams"]['newId'])
return embed return embed
@ -111,11 +124,11 @@ def embed_abuselog_create(ctx: Context, change: dict):
def compact_abuselog_create(ctx: Context, change: dict): def compact_abuselog_create(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link( link = clean_link(
create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))) ctx.client.create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])))
content = ctx._("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author, content = ctx._("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author,
author_url=author_url, author_url=author_url,
number=change[ number=change[
"logparams"][ "logparams"][
'newId'], 'newId'],
filter_url=link) filter_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -18,14 +18,14 @@ import re
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown from src.api.util import embed_helper, compact_author, sanitize_to_markdown
# Cargo - https://www.mediawiki.org/wiki/Extension:Cargo # Cargo - https://www.mediawiki.org/wiki/Extension:Cargo
# cargo/createtable - Creation of Cargo table # cargo/createtable - Creation of Cargo table
@formatter.embed(event="cargo/createtable") @formatter.embed(event="cargo/createtable")
def embed_cargo_createtable(ctx: Context, change: dict): def embed_cargo_createtable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
embed["url"] = table.group(2) embed["url"] = table.group(2)
@ -40,7 +40,7 @@ def compact_cargo_createtable(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) created the Cargo table \"{table}\"").format(author=author, content = ctx._("[{author}]({author_url}) created the Cargo table \"{table}\"").format(author=author,
author_url=author_url, author_url=author_url,
table=table) table=table)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# cargo/recreatetable - Recreating a Cargo table # cargo/recreatetable - Recreating a Cargo table
@ -48,7 +48,7 @@ def compact_cargo_createtable(ctx: Context, change: dict):
@formatter.embed(event="cargo/recreatetable") @formatter.embed(event="cargo/recreatetable")
def embed_cargo_recreatetable(ctx: Context, change: dict): def embed_cargo_recreatetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
embed["url"] = table.group(2) embed["url"] = table.group(2)
@ -63,7 +63,7 @@ def compact_cargo_recreatetable(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) recreated the Cargo table \"{table}\"").format(author=author, content = ctx._("[{author}]({author_url}) recreated the Cargo table \"{table}\"").format(author=author,
author_url=author_url, author_url=author_url,
table=table) table=table)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# cargo/replacetable - Replacing a Cargo table # cargo/replacetable - Replacing a Cargo table
@ -71,7 +71,7 @@ def compact_cargo_recreatetable(ctx: Context, change: dict):
@formatter.embed(event="cargo/replacetable") @formatter.embed(event="cargo/replacetable")
def embed_cargo_replacetable(ctx: Context, change: dict): def embed_cargo_replacetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
embed["url"] = table.group(2) embed["url"] = table.group(2)
@ -86,7 +86,7 @@ def compact_cargo_replacetable(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author, content = ctx._("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author,
author_url=author_url, author_url=author_url,
table=table) table=table)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# cargo/deletetable - Deleting a table in Cargo # cargo/deletetable - Deleting a table in Cargo
@ -94,9 +94,9 @@ def compact_cargo_replacetable(ctx: Context, change: dict):
@formatter.embed(event="cargo/deletetable") @formatter.embed(event="cargo/deletetable")
def embed_cargo_deletetable(ctx: Context, change: dict): def embed_cargo_deletetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path("Special:CargoTables") embed["url"] = ctx.client.create_article_path("Special:CargoTables")
embed["title"] = ctx._("Deleted the Cargo table \"{table}\"").format(table=sanitize_to_markdown(change["logparams"]["0"])) embed["title"] = ctx._("Deleted the Cargo table \"{table}\"").format(table=sanitize_to_markdown(change["logparams"]["0"]))
return embed return embed
@ -107,4 +107,4 @@ def compact_cargo_deletetable(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author, content = ctx._("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author,
author_url=author_url, author_url=author_url,
table=sanitize_to_markdown(change["logparams"]["0"])) table=sanitize_to_markdown(change["logparams"]["0"]))
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -18,7 +18,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url from src.api.util import embed_helper, clean_link, compact_author, sanitize_to_markdown, sanitize_to_url
from src.misc import profile_field_name from src.misc import profile_field_name
@ -28,7 +28,7 @@ from src.misc import profile_field_name
@formatter.embed(event="curseprofile/profile-edited") @formatter.embed(event="curseprofile/profile-edited")
def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -39,7 +39,7 @@ def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMess
embed["description"] = ctx._("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True)) embed["description"] = ctx._("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True))
else: else:
embed["description"] = ctx._("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment) embed["description"] = ctx._("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment)
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) embed["url"] = ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user))
return embed return embed
@ -47,7 +47,7 @@ def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMess
def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage: def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) link = clean_link(ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user)))
if target_user != author: if target_user != author:
if ctx.parsedcomment is None: # If the field is empty if ctx.parsedcomment is None: # If the field is empty
edit_clear_message = ctx._("[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s profile.") edit_clear_message = ctx._("[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s profile.")
@ -62,7 +62,7 @@ def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMe
edit_clear_message = ctx._("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*") edit_clear_message = ctx._("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*")
content = edit_clear_message.format(author=author, author_url=author_url, target_url=link, content = edit_clear_message.format(author=author, author_url=author_url, target_url=link,
field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment) field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# curseprofile/comment-created - Creating comment on user profile # curseprofile/comment-created - Creating comment on user profile
@ -70,7 +70,7 @@ def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMe
@formatter.embed(event="curseprofile/comment-created") @formatter.embed(event="curseprofile/comment-created")
def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -79,7 +79,7 @@ def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMes
embed["title"] = ctx._("Left a comment on their own profile") embed["title"] = ctx._("Left a comment on their own profile")
if ctx.settings["appearance"]["embed"]["show_edit_changes"]: if ctx.settings["appearance"]["embed"]["show_edit_changes"]:
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) embed["url"] = ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
return embed return embed
@ -87,13 +87,13 @@ def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMes
def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage: def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) link = clean_link(ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
if target_user != author: if target_user != author:
content = ctx._("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format( content = ctx._("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format(
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else: else:
content = ctx._("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) content = ctx._("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# curseprofile/comment-edited - Editing comment on user profile # curseprofile/comment-edited - Editing comment on user profile
@ -101,7 +101,7 @@ def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordM
@formatter.embed(event="curseprofile/comment-edited") @formatter.embed(event="curseprofile/comment-edited")
def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -110,7 +110,7 @@ def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMess
embed["title"] = ctx._("Edited a comment on their own profile") embed["title"] = ctx._("Edited a comment on their own profile")
if ctx.settings["appearance"]["embed"]["show_edit_changes"]: if ctx.settings["appearance"]["embed"]["show_edit_changes"]:
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) embed["url"] = ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
return embed return embed
@ -118,13 +118,13 @@ def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMess
def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage: def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) link = clean_link(ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
if target_user != author: if target_user != author:
content = ctx._("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format( content = ctx._("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format(
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else: else:
content = ctx._("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) content = ctx._("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# curseprofile/comment-replied - Replying to comment on user profile # curseprofile/comment-replied - Replying to comment on user profile
@ -132,7 +132,7 @@ def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMe
@formatter.embed(event="curseprofile/comment-replied") @formatter.embed(event="curseprofile/comment-replied")
def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -141,7 +141,7 @@ def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMes
embed["title"] = ctx._("Replied to a comment on their own profile") embed["title"] = ctx._("Replied to a comment on their own profile")
if ctx.settings["appearance"]["embed"]["show_edit_changes"]: if ctx.settings["appearance"]["embed"]["show_edit_changes"]:
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) embed["url"] = ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
return embed return embed
@ -149,13 +149,13 @@ def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMes
def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage: def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) link = clean_link(ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
if target_user != author: if target_user != author:
content = ctx._("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format( content = ctx._("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format(
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else: else:
content = ctx._("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) content = ctx._("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# curseprofile/comment-deleted - Deleting comment on user profile # curseprofile/comment-deleted - Deleting comment on user profile
@ -163,7 +163,7 @@ def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordM
@formatter.embed(event="curseprofile/comment-deleted") @formatter.embed(event="curseprofile/comment-deleted")
def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -173,9 +173,9 @@ def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMes
if ctx.parsedcomment is not None: if ctx.parsedcomment is not None:
embed["description"] = ctx.parsedcomment embed["description"] = ctx.parsedcomment
if "4:comment_id" in change["logparams"]: if "4:comment_id" in change["logparams"]:
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) embed["url"] = ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
else: else:
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) embed["url"] = ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user))
return embed return embed
@ -184,9 +184,9 @@ def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordM
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if "4:comment_id" in change["logparams"]: if "4:comment_id" in change["logparams"]:
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) link = clean_link(ctx.client.create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
else: else:
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) link = clean_link(ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user)))
parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*"
if target_user != author: if target_user != author:
content = ctx._("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format( content = ctx._("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format(
@ -194,7 +194,7 @@ def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordM
else: else:
content = ctx._("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format( content = ctx._("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format(
author=author, author_url=author_url, comment=link, reason=parsed_comment) author=author, author_url=author_url, comment=link, reason=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# curseprofile/comment-purged - Purging comment on user profile # curseprofile/comment-purged - Purging comment on user profile
@ -202,7 +202,7 @@ def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordM
@formatter.embed(event="curseprofile/comment-purged") @formatter.embed(event="curseprofile/comment-purged")
def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage: def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]: if target_user != change["user"]:
@ -211,7 +211,7 @@ def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMess
embed["title"] = ctx._("Purged a comment on their own profile") embed["title"] = ctx._("Purged a comment on their own profile")
if ctx.parsedcomment is not None: if ctx.parsedcomment is not None:
embed["description"] = ctx.parsedcomment embed["description"] = ctx.parsedcomment
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) embed["url"] = ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user))
return embed return embed
@ -219,11 +219,11 @@ def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMess
def compact_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage: def compact_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
target_user = change["title"].split(':', 1)[1] target_user = change["title"].split(':', 1)[1]
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) link = clean_link(ctx.client.create_article_path("UserProfile:" + sanitize_to_url(target_user)))
parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*"
if target_user != author: if target_user != author:
content = ctx._("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format( content = ctx._("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format(
author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment) author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment)
else: else:
content = ctx._("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link) content = ctx._("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content, reason=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content, reason=parsed_comment)

View file

@ -18,7 +18,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary from src.api.util import embed_helper, compact_author, sanitize_to_markdown, sanitize_to_url, compact_summary
# DataDumps - https://www.mediawiki.org/wiki/Extension:DataDump # DataDumps - https://www.mediawiki.org/wiki/Extension:DataDump
@ -27,10 +27,10 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="datadump/generate") @formatter.embed(event="datadump/generate")
def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage: def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["title"] = ctx._("Generated {file} dump").format(file=change["logparams"]["filename"]) embed["title"] = ctx._("Generated {file} dump").format(file=change["logparams"]["filename"])
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
return embed return embed
@ -42,17 +42,17 @@ def compact_datadump_generate(ctx: Context, change: dict):
author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]), author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]),
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# datadump/delete - Deleting a dump of a wiki # datadump/delete - Deleting a dump of a wiki
@formatter.embed(event="datadump/delete") @formatter.embed(event="datadump/delete")
def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["title"] = ctx._("Deleted {file} dump").format(file=sanitize_to_markdown(change["logparams"]["filename"])) embed["title"] = ctx._("Deleted {file} dump").format(file=sanitize_to_markdown(change["logparams"]["filename"]))
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
return embed return embed
@ -64,4 +64,4 @@ def compact_datadump_delete(ctx: Context, change: dict) -> DiscordMessage:
author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]), author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]),
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -18,7 +18,7 @@
import json import json
import datetime, logging import datetime, logging
from urllib.parse import quote_plus from urllib.parse import quote_plus
from src.api.util import create_article_path, clean_link, sanitize_to_markdown from src.api.util import clean_link, sanitize_to_markdown
from src.api.context import Context from src.api.context import Context
from src.discord.queue import send_to_discord from src.discord.queue import send_to_discord
from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.message import DiscordMessage, DiscordMessageMetadata
@ -137,7 +137,7 @@ def common_discussions(post: dict, embed: DiscordMessage, ctx: Context):
@formatter.embed(event="discussion/forum") @formatter.embed(event="discussion/forum")
def embed_discussion_forum(ctx: Context, post: dict): def embed_discussion_forum(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion") embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
common_discussions(post, embed, ctx) common_discussions(post, embed, ctx)
author = ctx._("unknown") # Fail safe author = ctx._("unknown") # Fail safe
if post["createdBy"]["name"]: if post["createdBy"]["name"]:
@ -181,7 +181,7 @@ def embed_discussion_forum(ctx: Context, post: dict):
if post["_embedded"]["thread"][0]["tags"]: if post["_embedded"]["thread"][0]["tags"]:
tag_displayname = [] tag_displayname = []
for tag in post["_embedded"]["thread"][0]["tags"]: for tag in post["_embedded"]["thread"][0]["tags"]:
tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=create_article_path( tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=ctx.client.create_article_path(
quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&")))) quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&"))))
if len(", ".join(tag_displayname)) > 1000: if len(", ".join(tag_displayname)) > 1000:
embed.add_field(ctx.pgettext("Fandom discussions Tags/Forums", "Tags"), ctx.pgettext("Fandom discussions amount of Tags/Forums", "{} tags").format(len(post["_embedded"]["thread"][0]["tags"]))) embed.add_field(ctx.pgettext("Fandom discussions Tags/Forums", "Tags"), ctx.pgettext("Fandom discussions amount of Tags/Forums", "{} tags").format(len(post["_embedded"]["thread"][0]["tags"])))
@ -229,7 +229,7 @@ def compact_discussion_forum(ctx: Context, post: dict):
author=author, author_url=author_url, url=ctx.settings["fandom_discussions"]["wiki_url"], author=author, author_url=author_url, url=ctx.settings["fandom_discussions"]["wiki_url"],
threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"],
forumName=post["forumName"]) forumName=post["forumName"])
return DiscordMessage("compact", event_type, content=message) return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
# discussion/wall - Wall posts/replies # discussion/wall - Wall posts/replies
@ -244,7 +244,7 @@ def compact_author_discussions(post: dict, ctx: Context):
else: else:
if post["createdBy"]["name"]: if post["createdBy"]["name"]:
author = post["createdBy"]["name"] author = post["createdBy"]["name"]
author_url = clean_link(create_article_path("User:{user}".format(user=author))) author_url = clean_link(ctx.client.create_article_path("User:{user}".format(user=author)))
else: else:
author_url = "<{url}f/u/{creatorId}>".format(url=ctx.settings["fandom_discussions"]["wiki_url"], author_url = "<{url}f/u/{creatorId}>".format(url=ctx.settings["fandom_discussions"]["wiki_url"],
creatorId=post["creatorId"]) creatorId=post["creatorId"])
@ -272,7 +272,7 @@ def embed_author_discussions(post: dict, embed: DiscordMessage, ctx: Context):
@formatter.embed(event="discussion/wall") @formatter.embed(event="discussion/wall")
def embed_discussion_wall(ctx: Context, post: dict): def embed_discussion_wall(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion") embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
common_discussions(post, embed, ctx) common_discussions(post, embed, ctx)
embed_author_discussions(post, embed, ctx) embed_author_discussions(post, embed, ctx)
user_wall = ctx._("unknown") # Fail safe user_wall = ctx._("unknown") # Fail safe
@ -313,14 +313,14 @@ def compact_discussion_wall(ctx: Context, post: dict):
author=author, author_url=author_url, url=ctx.settings["fandom_discussions"]["wiki_url"], author=author, author_url=author_url, url=ctx.settings["fandom_discussions"]["wiki_url"],
title=post["_embedded"]["thread"][0]["title"], user=user_wall, title=post["_embedded"]["thread"][0]["title"], user=user_wall,
user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"]) user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"])
return DiscordMessage("compact", event_type, content=message) return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
# discussion/article_comment - Article comments # discussion/article_comment - Article comments
@formatter.embed(event="discussion/article_comment") @formatter.embed(event="discussion/article_comment")
def embed_discussion_article_comment(ctx: Context, post: dict): def embed_discussion_article_comment(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion") embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
common_discussions(post, embed, ctx) common_discussions(post, embed, ctx)
embed_author_discussions(post, embed, ctx) embed_author_discussions(post, embed, ctx)
article_paths = ctx.comment_page article_paths = ctx.comment_page
@ -359,4 +359,4 @@ def compact_discussion_article_comment(ctx: Context, post: dict):
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format( "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format(
author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"], author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"],
commentId=post["threadId"], replyId=post["id"]) commentId=post["threadId"], replyId=post["id"])
return DiscordMessage("compact", event_type, content=message) return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)

View file

@ -18,7 +18,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_url, compact_summary from src.api.util import embed_helper, clean_link, compact_author, sanitize_to_url, compact_summary
# Interwiki - https://www.mediawiki.org/wiki/Extension:Interwiki # Interwiki - https://www.mediawiki.org/wiki/Extension:Interwiki
# interwiki/iw_add - Added entry to interwiki table # interwiki/iw_add - Added entry to interwiki table
@ -26,9 +26,9 @@ from src.api.util import embed_helper, clean_link, compact_author, create_articl
@formatter.embed(event="interwiki/iw_add", mode="embed") @formatter.embed(event="interwiki/iw_add", mode="embed")
def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki") embed["url"] = ctx.client.create_article_path("Special:Interwiki")
embed["title"] = ctx._("Added an entry to the interwiki table") embed["title"] = ctx._("Added an entry to the interwiki table")
embed["description"] = ctx._("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, embed["description"] = ctx._("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment,
prefix=change["logparams"]['0'], prefix=change["logparams"]['0'],
@ -39,13 +39,13 @@ def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
@formatter.compact(event="interwiki/iw_add") @formatter.compact(event="interwiki/iw_add")
def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path("Special:Interwiki")) link = clean_link(ctx.client.create_article_path("Special:Interwiki"))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(
author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'],
website=change["logparams"]['1'], table_url=link) website=change["logparams"]['1'], table_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# interwiki/iw_edit - Editing interwiki entry # interwiki/iw_edit - Editing interwiki entry
@ -53,9 +53,9 @@ def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
@formatter.embed(event="interwiki/iw_edit", mode="embed") @formatter.embed(event="interwiki/iw_edit", mode="embed")
def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki") embed["url"] = ctx.client.create_article_path("Special:Interwiki")
embed["title"] = ctx._("Edited an entry in interwiki table") embed["title"] = ctx._("Edited an entry in interwiki table")
embed["description"] = ctx._("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, embed["description"] = ctx._("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment,
prefix=change["logparams"]['0'], prefix=change["logparams"]['0'],
@ -66,13 +66,13 @@ def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
@formatter.compact(event="interwiki/iw_edit") @formatter.compact(event="interwiki/iw_edit")
def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path("Special:Interwiki")) link = clean_link(ctx.client.create_article_path("Special:Interwiki"))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(
author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'],
website=change["logparams"]['1'], table_url=link) website=change["logparams"]['1'], table_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# interwiki/iw_delete - Deleting interwiki entry # interwiki/iw_delete - Deleting interwiki entry
@ -80,9 +80,9 @@ def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
@formatter.embed(event="interwiki/iw_delete", mode="embed") @formatter.embed(event="interwiki/iw_delete", mode="embed")
def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki") embed["url"] = ctx.client.create_article_path("Special:Interwiki")
embed["title"] = ctx._("Deleted an entry in interwiki table") embed["title"] = ctx._("Deleted an entry in interwiki table")
embed["description"] = ctx._("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, embed["description"] = ctx._("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment,
prefix=change["logparams"]['0']) prefix=change["logparams"]['0'])
@ -92,7 +92,7 @@ def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
@formatter.compact(event="interwiki/iw_delete") @formatter.compact(event="interwiki/iw_delete")
def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path("Special:Interwiki")) link = clean_link(ctx.client.create_article_path("Special:Interwiki"))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( content = ctx._("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format(
author=author, author=author,
@ -100,4 +100,4 @@ def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
table_url=link, table_url=link,
desc=parsed_comment) desc=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -16,7 +16,7 @@
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary from src.api.util import embed_helper, compact_author, sanitize_to_markdown, sanitize_to_url, compact_summary
# ManageWiki - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:ManageWiki # ManageWiki - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:ManageWiki
@ -24,9 +24,9 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="managewiki/settings") @formatter.embed(event="managewiki/settings")
def embed_managewiki_settings(ctx: Context, change: dict): def embed_managewiki_settings(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed wiki settings") embed["title"] = ctx._("Changed wiki settings")
if change["logparams"].get("changes", ""): if change["logparams"].get("changes", ""):
embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes"))) embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes")))
@ -38,16 +38,16 @@ def compact_managewiki_settings(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment)) content = ctx._("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment))
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/delete - Deleting a wiki # managewiki/delete - Deleting a wiki
@formatter.embed(event="managewiki/delete") @formatter.embed(event="managewiki/delete")
def embed_managewiki_delete(ctx: Context, change: dict): def embed_managewiki_delete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown"))) embed["title"] = ctx._("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
return embed return embed
@ -62,16 +62,16 @@ def compact_managewiki_delete(ctx: Context, change: dict):
"logparams"].get("wiki", "logparams"].get("wiki",
ctx._("Unknown")), ctx._("Unknown")),
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/delete-group - Deleting a group # managewiki/delete-group - Deleting a group
@formatter.embed(event="managewiki/delete-group") @formatter.embed(event="managewiki/delete-group")
def embed_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage: def embed_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
group = change["title"].split("/")[-1] group = change["title"].split("/")[-1]
embed["title"] = ctx._("Deleted a \"{group}\" user group").format(wiki=group) embed["title"] = ctx._("Deleted a \"{group}\" user group").format(wiki=group)
return embed return embed
@ -86,16 +86,16 @@ def compact_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessag
author_url=author_url, author_url=author_url,
group=group, group=group,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/lock - Locking a wiki # managewiki/lock - Locking a wiki
@formatter.embed(event="managewiki/lock") @formatter.embed(event="managewiki/lock")
def embed_managewiki_lock(ctx: Context, change: dict): def embed_managewiki_lock(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown"))) embed["title"] = ctx._("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
return embed return embed
@ -107,16 +107,16 @@ def compact_managewiki_lock(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format( content = ctx._("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format(
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")),
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/namespaces - Modirying a wiki namespace # managewiki/namespaces - Modirying a wiki namespace
@formatter.embed(event="managewiki/namespaces") @formatter.embed(event="managewiki/namespaces")
def embed_managewiki_namespaces(ctx: Context, change: dict): def embed_managewiki_namespaces(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Modified \"{namespace_name}\" namespace").format( embed["title"] = ctx._("Modified \"{namespace_name}\" namespace").format(
namespace_name=change["logparams"].get("namespace", ctx._("Unknown"))) namespace_name=change["logparams"].get("namespace", ctx._("Unknown")))
embed.add_field(ctx._('Wiki'), change["logparams"].get("wiki", ctx._("Unknown"))) embed.add_field(ctx._('Wiki'), change["logparams"].get("wiki", ctx._("Unknown")))
@ -130,16 +130,16 @@ def compact_managewiki_namespaces(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format( content = ctx._("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format(
author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", ctx._("Unknown")), author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", ctx._("Unknown")),
wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), comment=parsed_comment) wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/namespaces-delete - Deleteing a namespace # managewiki/namespaces-delete - Deleteing a namespace
@formatter.embed(event="managewiki/namespaces-delete") @formatter.embed(event="managewiki/namespaces-delete")
def embed_managewiki_namespaces_delete(ctx: Context, change: dict): def embed_managewiki_namespaces_delete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted a \"{namespace_name}\" namespace").format( embed["title"] = ctx._("Deleted a \"{namespace_name}\" namespace").format(
namespace_name=change["logparams"].get("namespace", ctx._("Unknown"))) namespace_name=change["logparams"].get("namespace", ctx._("Unknown")))
embed.add_field(ctx._('Wiki'), change["logparams"].get("wiki", ctx._("Unknown"))) embed.add_field(ctx._('Wiki'), change["logparams"].get("wiki", ctx._("Unknown")))
@ -155,16 +155,16 @@ def compact_managewiki_namespaces_delete(ctx: Context, change: dict):
author=author, author_url=author_url, author=author, author_url=author_url,
namespace_name=change["logparams"].get("namespace", ctx._("Unknown")), namespace_name=change["logparams"].get("namespace", ctx._("Unknown")),
wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), comment=parsed_comment) wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/rights - Modifying user groups # managewiki/rights - Modifying user groups
@formatter.embed(event="managewiki/rights") @formatter.embed(event="managewiki/rights")
def embed_managewiki_rights(ctx: Context, change: dict): def embed_managewiki_rights(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
group_name = change["title"].split("/permissions/", 1)[1] group_name = change["title"].split("/permissions/", 1)[1]
embed["title"] = ctx._("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name) embed["title"] = ctx._("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name)
return embed return embed
@ -178,16 +178,16 @@ def compact_managewiki_rights(ctx: Context, change: dict):
content = ctx._("[{author}]({author_url}) modified user group *{group_name}*{comment}").format( content = ctx._("[{author}]({author_url}) modified user group *{group_name}*{comment}").format(
author=author, author_url=author_url, group_name=group_name, comment=parsed_comment author=author, author_url=author_url, group_name=group_name, comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/undelete - Restoring a wiki # managewiki/undelete - Restoring a wiki
@formatter.embed(event="managewiki/undelete") @formatter.embed(event="managewiki/undelete")
def embed_managewiki_undelete(ctx: Context, change: dict): def embed_managewiki_undelete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown"))) embed["title"] = ctx._("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
return embed return embed
@ -200,16 +200,16 @@ def compact_managewiki_undelete(ctx: Context, change: dict):
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")),
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managewiki/unlock - Unlocking a wiki # managewiki/unlock - Unlocking a wiki
@formatter.embed(event="managewiki/unlock") @formatter.embed(event="managewiki/unlock")
def embed_managewiki_unlock(ctx: Context, change: dict): def embed_managewiki_unlock(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown"))) embed["title"] = ctx._("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
return embed return embed
@ -222,4 +222,4 @@ def compact_managewiki_unlock(ctx: Context, change: dict):
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")),
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -23,7 +23,7 @@ from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \
create_article_path, sanitize_to_markdown, compact_summary sanitize_to_markdown, compact_summary
from src.exceptions import * from src.exceptions import *
logger = logging.getLogger("extensions.base") logger = logging.getLogger("extensions.base")
@ -39,7 +39,7 @@ if 1 == 2: # additional translation strings in unreachable code
@formatter.embed(event="edit", mode="embed", aliases=["new"]) @formatter.embed(event="edit", mode="embed", aliases=["new"])
def embed_edit(ctx: Context, change: dict) -> DiscordMessage: def embed_edit(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
action = ctx.event action = ctx.event
editsize = change["newlen"] - change["oldlen"] editsize = change["newlen"] - change["oldlen"]
if editsize > 0: if editsize > 0:
@ -113,14 +113,14 @@ def compact_edit(ctx: Context, change: dict) -> DiscordMessage:
"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), edit_link=edit_link, comment=parsed_comment, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), edit_link=edit_link, comment=parsed_comment,
edit_size=edit_size, sign=sign, bold=bold) edit_size=edit_size, sign=sign, bold=bold)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# Upload - upload/reupload, upload/upload # Upload - upload/reupload, upload/upload
@formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"]) @formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"])
def embed_upload_upload(ctx, change) -> DiscordMessage: def embed_upload_upload(ctx, change) -> DiscordMessage:
license = None license = None
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
action = ctx.event action = ctx.event
# Requesting more information on the image # Requesting more information on the image
request_for_image_data = None request_for_image_data = None
@ -154,7 +154,7 @@ def embed_upload_upload(ctx, change) -> DiscordMessage:
else: else:
logger.warning("Request for additional image information have failed. The preview will not be shown.") logger.warning("Request for additional image information have failed. The preview will not be shown.")
request_for_image_data = None request_for_image_data = None
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
image_direct_url = None image_direct_url = None
# Make a request for file revisions so we can get direct URL to the image for embed # Make a request for file revisions so we can get direct URL to the image for embed
if request_for_image_data is not None: if request_for_image_data is not None:
@ -228,29 +228,29 @@ def embed_upload_upload(ctx, change) -> DiscordMessage:
@formatter.compact(event="upload/revert", mode="compact") @formatter.compact(event="upload/revert", mode="compact")
def compact_upload_revert(ctx, change) -> DiscordMessage: def compact_upload_revert(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) file_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( content = ctx._("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format(
author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
@formatter.compact(event="upload/overwrite", mode="compact") @formatter.compact(event="upload/overwrite", mode="compact")
def compact_upload_overwrite(ctx, change) -> DiscordMessage: def compact_upload_overwrite(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) file_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format( content = ctx._("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format(
author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
@formatter.compact(event="upload/upload", mode="compact") @formatter.compact(event="upload/upload", mode="compact")
def compact_upload_upload(ctx, change) -> DiscordMessage: def compact_upload_upload(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) file_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, content = ctx._("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author,
author_url=author_url, author_url=author_url,
@ -258,15 +258,15 @@ def compact_upload_upload(ctx, change) -> DiscordMessage:
change["title"]), change["title"]),
file_link=file_link, file_link=file_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# delete/delete - Page deletion # delete/delete - Page deletion
@formatter.embed(event="delete/delete", mode="embed") @formatter.embed(event="delete/delete", mode="embed")
def embed_delete_delete(ctx, change) -> DiscordMessage: def embed_delete_delete(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed['url'] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted page {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Deleted page {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -275,22 +275,22 @@ def embed_delete_delete(ctx, change) -> DiscordMessage:
def compact_delete_delete(ctx, change) -> DiscordMessage: def compact_delete_delete(ctx, change) -> DiscordMessage:
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) page_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, content = ctx._("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author,
author_url=author_url, author_url=author_url,
page=sanitize_to_markdown( page=sanitize_to_markdown(
change["title"]), change["title"]),
page_link=page_link, page_link=page_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# delete/delete_redir - Redirect deletion # delete/delete_redir - Redirect deletion
@formatter.embed(event="delete/delete_redir", mode="embed") @formatter.embed(event="delete/delete_redir", mode="embed")
def embed_delete_delete_redir(ctx, change) -> DiscordMessage: def embed_delete_delete_redir(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed['url'] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted redirect {article} by overwriting").format( embed["title"] = ctx._("Deleted redirect {article} by overwriting").format(
article=sanitize_to_markdown(change["title"])) article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -298,13 +298,13 @@ def embed_delete_delete_redir(ctx, change) -> DiscordMessage:
@formatter.compact(event="delete/delete_redir", mode="compact") @formatter.compact(event="delete/delete_redir", mode="compact")
def compact_delete_delete_redir(ctx, change) -> DiscordMessage: def compact_delete_delete_redir(ctx, change) -> DiscordMessage:
page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) page_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( content = ctx._("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format(
author=author, author_url=author_url, page=sanitize_to_markdown(change["title"]), page_link=page_link, author=author, author_url=author_url, page=sanitize_to_markdown(change["title"]), page_link=page_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# delete/restore - Restoring a page # delete/restore - Restoring a page
@ -312,16 +312,16 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage:
@formatter.embed(event="delete/restore", mode="embed") @formatter.embed(event="delete/restore", mode="embed")
def embed_delete_restore(ctx, change) -> DiscordMessage: def embed_delete_restore(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed['url'] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Restored {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Restored {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@formatter.compact(event="delete/restore", mode="compact") @formatter.compact(event="delete/restore", mode="compact")
def compact_delete_restore(ctx, change) -> DiscordMessage: def compact_delete_restore(ctx, change) -> DiscordMessage:
page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) page_link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, content = ctx._("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author,
@ -330,7 +330,7 @@ def compact_delete_restore(ctx, change) -> DiscordMessage:
change["title"]), change["title"]),
article_url=page_link, article_url=page_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# delete/event - Deleting an event with revdelete feature # delete/event - Deleting an event with revdelete feature
@ -338,9 +338,9 @@ def compact_delete_restore(ctx, change) -> DiscordMessage:
@formatter.embed(event="delete/event", mode="embed") @formatter.embed(event="delete/event", mode="embed")
def embed_delete_event(ctx, change) -> DiscordMessage: def embed_delete_event(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed['url'] = create_article_path("Special:RecentChanges") embed['url'] = ctx.client.create_article_path("Special:RecentChanges")
embed["title"] = ctx._("Changed visibility of log events") embed["title"] = ctx._("Changed visibility of log events")
return embed return embed
@ -352,17 +352,17 @@ def compact_delete_event(ctx, change) -> DiscordMessage:
content = ctx._("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, content = ctx._("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author,
author_url=author_url, author_url=author_url,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# delete/revision - Deleting revision information # delete/revision - Deleting revision information
@formatter.embed(event="delete/revision", mode="embed") @formatter.embed(event="delete/revision", mode="embed")
def embed_delete_revision(ctx, change) -> DiscordMessage: def embed_delete_revision(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
amount = len(change["logparams"]["ids"]) amount = len(change["logparams"]["ids"])
embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed['url'] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx.ngettext("Changed visibility of revision on page {article} ", embed["title"] = ctx.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=sanitize_to_markdown(change["title"]), amount=amount) article=sanitize_to_markdown(change["title"]), amount=amount)
@ -373,14 +373,14 @@ def embed_delete_revision(ctx, change) -> DiscordMessage:
def compact_delete_revision(ctx, change) -> DiscordMessage: def compact_delete_revision(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
amount = len(change["logparams"]["ids"]) amount = len(change["logparams"]["ids"])
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx.ngettext( content = ctx.ngettext(
"[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}",
"[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}",
amount).format(author=author, author_url=author_url, amount).format(author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, amount=amount, comment=parsed_comment) article=sanitize_to_markdown(change["title"]), article_url=link, amount=amount, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# move/move - Moving pages # move/move - Moving pages
@ -388,9 +388,9 @@ def compact_delete_revision(ctx, change) -> DiscordMessage:
@formatter.embed(event="move/move", mode="embed") @formatter.embed(event="move/move", mode="embed")
def embed_move_move(ctx, change) -> DiscordMessage: def embed_move_move(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["logparams"]['target_title']))
embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment,
supress=ctx._("No redirect has been made") if "suppressredirect" in supress=ctx._("No redirect has been made") if "suppressredirect" in
change["logparams"] else ctx._("A redirect has been made")) change["logparams"] else ctx._("A redirect has been made"))
@ -404,7 +404,7 @@ def embed_move_move(ctx, change) -> DiscordMessage:
@formatter.compact(event="move/move", mode="compact") @formatter.compact(event="move/move", mode="compact")
def compact_move_move(ctx, change) -> DiscordMessage: def compact_move_move(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]['target_title'])))
redirect_status = ctx._("without making a redirect") if "suppressredirect" in change["logparams"] else ctx._( redirect_status = ctx._("without making a redirect") if "suppressredirect" in change["logparams"] else ctx._(
"with a redirect") "with a redirect")
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
@ -413,7 +413,7 @@ def compact_move_move(ctx, change) -> DiscordMessage:
author=author, author_url=author_url, redirect="" if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), author=author, author_url=author_url, redirect="" if "redirect" in change else "", article=sanitize_to_markdown(change["title"]),
target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment, target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment,
made_a_redirect=redirect_status) made_a_redirect=redirect_status)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# move/move_redir - Move over redirect # move/move_redir - Move over redirect
@ -421,9 +421,9 @@ def compact_move_move(ctx, change) -> DiscordMessage:
@formatter.embed(event="move/move_redir", mode="embed") @formatter.embed(event="move/move_redir", mode="embed")
def embed_move_move_redir(ctx, change) -> DiscordMessage: def embed_move_move_redir(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["logparams"]['target_title']))
embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment,
supress=ctx._("No redirect has been made") if "suppressredirect" in supress=ctx._("No redirect has been made") if "suppressredirect" in
change["logparams"] else ctx._("A redirect has been made")) change["logparams"] else ctx._("A redirect has been made"))
@ -436,7 +436,7 @@ def embed_move_move_redir(ctx, change) -> DiscordMessage:
@formatter.compact(event="move/move_redir", mode="compact") @formatter.compact(event="move/move_redir", mode="compact")
def compact_move_move_redir(ctx, change) -> DiscordMessage: def compact_move_move_redir(ctx, change) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]['target_title'])))
redirect_status = ctx._("without making a redirect") if "suppressredirect" in change["logparams"] else ctx._( redirect_status = ctx._("without making a redirect") if "suppressredirect" in change["logparams"] else ctx._(
"with a redirect") "with a redirect")
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
@ -446,7 +446,7 @@ def compact_move_move_redir(ctx, change) -> DiscordMessage:
article=sanitize_to_markdown(change["title"]), article=sanitize_to_markdown(change["title"]),
target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment, target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment,
made_a_redirect=redirect_status) made_a_redirect=redirect_status)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# protect/move_prot - Moving protection # protect/move_prot - Moving protection
@ -454,9 +454,9 @@ def compact_move_move_redir(ctx, change) -> DiscordMessage:
@formatter.embed(event="protect/move_prot", mode="embed") @formatter.embed(event="protect/move_prot", mode="embed")
def embed_protect_move_prot(ctx, change): def embed_protect_move_prot(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))
embed["title"] = ctx._("Moved protection settings from {redirect}{article} to {title}").format( embed["title"] = ctx._("Moved protection settings from {redirect}{article} to {title}").format(
redirect="" if "redirect" in change else "", redirect="" if "redirect" in change else "",
article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]),
@ -467,14 +467,14 @@ def embed_protect_move_prot(ctx, change):
@formatter.compact(event="protect/move_prot", mode="compact") @formatter.compact(event="protect/move_prot", mode="compact")
def compact_protect_move_prot(ctx, change): def compact_protect_move_prot(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format( "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format(
author=author, author_url=author_url, redirect="" if "redirect" in change else "", author=author, author_url=author_url, redirect="" if "redirect" in change else "",
article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]),
target=sanitize_to_markdown(change["title"]), target_url=link, comment=parsed_comment) target=sanitize_to_markdown(change["title"]), target_url=link, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# protect/protect - Creating protection # protect/protect - Creating protection
@ -482,9 +482,9 @@ def compact_protect_move_prot(ctx, change):
@formatter.embed(event="protect/protect", mode="embed") @formatter.embed(event="protect/protect", mode="embed")
def embed_protect_protect(ctx, change): def embed_protect_protect(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Protected {target}").format(target=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Protected {target}").format(target=sanitize_to_markdown(change["title"]))
embed["description"] = "{settings}{cascade} | {reason}".format( embed["description"] = "{settings}{cascade} | {reason}".format(
settings=sanitize_to_markdown(change["logparams"].get("description", "")), settings=sanitize_to_markdown(change["logparams"].get("description", "")),
@ -496,7 +496,7 @@ def embed_protect_protect(ctx, change):
@formatter.compact(event="protect/protect", mode="compact") @formatter.compact(event="protect/protect", mode="compact")
def compact_protect_protect(ctx, change): def compact_protect_protect(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format( "[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format(
@ -505,7 +505,7 @@ def compact_protect_protect(ctx, change):
settings=change["logparams"].get("description", "") + ( settings=change["logparams"].get("description", "") + (
ctx._(" [cascading]") if "cascade" in change["logparams"] else ""), ctx._(" [cascading]") if "cascade" in change["logparams"] else ""),
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# protect/modify - Changing protection settings # protect/modify - Changing protection settings
@ -513,9 +513,9 @@ def compact_protect_protect(ctx, change):
@formatter.embed(event="protect/modify", mode="embed") @formatter.embed(event="protect/modify", mode="embed")
def embed_protect_modify(ctx, change): def embed_protect_modify(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"]))
embed["description"] = "{settings}{cascade} | {reason}".format( embed["description"] = "{settings}{cascade} | {reason}".format(
settings=sanitize_to_markdown(change["logparams"].get("description", "")), settings=sanitize_to_markdown(change["logparams"].get("description", "")),
@ -527,7 +527,7 @@ def embed_protect_modify(ctx, change):
@formatter.compact(event="protect/modify", mode="compact") @formatter.compact(event="protect/modify", mode="compact")
def compact_protect_modify(ctx, change): def compact_protect_modify(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format(
@ -536,7 +536,7 @@ def compact_protect_modify(ctx, change):
settings=sanitize_to_markdown(change["logparams"].get("description", "")) + ( settings=sanitize_to_markdown(change["logparams"].get("description", "")) + (
ctx._(" [cascading]") if "cascade" in change["logparams"] else ""), ctx._(" [cascading]") if "cascade" in change["logparams"] else ""),
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# protect/unprotect - Unprotecting a page # protect/unprotect - Unprotecting a page
@ -544,9 +544,9 @@ def compact_protect_modify(ctx, change):
@formatter.embed(event="protect/unprotect", mode="embed") @formatter.embed(event="protect/unprotect", mode="embed")
def embed_protect_unprotect(ctx, change): def embed_protect_unprotect(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed protection from {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Removed protection from {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -554,12 +554,12 @@ def embed_protect_unprotect(ctx, change):
@formatter.compact(event="protect/unprotect", mode="compact") @formatter.compact(event="protect/unprotect", mode="compact")
def compact_protect_unprotect(ctx, change): def compact_protect_unprotect(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format( content = ctx._("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# block/block - Blocking an user # block/block - Blocking an user
@ -590,13 +590,13 @@ def block_expiry(change: dict, ctx: Context) -> str:
@formatter.embed(event="block/block", mode="embed") @formatter.embed(event="block/block", mode="embed")
def embed_block_block(ctx, change): def embed_block_block(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
user = change["title"].split(':', 1)[1] user = change["title"].split(':', 1)[1]
try: try:
ipaddress.ip_address(user) ipaddress.ip_address(user)
embed["url"] = create_article_path("Special:Contributions/{user}".format(user=user)) embed["url"] = ctx.client.create_article_path("Special:Contributions/{user}".format(user=user))
except ValueError: except ValueError:
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "sitewide" not in change["logparams"]: if "sitewide" not in change["logparams"]:
restriction_description = "" restriction_description = ""
if "restrictions" in change["logparams"]: if "restrictions" in change["logparams"]:
@ -639,9 +639,9 @@ def compact_block_block(ctx, change):
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
try: try:
ipaddress.ip_address(user) ipaddress.ip_address(user)
link = clean_link(create_article_path("Special:Contributions/{user}".format(user=user))) link = clean_link(ctx.client.create_article_path("Special:Contributions/{user}".format(user=user)))
except ValueError: except ValueError:
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
else: else:
if "sitewide" not in change["logparams"]: if "sitewide" not in change["logparams"]:
if "restrictions" in change["logparams"]: if "restrictions" in change["logparams"]:
@ -676,15 +676,15 @@ def compact_block_block(ctx, change):
user_url=link, user_url=link,
restriction_desc=restriction_description, restriction_desc=restriction_description,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# block/reblock - Changing settings of a block # block/reblock - Changing settings of a block
@formatter.embed(event="block/reblock", mode="embed") @formatter.embed(event="block/reblock", mode="embed")
def embed_block_reblock(ctx, change): def embed_block_reblock(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
user = change["title"].split(':', 1)[1] user = change["title"].split(':', 1)[1]
embed["title"] = ctx._("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) embed["title"] = ctx._("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user))
return embed return embed
@ -693,21 +693,21 @@ def embed_block_reblock(ctx, change):
@formatter.compact(event="block/reblock") @formatter.compact(event="block/reblock")
def compact_block_reblock(ctx, change): def compact_block_reblock(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
user = change["title"].split(':', 1)[1] user = change["title"].split(':', 1)[1]
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( content = ctx._("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format(
author=author, author_url=author_url, blocked_user=sanitize_to_markdown(user), user_url=link, comment=parsed_comment) author=author, author_url=author_url, blocked_user=sanitize_to_markdown(user), user_url=link, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# block/unblock - Unblocking an user # block/unblock - Unblocking an user
@formatter.embed(event="block/unblock", mode="embed") @formatter.embed(event="block/unblock", mode="embed")
def embed_block_unblock(ctx, change): def embed_block_unblock(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
user = change["title"].split(':', 1)[1] user = change["title"].split(':', 1)[1]
embed["title"] = ctx._("Unblocked {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) embed["title"] = ctx._("Unblocked {blocked_user}").format(blocked_user=sanitize_to_markdown(user))
return embed return embed
@ -716,7 +716,7 @@ def embed_block_unblock(ctx, change):
@formatter.compact(event="block/unblock") @formatter.compact(event="block/unblock")
def compact_block_unblock(ctx, change): def compact_block_unblock(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
user = change["title"].split(':', 1)[1] user = change["title"].split(':', 1)[1]
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, content = ctx._("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author,
@ -725,7 +725,7 @@ def compact_block_unblock(ctx, change):
user_url=link, user_url=link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# suppressed - Custom event for whenever there is limited information available about the event due to revdel # suppressed - Custom event for whenever there is limited information available about the event due to revdel
@ -733,8 +733,8 @@ def compact_block_unblock(ctx, change):
@formatter.embed(event="suppressed", mode="embed") @formatter.embed(event="suppressed", mode="embed")
def embed_suppressed(ctx, change): def embed_suppressed(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed["url"] = create_article_path("") embed["url"] = ctx.client.create_article_path("")
embed["title"] = ctx._("Action has been hidden by administration") embed["title"] = ctx._("Action has been hidden by administration")
embed["author"]["name"] = ctx._("Unknown") embed["author"]["name"] = ctx._("Unknown")
return embed return embed
@ -743,16 +743,16 @@ def embed_suppressed(ctx, change):
@formatter.compact(event="suppressed", mode="compact") @formatter.compact(event="suppressed", mode="compact")
def compact_suppressed(ctx, change): def compact_suppressed(ctx, change):
content = ctx._("An action has been hidden by administration.") content = ctx._("An action has been hidden by administration.")
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# import/upload - Importing pages by uploading exported XML files # import/upload - Importing pages by uploading exported XML files
@formatter.embed(event="import/upload", mode="embed") @formatter.embed(event="import/upload", mode="embed")
def embed_import_upload(ctx, change): def embed_import_upload(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx.ngettext("Imported {article} with {count} revision", embed["title"] = ctx.ngettext("Imported {article} with {count} revision",
"Imported {article} with {count} revisions", change["logparams"]["count"]).format( "Imported {article} with {count} revisions", change["logparams"]["count"]).format(
article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"]) article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"])
@ -761,7 +761,7 @@ def embed_import_upload(ctx, change):
@formatter.compact(event="import/upload", mode="compact") @formatter.compact(event="import/upload", mode="compact")
def compact_import_upload(ctx, change): def compact_import_upload(ctx, change):
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx.ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", content = ctx.ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}",
@ -769,7 +769,7 @@ def compact_import_upload(ctx, change):
change["logparams"]["count"]).format( change["logparams"]["count"]).format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
count=change["logparams"]["count"], comment=parsed_comment) count=change["logparams"]["count"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# import/interwiki - Importing interwiki entries # import/interwiki - Importing interwiki entries
@ -777,9 +777,9 @@ def compact_import_upload(ctx, change):
@formatter.embed(event="import/interwiki", mode="embed") @formatter.embed(event="import/interwiki", mode="embed")
def embed_import_interwiki(ctx, change): def embed_import_interwiki(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx.ngettext("Imported {article} with {count} revision from \"{source}\"", embed["title"] = ctx.ngettext("Imported {article} with {count} revision from \"{source}\"",
"Imported {article} with {count} revisions from \"{source}\"", "Imported {article} with {count} revisions from \"{source}\"",
change["logparams"]["count"]).format( change["logparams"]["count"]).format(
@ -790,9 +790,9 @@ def embed_import_interwiki(ctx, change):
@formatter.compact(event="import/interwiki", mode="compact") @formatter.compact(event="import/interwiki", mode="compact")
def compact_import_interwiki(ctx, change): def compact_import_interwiki(ctx, change):
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
source_link = clean_link(create_article_path(change["logparams"]["interwiki_title"])) source_link = clean_link(ctx.client.create_article_path(change["logparams"]["interwiki_title"]))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx.ngettext( content = ctx.ngettext(
"[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}",
@ -802,7 +802,7 @@ def compact_import_interwiki(ctx, change):
count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]), count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]),
source_url=source_link, source_url=source_link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# rights/rights - Assigning rights groups # rights/rights - Assigning rights groups
@ -824,8 +824,8 @@ def get_changed_groups(change: dict, ctx: Context) -> [[str], [str]]:
@formatter.embed(event="rights/rights", aliases=["rights/autopromote"]) @formatter.embed(event="rights/rights", aliases=["rights/autopromote"])
def embed_rights_rights(ctx, change): def embed_rights_rights(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) embed["url"] = ctx.client.create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1])))
if ctx.event == "rights/rights": if ctx.event == "rights/rights":
embed["title"] = ctx._("Changed group membership for {target}").format(target=sanitize_to_markdown(change["title"].split(":")[1])) embed["title"] = ctx._("Changed group membership for {target}").format(target=sanitize_to_markdown(change["title"].split(":")[1]))
else: else:
@ -845,7 +845,7 @@ def embed_rights_rights(ctx, change):
@formatter.compact(event="rights/rights", aliases=["rights/autopromote"]) @formatter.compact(event="rights/rights", aliases=["rights/autopromote"])
def compact_rights_rights(ctx, change): def compact_rights_rights(ctx, change):
link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) link = clean_link(ctx.client.create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1]))))
added, removed = get_changed_groups(change, ctx) added, removed = get_changed_groups(change, ctx)
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
@ -865,16 +865,16 @@ def compact_rights_rights(ctx, change):
content = ctx._("The system autopromoted [{target}]({target_url}) to {added}.{comment}").format( content = ctx._("The system autopromoted [{target}]({target_url}) to {added}.{comment}").format(
target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link,
added=ctx._(", ").join(added), comment=parsed_comment) added=ctx._(", ").join(added), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# merge/merge - Merging histories of two pages # merge/merge - Merging histories of two pages
@formatter.embed(event="merge/merge", mode="embed") @formatter.embed(event="merge/merge", mode="embed")
def embed_merge_merge(ctx, change): def embed_merge_merge(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Merged revision histories of {article} into {dest}").format( embed["title"] = ctx._("Merged revision histories of {article} into {dest}").format(
article=sanitize_to_markdown(change["title"]), article=sanitize_to_markdown(change["title"]),
dest=sanitize_to_markdown(change["logparams"][ dest=sanitize_to_markdown(change["logparams"][
@ -886,13 +886,13 @@ def embed_merge_merge(ctx, change):
def compact_merge_merge(ctx, change): def compact_merge_merge(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) link_dest = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["dest_title"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format( "[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, dest_url=link_dest, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, dest_url=link_dest,
dest=sanitize_to_markdown(change["logparams"]["dest_title"]), comment=parsed_comment) dest=sanitize_to_markdown(change["logparams"]["dest_title"]), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/autocreate - Auto creation of user account # newusers/autocreate - Auto creation of user account
@ -900,9 +900,9 @@ def compact_merge_merge(ctx, change):
@formatter.embed(event="newusers/autocreate", mode="embed") @formatter.embed(event="newusers/autocreate", mode="embed")
def embed_newusers_autocreate(ctx, change): def embed_newusers_autocreate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account automatically") embed["title"] = ctx._("Created account automatically")
return embed return embed
@ -912,7 +912,7 @@ def compact_newusers_autocreate(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created automatically").format(author=author, content = ctx._("Account [{author}]({author_url}) was created automatically").format(author=author,
author_url=author_url) author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/create - Auto creation of user account # newusers/create - Auto creation of user account
@ -920,9 +920,9 @@ def compact_newusers_autocreate(ctx, change):
@formatter.embed(event="newusers/create", mode="embed") @formatter.embed(event="newusers/create", mode="embed")
def embed_newusers_create(ctx, change): def embed_newusers_create(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account") embed["title"] = ctx._("Created account")
return embed return embed
@ -931,7 +931,7 @@ def embed_newusers_create(ctx, change):
def compact_newusers_create(ctx, change): def compact_newusers_create(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/autocreate - Auto creation of user account # newusers/autocreate - Auto creation of user account
@ -939,9 +939,9 @@ def compact_newusers_create(ctx, change):
@formatter.embed(event="newusers/create2", mode="embed") @formatter.embed(event="newusers/create2", mode="embed")
def embed_newusers_create2(ctx, change): def embed_newusers_create2(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Created account {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -950,10 +950,10 @@ def embed_newusers_create2(ctx, change):
def compact_newusers_create2(ctx, change): def compact_newusers_create2(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format( content = ctx._("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format(
article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment) article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/byemail - Creation of account by email # newusers/byemail - Creation of account by email
@ -961,9 +961,9 @@ def compact_newusers_create2(ctx, change):
@formatter.embed(event="newusers/byemail", mode="embed") @formatter.embed(event="newusers/byemail", mode="embed")
def embed_newusers_byemail(ctx, change): def embed_newusers_byemail(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account {article} and password was sent by email").format( embed["title"] = ctx._("Created account {article} and password was sent by email").format(
article=sanitize_to_markdown(change["title"])) article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -973,11 +973,11 @@ def embed_newusers_byemail(ctx, change):
def compact_newusers_byemail(ctx, change): def compact_newusers_byemail(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._( content = ctx._(
"Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format( "Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format(
article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment) article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/newusers - New users # newusers/newusers - New users
@ -985,9 +985,9 @@ def compact_newusers_byemail(ctx, change):
@formatter.embed(event="newusers/newusers", mode="embed") @formatter.embed(event="newusers/newusers", mode="embed")
def embed_newusers_newusers(ctx, change): def embed_newusers_newusers(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["user"]))) embed["url"] = ctx.client.create_article_path(sanitize_to_url("User:{}".format(change["user"])))
embed["title"] = ctx._("Created account") embed["title"] = ctx._("Created account")
return embed return embed
@ -996,7 +996,7 @@ def embed_newusers_newusers(ctx, change):
def compact_newusers_newusers(ctx, change): def compact_newusers_newusers(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# newusers/reclaim - New user reclaimed # newusers/reclaim - New user reclaimed
@ -1004,9 +1004,9 @@ def compact_newusers_newusers(ctx, change):
@formatter.embed(event="newusers/reclaim", mode="embed") @formatter.embed(event="newusers/reclaim", mode="embed")
def embed_newusers_reclaim(ctx, change): def embed_newusers_reclaim(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["user"]))) embed["url"] = ctx.client.create_article_path(sanitize_to_url("User:{}".format(change["user"])))
embed["title"] = ctx._("Reclaimed account") embed["title"] = ctx._("Reclaimed account")
return embed return embed
@ -1015,7 +1015,7 @@ def embed_newusers_reclaim(ctx, change):
def compact_newusers_reclaim(ctx, change): def compact_newusers_reclaim(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was reclaimed").format(author=author, author_url=author_url) content = ctx._("Account [{author}]({author_url}) was reclaimed").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# contentmodel/change - Changing the content model of a page # contentmodel/change - Changing the content model of a page
@ -1023,9 +1023,9 @@ def compact_newusers_reclaim(ctx, change):
@formatter.embed(event="contentmodel/change", mode="embed") @formatter.embed(event="contentmodel/change", mode="embed")
def embed_contentmodel_change(ctx, change): def embed_contentmodel_change(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed the content model of the page {article}").format( embed["title"] = ctx._("Changed the content model of the page {article}").format(
article=sanitize_to_markdown(change["title"])) article=sanitize_to_markdown(change["title"]))
embed["description"] = ctx._("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], embed["description"] = ctx._("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"],
@ -1037,14 +1037,14 @@ def embed_contentmodel_change(ctx, change):
@formatter.compact(event="contentmodel/change") @formatter.compact(event="contentmodel/change")
def compact_contentmodel_change(ctx, change): def compact_contentmodel_change(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format( "[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
old=change["logparams"]["oldmodel"], old=change["logparams"]["oldmodel"],
new=change["logparams"]["newmodel"], comment=parsed_comment) new=change["logparams"]["newmodel"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# contentmodel/new - Creating a page with non-default content model # contentmodel/new - Creating a page with non-default content model
@ -1052,9 +1052,9 @@ def compact_contentmodel_change(ctx, change):
@formatter.embed(event="contentmodel/new", mode="embed") @formatter.embed(event="contentmodel/new", mode="embed")
def embed_contentmodel_new(ctx, change): def embed_contentmodel_new(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change, set_desc=False) embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created the page {article} using a non-default content model").format( embed["title"] = ctx._("Created the page {article} using a non-default content model").format(
article=sanitize_to_markdown(change["title"])) article=sanitize_to_markdown(change["title"]))
embed["description"] = ctx._("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], embed["description"] = ctx._("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"],
@ -1065,13 +1065,13 @@ def embed_contentmodel_new(ctx, change):
@formatter.compact(event="contentmodel/new") @formatter.compact(event="contentmodel/new")
def compact_contentmodel_new(ctx, change): def compact_contentmodel_new(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format( "[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
new=change["logparams"]["newmodel"], comment=parsed_comment) new=change["logparams"]["newmodel"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managetags/create - Creating log tags # managetags/create - Creating log tags
@ -1079,10 +1079,10 @@ def compact_contentmodel_new(ctx, change):
@formatter.embed(event="managetags/create", mode="embed") @formatter.embed(event="managetags/create", mode="embed")
def embed_managetags_create(ctx, change): def embed_managetags_create(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
ctx.client.refresh_internal_data() ctx.client.refresh_internal_data()
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) embed["title"] = ctx._("Created the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
return embed return embed
@ -1090,7 +1090,7 @@ def embed_managetags_create(ctx, change):
@formatter.compact(event="managetags/create") @formatter.compact(event="managetags/create")
def compact_managetags_create(ctx, change): def compact_managetags_create(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
ctx.client.refresh_internal_data() ctx.client.refresh_internal_data()
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, content = ctx._("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author,
@ -1103,7 +1103,7 @@ def compact_managetags_create(ctx, change):
tag_url=link, tag_url=link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managetags/delete - Deleting a tag # managetags/delete - Deleting a tag
@ -1111,9 +1111,9 @@ def compact_managetags_create(ctx, change):
@formatter.embed(event="managetags/delete", mode="embed") @formatter.embed(event="managetags/delete", mode="embed")
def embed_managetags_delete(ctx, change): def embed_managetags_delete(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
ctx.client.refresh_internal_data() ctx.client.refresh_internal_data()
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) embed["title"] = ctx._("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
if change["logparams"]["count"] > 0: if change["logparams"]["count"] > 0:
embed.add_field(ctx._('Removed from'), ctx.ngettext("{} revision or log entry", "{} revisions and/or log entries", embed.add_field(ctx._('Removed from'), ctx.ngettext("{} revision or log entry", "{} revisions and/or log entries",
@ -1125,7 +1125,7 @@ def embed_managetags_delete(ctx, change):
@formatter.compact(event="managetags/delete") @formatter.compact(event="managetags/delete")
def compact_managetags_delete(ctx, change): def compact_managetags_delete(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
ctx.client.refresh_internal_data() ctx.client.refresh_internal_data()
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
if change["logparams"]["count"] == 0: if change["logparams"]["count"] == 0:
@ -1145,7 +1145,7 @@ def compact_managetags_delete(ctx, change):
tag=sanitize_to_markdown(change["logparams"]["tag"]), tag=sanitize_to_markdown(change["logparams"]["tag"]),
tag_url=link, count=change["logparams"]["count"], tag_url=link, count=change["logparams"]["count"],
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managetags/activate - Activating a tag # managetags/activate - Activating a tag
@ -1153,9 +1153,9 @@ def compact_managetags_delete(ctx, change):
@formatter.embed(event="managetags/activate", mode="embed") @formatter.embed(event="managetags/activate", mode="embed")
def embed_managetags_activate(ctx, change): def embed_managetags_activate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) embed["title"] = ctx._("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
return embed return embed
@ -1163,7 +1163,7 @@ def embed_managetags_activate(ctx, change):
@formatter.compact(event="managetags/activate") @formatter.compact(event="managetags/activate")
def compact_managetags_activate(ctx, change): def compact_managetags_activate(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, content = ctx._("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author,
author_url=author_url, author_url=author_url,
@ -1173,7 +1173,7 @@ def compact_managetags_activate(ctx, change):
"tag"]), "tag"]),
tag_url=link, tag_url=link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# managetags/deactivate - Deactivating a tag # managetags/deactivate - Deactivating a tag
@ -1181,9 +1181,9 @@ def compact_managetags_activate(ctx, change):
@formatter.embed(event="managetags/deactivate", mode="embed") @formatter.embed(event="managetags/deactivate", mode="embed")
def embed_managetags_deactivate(ctx, change): def embed_managetags_deactivate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) embed["title"] = ctx._("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
return embed return embed
@ -1191,7 +1191,7 @@ def embed_managetags_deactivate(ctx, change):
@formatter.compact(event="managetags/deactivate") @formatter.compact(event="managetags/deactivate")
def compact_managetags_deactivate(ctx, change): def compact_managetags_deactivate(ctx, change):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
content = ctx._("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, content = ctx._("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author,
author_url=author_url, author_url=author_url,
@ -1201,4 +1201,4 @@ def compact_managetags_deactivate(ctx, change):
"tag"]), "tag"]),
tag_url=link, tag_url=link,
comment=parsed_comment) comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -18,7 +18,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_summary, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url from src.api.util import embed_helper, compact_summary, clean_link, compact_author, sanitize_to_markdown, sanitize_to_url
# Renameuser - https://www.mediawiki.org/wiki/Extension:Renameuser # Renameuser - https://www.mediawiki.org/wiki/Extension:Renameuser
# renameuser/renameuser - Renaming a user # renameuser/renameuser - Renaming a user
@ -26,7 +26,7 @@ from src.api.util import embed_helper, compact_summary, clean_link, compact_auth
@formatter.embed(event="renameuser/renameuser") @formatter.embed(event="renameuser/renameuser")
def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
edits = change["logparams"]["edits"] edits = change["logparams"]["edits"]
if edits > 0: if edits > 0:
@ -38,14 +38,14 @@ def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
embed["title"] = ctx._("Renamed user \"{old_name}\" to \"{new_name}\"").format( embed["title"] = ctx._("Renamed user \"{old_name}\" to \"{new_name}\"").format(
old_name=sanitize_to_markdown(change["logparams"]["olduser"]), old_name=sanitize_to_markdown(change["logparams"]["olduser"]),
new_name=sanitize_to_markdown(change["logparams"]["newuser"])) new_name=sanitize_to_markdown(change["logparams"]["newuser"]))
embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) embed["url"] = ctx.client.create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))
return embed return embed
@formatter.compact(event="renameuser/renameuser") @formatter.compact(event="renameuser/renameuser")
def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) link = clean_link(ctx.client.create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])))
edits = change["logparams"]["edits"] edits = change["logparams"]["edits"]
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
if edits > 0: if edits > 0:
@ -62,4 +62,4 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]),
new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -17,8 +17,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ from src.api.util import embed_helper, compact_author, sanitize_to_markdown, sanitize_to_url, clean_link
clean_link
# SpriteSheet - https://www.mediawiki.org/wiki/Extension:SpriteSheet # SpriteSheet - https://www.mediawiki.org/wiki/Extension:SpriteSheet
@ -27,9 +26,9 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="sprite/sprite") @formatter.embed(event="sprite/sprite")
def embed_sprite_sprite(ctx: Context, change: dict): def embed_sprite_sprite(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -37,22 +36,22 @@ def embed_sprite_sprite(ctx: Context, change: dict):
@formatter.compact(event="sprite/sprite") @formatter.compact(event="sprite/sprite")
def compact_sprite_sprite(ctx: Context, change: dict): def compact_sprite_sprite(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author, content = ctx._("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author,
author_url=author_url, author_url=author_url,
article=sanitize_to_markdown(change[ article=sanitize_to_markdown(change[
"title"]), "title"]),
article_url=link) article_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# sprite/sheet - Creating a sprite sheet # sprite/sheet - Creating a sprite sheet
@formatter.embed(event="sprite/sheet") @formatter.embed(event="sprite/sheet")
def embed_sprite_sheet(ctx: Context, change: dict): def embed_sprite_sheet(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created the sprite sheet for {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Created the sprite sheet for {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -60,28 +59,28 @@ def embed_sprite_sheet(ctx: Context, change: dict):
@formatter.compact(event="sprite/sheet") @formatter.compact(event="sprite/sheet")
def compact_sprite_sheet(ctx: Context, change: dict): def compact_sprite_sheet(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) created the sprite sheet for [{article}]({article_url})").format(author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link) content = ctx._("[{author}]({author_url}) created the sprite sheet for [{article}]({article_url})").format(author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# sprite/slice - Editing a slice # sprite/slice - Editing a slice
@formatter.embed(event="sprite/slice") @formatter.embed(event="sprite/slice")
def embed_sprite_slice(ctx: Context, change: dict): def embed_sprite_slice(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Edited the slice for {article}").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Edited the slice for {article}").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@formatter.compact(event="sprite/slice") @formatter.compact(event="sprite/slice")
def compact_sprite_slice(ctx: Context, change: dict): def compact_sprite_slice(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author, content = ctx._("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author,
author_url=author_url, author_url=author_url,
article=sanitize_to_markdown(change[ article=sanitize_to_markdown(change[
"title"]), "title"]),
article_url=link) article_url=link)
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -17,8 +17,7 @@ import logging
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.api import formatter from src.api import formatter
from src.api.context import Context from src.api.context import Context
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ from src.api.util import embed_helper, compact_author, sanitize_to_markdown, sanitize_to_url, clean_link, compact_summary
clean_link, compact_summary
# I cried when I realized I have to migrate Translate extension logs, but this way I atone for my countless sins # I cried when I realized I have to migrate Translate extension logs, but this way I atone for my countless sins
# Translate - https://www.mediawiki.org/wiki/Extension:Translate # Translate - https://www.mediawiki.org/wiki/Extension:Translate
@ -27,9 +26,9 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="pagetranslation/mark") @formatter.embed(event="pagetranslation/mark")
def embed_pagetranslation_mark(ctx: Context, change: dict): def embed_pagetranslation_mark(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
link = create_article_path(sanitize_to_url(change["title"])) link = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "?" in link: if "?" in link:
embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"]) embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"])
else: else:
@ -41,7 +40,7 @@ def embed_pagetranslation_mark(ctx: Context, change: dict):
@formatter.compact(event="pagetranslation/mark") @formatter.compact(event="pagetranslation/mark")
def compact_pagetranslation_mark(ctx: Context, change: dict): def compact_pagetranslation_mark(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
link = create_article_path(sanitize_to_url(change["title"])) link = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "?" in link: if "?" in link:
link = link + "&oldid={}".format(change["logparams"]["revision"]) link = link + "&oldid={}".format(change["logparams"]["revision"])
else: else:
@ -53,16 +52,16 @@ def compact_pagetranslation_mark(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/unmark - Removing a page from translation system # pagetranslation/unmark - Removing a page from translation system
@formatter.embed(event="pagetranslation/unmark") @formatter.embed(event="pagetranslation/unmark")
def embed_pagetranslation_unmark(ctx: Context, change: dict): def embed_pagetranslation_unmark(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -71,23 +70,23 @@ def embed_pagetranslation_unmark(ctx: Context, change: dict):
def compact_pagetranslation_unmark(ctx: Context, change: dict): def compact_pagetranslation_unmark(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format( "[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/moveok - Completed moving translation page # pagetranslation/moveok - Completed moving translation page
@formatter.embed(event="pagetranslation/moveok") @formatter.embed(event="pagetranslation/moveok")
def embed_pagetranslation_moveok(ctx: Context, change: dict): def embed_pagetranslation_moveok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["logparams"]["target"]))
embed["title"] = ctx._("Completed moving translation pages from \"{article}\" to \"{target}\"").format( embed["title"] = ctx._("Completed moving translation pages from \"{article}\" to \"{target}\"").format(
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
return embed return embed
@ -97,23 +96,23 @@ def embed_pagetranslation_moveok(ctx: Context, change: dict):
def compact_pagetranslation_moveok(ctx: Context, change: dict): def compact_pagetranslation_moveok(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["target"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format( "[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]), article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]),
target_url=link, comment=parsed_comment target_url=link, comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/movenok - Failed while moving translation page # pagetranslation/movenok - Failed while moving translation page
@formatter.embed(event="pagetranslation/movenok") @formatter.embed(event="pagetranslation/movenok")
def embed_pagetranslation_movenok(ctx: Context, change: dict): def embed_pagetranslation_movenok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Encountered a problem while moving \"{article}\" to \"{target}\"").format( embed["title"] = ctx._("Encountered a problem while moving \"{article}\" to \"{target}\"").format(
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
return embed return embed
@ -123,8 +122,8 @@ def embed_pagetranslation_movenok(ctx: Context, change: dict):
def compact_pagetranslation_movenok(ctx: Context, change: dict): def compact_pagetranslation_movenok(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) target_url = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["target"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) encountered a problem while moving [{article}]({article_url}) to [{target}]({target_url}){comment}").format( "[{author}]({author_url}) encountered a problem while moving [{article}]({article_url}) to [{target}]({target_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
@ -132,16 +131,16 @@ def compact_pagetranslation_movenok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/deletefnok - Failure in deletion of translatable page # pagetranslation/deletefnok - Failure in deletion of translatable page
@formatter.embed(event="pagetranslation/deletefnok") @formatter.embed(event="pagetranslation/deletefnok")
def embed_pagetranslation_deletefnok(ctx: Context, change: dict): def embed_pagetranslation_deletefnok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format( embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format(
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
return embed return embed
@ -151,8 +150,8 @@ def embed_pagetranslation_deletefnok(ctx: Context, change: dict):
def compact_pagetranslation_deletefnok(ctx: Context, change: dict): def compact_pagetranslation_deletefnok(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) target_url = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["target"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translatable page [{target}]({target_url}){comment}").format( "[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translatable page [{target}]({target_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
@ -160,16 +159,16 @@ def compact_pagetranslation_deletefnok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/deletelok - Completion in deleting a page? # pagetranslation/deletelok - Completion in deleting a page?
@formatter.embed(event="pagetranslation/deletelok") @formatter.embed(event="pagetranslation/deletelok")
def embed_pagetranslation_deletelok(ctx: Context, change: dict): def embed_pagetranslation_deletelok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Completed deletion of translation page \"{article}\"").format( embed["title"] = ctx._("Completed deletion of translation page \"{article}\"").format(
article=sanitize_to_markdown(change["title"])) article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -179,23 +178,23 @@ def embed_pagetranslation_deletelok(ctx: Context, change: dict):
def compact_pagetranslation_deletelok(ctx: Context, change: dict): def compact_pagetranslation_deletelok(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format( "[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/deletelnok - Failure in deletion of article belonging to a translation page # pagetranslation/deletelnok - Failure in deletion of article belonging to a translation page
@formatter.embed(event="pagetranslation/deletelnok") @formatter.embed(event="pagetranslation/deletelnok")
def embed_pagetranslation_deletelnok(ctx: Context, change: dict): def embed_pagetranslation_deletelnok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format( embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format(
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
return embed return embed
@ -205,8 +204,8 @@ def embed_pagetranslation_deletelnok(ctx: Context, change: dict):
def compact_pagetranslation_deletelnok(ctx: Context, change: dict): def compact_pagetranslation_deletelnok(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) target_url = clean_link(ctx.client.create_article_path(sanitize_to_url(change["logparams"]["target"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translation page [{target}]({target_url}){comment}").format( "[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translation page [{target}]({target_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
@ -214,16 +213,16 @@ def compact_pagetranslation_deletelnok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/encourage - Encouraging to translate an article # pagetranslation/encourage - Encouraging to translate an article
@formatter.embed(event="pagetranslation/encourage") @formatter.embed(event="pagetranslation/encourage")
def embed_pagetranslation_encourage(ctx: Context, change: dict): def embed_pagetranslation_encourage(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -232,22 +231,22 @@ def embed_pagetranslation_encourage(ctx: Context, change: dict):
def compact_pagetranslation_encourage(ctx: Context, change: dict): def compact_pagetranslation_encourage(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format( content = ctx._("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/discourage - Discouraging to translate an article # pagetranslation/discourage - Discouraging to translate an article
@formatter.embed(event="pagetranslation/discourage") @formatter.embed(event="pagetranslation/discourage")
def embed_pagetranslation_discourage(ctx: Context, change: dict): def embed_pagetranslation_discourage(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
return embed return embed
@ -256,22 +255,22 @@ def embed_pagetranslation_discourage(ctx: Context, change: dict):
def compact_pagetranslation_discourage(ctx: Context, change: dict): def compact_pagetranslation_discourage(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format( content = ctx._("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/prioritylanguages - Changing the priority of translations? # pagetranslation/prioritylanguages - Changing the priority of translations?
@formatter.embed(event="pagetranslation/prioritylanguages") @formatter.embed(event="pagetranslation/prioritylanguages")
def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict): def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "languages" in change["logparams"]: if "languages" in change["logparams"]:
languages = "`, `".join(change["logparams"]["languages"].split(",")) languages = "`, `".join(change["logparams"]["languages"].split(","))
if change["logparams"]["force"] == "on": if change["logparams"]["force"] == "on":
@ -289,7 +288,7 @@ def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict):
def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict): def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
if "languages" in change["logparams"]: if "languages" in change["logparams"]:
languages = "`, `".join(change["logparams"]["languages"].split(",")) languages = "`, `".join(change["logparams"]["languages"].split(","))
if change["logparams"]["force"] == "on": if change["logparams"]["force"] == "on":
@ -313,7 +312,7 @@ def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/associate - Adding an article to translation group # pagetranslation/associate - Adding an article to translation group
@ -321,9 +320,9 @@ def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
@formatter.embed(event="pagetranslation/associate") @formatter.embed(event="pagetranslation/associate")
def embed_pagetranslation_associate(ctx: Context, change: dict): def embed_pagetranslation_associate(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Added translatable page \"{article}\" to aggregate group \"{group}\"").format( embed["title"] = ctx._("Added translatable page \"{article}\" to aggregate group \"{group}\"").format(
article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"])
return embed return embed
@ -333,23 +332,23 @@ def embed_pagetranslation_associate(ctx: Context, change: dict):
def compact_pagetranslation_associate(ctx: Context, change: dict): def compact_pagetranslation_associate(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format( "[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
group=change["logparams"]["aggregategroup"], comment=parsed_comment group=change["logparams"]["aggregategroup"], comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagetranslation/dissociate - Removing an article from translation group # pagetranslation/dissociate - Removing an article from translation group
@formatter.embed(event="pagetranslation/dissociate") @formatter.embed(event="pagetranslation/dissociate")
def embed_pagetranslation_dissociate(ctx: Context, change: dict): def embed_pagetranslation_dissociate(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format( embed["title"] = ctx._("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format(
article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"])
return embed return embed
@ -359,23 +358,23 @@ def embed_pagetranslation_dissociate(ctx: Context, change: dict):
def compact_pagetranslation_dissociate(ctx: Context, change: dict): def compact_pagetranslation_dissociate(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
content = ctx._( content = ctx._(
"[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format( "[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format(
author=author, author_url=author_url, author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
group=change["logparams"]["aggregategroup"], comment=parsed_comment group=change["logparams"]["aggregategroup"], comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# translationreview/message - Reviewing translation # translationreview/message - Reviewing translation
@formatter.embed(event="translationreview/message") @formatter.embed(event="translationreview/message")
def embed_translationreview_message(ctx: Context, change: dict): def embed_translationreview_message(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
link = create_article_path(sanitize_to_url(change["title"])) link = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "?" in link: if "?" in link:
embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"]) embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"])
else: else:
@ -388,7 +387,7 @@ def embed_translationreview_message(ctx: Context, change: dict):
def compact_translationreview_message(ctx: Context, change: dict): def compact_translationreview_message(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = create_article_path(sanitize_to_url(change["title"])) link = ctx.client.create_article_path(sanitize_to_url(change["title"]))
if "?" in link: if "?" in link:
link = link + "&oldid={}".format(change["logparams"]["revision"]) link = link + "&oldid={}".format(change["logparams"]["revision"])
else: else:
@ -399,16 +398,16 @@ def compact_translationreview_message(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# translationreview/group - Changing of state for group translation? # translationreview/group - Changing of state for group translation?
@formatter.embed(event="translationreview/group") @formatter.embed(event="translationreview/group")
def embed_translationreview_group(ctx: Context, change: dict): def embed_translationreview_group(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed the state of `{language}` translations of \"{article}\"").format( embed["title"] = ctx._("Changed the state of `{language}` translations of \"{article}\"").format(
language=change["logparams"]["language"], article=sanitize_to_markdown(change["title"])) language=change["logparams"]["language"], article=sanitize_to_markdown(change["title"]))
if "old-state" in change["logparams"]: if "old-state" in change["logparams"]:
@ -421,7 +420,7 @@ def embed_translationreview_group(ctx: Context, change: dict):
def compact_translationreview_group(ctx: Context, change: dict): def compact_translationreview_group(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
if "old-state" in change["logparams"]: if "old-state" in change["logparams"]:
content = ctx._( content = ctx._(
"[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}").format( "[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}").format(
@ -437,7 +436,7 @@ def compact_translationreview_group(ctx: Context, change: dict):
article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link, article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link,
new_state=change["logparams"]["new-state"], comment=parsed_comment new_state=change["logparams"]["new-state"], comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
# pagelang/pagelang - Changing the language of a page # pagelang/pagelang - Changing the language of a page
@ -453,9 +452,9 @@ def get_languages(change: dict, ctx: Context):
@formatter.embed(event="pagelang/pagelang") @formatter.embed(event="pagelang/pagelang")
def embed_pagelang_pagelang(ctx: Context, change: dict): def embed_pagelang_pagelang(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event) embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed_helper(ctx, embed, change) embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["url"] = ctx.client.create_article_path(sanitize_to_url(change["title"]))
old_lang, new_lang = get_languages(change, ctx) old_lang, new_lang = get_languages(change, ctx)
embed["title"] = ctx._("Changed the language of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) embed["title"] = ctx._("Changed the language of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
embed.add_field(ctx._("Old language"), old_lang, inline=True) embed.add_field(ctx._("Old language"), old_lang, inline=True)
@ -467,7 +466,7 @@ def embed_pagelang_pagelang(ctx: Context, change: dict):
def compact_pagelang_pagelang(ctx: Context, change: dict): def compact_pagelang_pagelang(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change) author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx) parsed_comment = compact_summary(ctx)
link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link = clean_link(ctx.client.create_article_path(sanitize_to_url(change["title"])))
old_lang, new_lang = get_languages(change, ctx) old_lang, new_lang = get_languages(change, ctx)
content = ctx._( content = ctx._(
"[{author}]({author_url}) changed the language of [{article}]({article_url}) from {old_lang} to {new_lang}{comment}").format( "[{author}]({author_url}) changed the language of [{article}]({article_url}) from {old_lang} to {new_lang}{comment}").format(
@ -475,4 +474,4 @@ def compact_pagelang_pagelang(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link, article=sanitize_to_markdown(change["title"]), article_url=link,
old_lang=old_lang, new_lang=new_lang, comment=parsed_comment old_lang=old_lang, new_lang=new_lang, comment=parsed_comment
) )
return DiscordMessage(ctx.message_type, ctx.event, content=content) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)

View file

@ -13,3 +13,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>. # along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
#import extensions.hooks.example_hook
#import extensions.hooks.usertalk
#import extensions.hooks.edit_alerts

View file

@ -18,7 +18,7 @@ from __future__ import annotations
from datetime import datetime from datetime import datetime
import src.misc import src.misc
import sched import sched
from typing import Union, Callable from typing import Union, Callable, Any
from collections import OrderedDict from collections import OrderedDict
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
@ -43,7 +43,7 @@ class Client:
self.scheduler: sched.scheduler = sched.scheduler() self.scheduler: sched.scheduler = sched.scheduler()
#self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request
def schedule(self, function: Callable, *args: list, every: Optional[float] = None, at: Optional[str] = None, def schedule(self, function: Callable, *args: Any, every: Optional[float] = None, at: Optional[str] = None,
priority: int = 5, **kwargs: dict): priority: int = 5, **kwargs: dict):
"""Schedules a function indefinitely, does not execute function immediately """Schedules a function indefinitely, does not execute function immediately
@ -79,6 +79,10 @@ class Client:
"""Refreshes internal storage data for wiki tags and MediaWiki messages.""" """Refreshes internal storage data for wiki tags and MediaWiki messages."""
self.__recent_changes.init_info() self.__recent_changes.init_info()
def create_article_path(self, article: str) -> str:
"""Takes the string and creates an URL with it as the article name"""
return self.WIKI_ARTICLE_PATH.replace("$1", article)
@property @property
def namespaces(self) -> dict: def namespaces(self) -> dict:
"""Return a dict of namespaces, if None return empty dict""" """Return a dict of namespaces, if None return empty dict"""

View file

@ -26,7 +26,7 @@ class Context:
they are mainly used as a bridge between part that fetches the changes and API's formatters""" they are mainly used as a bridge between part that fetches the changes and API's formatters"""
def __init__(self, message_type: str, feed_type: str, webhook_urls: list[str], client: Client, language: gettext.GNUTranslations, settings: dict): def __init__(self, message_type: str, feed_type: str, webhook_urls: list[str], client: Client, language: gettext.GNUTranslations, settings: dict):
self.client = client self.client = client
self.webhook_urls = webhook_urls self.webhook_url = webhook_urls
self.message_type = message_type self.message_type = message_type
self.feed_type = feed_type self.feed_type = feed_type
self.categories = None self.categories = None
@ -50,4 +50,4 @@ class Context:
self.comment_page = page self.comment_page = page
def __str__(self): def __str__(self):
return f"<Context message_type={self.message_type} feed_type={self.feed_type} event={self.event} webhook_urls={self.webhook_urls}" return f"<Context message_type={self.message_type} feed_type={self.feed_type} event={self.event} webhook_urls={self.webhook_url}"

View file

@ -14,7 +14,6 @@
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>. # along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
import src.api.hooks import src.api.hooks
import logging import logging
from src.configloader import settings
from src.exceptions import FormatterBreaksAPISpec from src.exceptions import FormatterBreaksAPISpec
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from typing import Optional, Callable from typing import Optional, Callable

View file

@ -19,12 +19,9 @@ from typing import Optional, Callable, TYPE_CHECKING
from src.exceptions import ServerError, MediaWikiError from src.exceptions import ServerError, MediaWikiError
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.configloader import settings from src.config import settings
import src.misc import src.misc
import logging import logging
from src.i18n import formatters_i18n
_ = formatters_i18n.gettext
if TYPE_CHECKING: if TYPE_CHECKING:
from src.api.context import Context from src.api.context import Context
@ -58,24 +55,19 @@ def parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage) -
edit_diff.feed(content) edit_diff.feed(content)
if edit_diff.small_prev_del: if edit_diff.small_prev_del:
if edit_diff.small_prev_del.replace("~~", "").replace("__", "").isspace(): if edit_diff.small_prev_del.replace("~~", "").replace("__", "").isspace():
edit_diff.small_prev_del = _('__Only whitespace__') edit_diff.small_prev_del = ctx._('__Only whitespace__')
else: else:
edit_diff.small_prev_del = edit_diff.small_prev_del.replace("~~~~", "").replace("____", "") edit_diff.small_prev_del = edit_diff.small_prev_del.replace("~~~~", "").replace("____", "")
if edit_diff.small_prev_ins: if edit_diff.small_prev_ins:
if edit_diff.small_prev_ins.replace("**", "").replace("__", "").isspace(): if edit_diff.small_prev_ins.replace("**", "").replace("__", "").isspace():
edit_diff.small_prev_ins = _('__Only whitespace__') edit_diff.small_prev_ins = ctx._('__Only whitespace__')
else: else:
edit_diff.small_prev_ins = edit_diff.small_prev_ins.replace("****", "").replace("____", "") edit_diff.small_prev_ins = edit_diff.small_prev_ins.replace("****", "").replace("____", "")
logger.debug("Changed content: {}".format(edit_diff.small_prev_ins)) logger.debug("Changed content: {}".format(edit_diff.small_prev_ins))
if edit_diff.small_prev_del and not ctx.event == "new": if edit_diff.small_prev_del and not ctx.event == "new":
embed.add_field(_("Removed"), "{data}".format(data=edit_diff.small_prev_del), inline=True) embed.add_field(ctx._("Removed"), "{data}".format(data=edit_diff.small_prev_del), inline=True)
if edit_diff.small_prev_ins: if edit_diff.small_prev_ins:
embed.add_field(_("Added"), "{data}".format(data=edit_diff.small_prev_ins), inline=True) embed.add_field(ctx._("Added"), "{data}".format(data=edit_diff.small_prev_ins), inline=True)
def create_article_path(article: str) -> str:
"""Takes the string and creates an URL with it as the article name"""
return src.misc.WIKI_ARTICLE_PATH.replace("$1", article)
def compact_summary(ctx: Context) -> str: def compact_summary(ctx: Context) -> str:
@ -88,10 +80,10 @@ def compact_author(ctx: Context, change: dict) -> (Optional[str], Optional[str])
"""Returns link to the author and the author itself respecting the settings""" """Returns link to the author and the author itself respecting the settings"""
author, author_url = None, None author, author_url = None, None
if ctx.event != "suppressed": if ctx.event != "suppressed":
author_url = clean_link(create_article_path("User:{user}".format(user=sanitize_to_url(change["user"])))) author_url = clean_link(ctx.client.create_article_path("User:{user}".format(user=sanitize_to_url(change["user"]))))
if "anon" in change: if "anon" in change:
if settings.get("hide_ips", False): if settings.get("hide_ips", False):
author = _("Unregistered user") author = ctx._("Unregistered user")
else: else:
author = change["user"] author = change["user"]
else: else:
@ -111,7 +103,7 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T
if set_user: if set_user:
author = None author = None
if "anon" in change: if "anon" in change:
author_url = create_article_path("Special:Contributions/{user}".format(user=sanitize_to_url(change["user"]))) author_url = ctx.client.create_article_path("Special:Contributions/{user}".format(user=sanitize_to_url(change["user"])))
ip_mapper = ctx.client.get_ipmapper() ip_mapper = ctx.client.get_ipmapper()
logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys())) logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys()))
if change["user"] not in list(ip_mapper.keys()): if change["user"] not in list(ip_mapper.keys()):
@ -123,14 +115,14 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T
except (ServerError, MediaWikiError): except (ServerError, MediaWikiError):
logger.warning("WARNING: Something went wrong when checking amount of contributions for given IP address") logger.warning("WARNING: Something went wrong when checking amount of contributions for given IP address")
if settings.get("hide_ips", False): if settings.get("hide_ips", False):
author = _("Unregistered user") author = ctx._("Unregistered user")
else: else:
author = change["user"] + "(?)" author = change["user"] + "(?)"
else: else:
ip_mapper[change["user"]] = len(contibs) ip_mapper[change["user"]] = len(contibs)
logger.debug("Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) logger.debug("Current params user {} and state of map_ips {}".format(change["user"], ip_mapper))
if settings.get("hide_ips", False): if settings.get("hide_ips", False):
author = _("Unregistered user") author = ctx._("Unregistered user")
else: else:
author = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) author = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs))
else: else:
@ -138,10 +130,10 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T
if ctx.event in ("edit", "new"): if ctx.event in ("edit", "new"):
ip_mapper[change["user"]] += 1 ip_mapper[change["user"]] += 1
author = "{author} ({amount})".format( author = "{author} ({amount})".format(
author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), author=change["user"] if settings.get("hide_ips", False) is False else ctx._("Unregistered user"),
amount=ip_mapper[change["user"]]) amount=ip_mapper[change["user"]])
else: else:
author_url = create_article_path("User:{}".format(sanitize_to_url(change["user"]))) author_url = ctx.client.create_article_path("User:{}".format(sanitize_to_url(change["user"])))
author = change["user"] author = change["user"]
message.set_author(author, author_url) message.set_author(author, author_url)
if set_edit_meta: if set_edit_meta:
@ -158,14 +150,14 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T
else: else:
tag_displayname.append(tag) tag_displayname.append(tag)
if tag_displayname: if tag_displayname:
message.add_field(formatters_i18n.pgettext("recent changes Tags", "Tags"), ", ".join(tag_displayname)) message.add_field(ctx.pgettext("recent changes Tags", "Tags"), ", ".join(tag_displayname))
if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categories["removed"]) == 0): if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categories["removed"]) == 0):
new_cat = (_("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + ( new_cat = (ctx._("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + (
"\n" if len(ctx.categories["new"]) <= 15 else _(" and {} more\n").format( "\n" if len(ctx.categories["new"]) <= 15 else ctx._(" and {} more\n").format(
len(ctx.categories["new"]) - 15))) if ctx.categories["new"] else "" len(ctx.categories["new"]) - 15))) if ctx.categories["new"] else ""
del_cat = (_("**Removed**: ") + ", ".join(list(ctx.categories["removed"])[0:16]) + ( del_cat = (ctx._("**Removed**: ") + ", ".join(list(ctx.categories["removed"])[0:16]) + (
"" if len(ctx.categories["removed"]) <= 15 else _(" and {} more").format( "" if len(ctx.categories["removed"]) <= 15 else ctx._(" and {} more").format(
len(ctx.categories["removed"]) - 15))) if ctx.categories["removed"] else "" len(ctx.categories["removed"]) - 15))) if ctx.categories["removed"] else ""
message.add_field(_("Changed categories"), new_cat + del_cat) message.add_field(ctx._("Changed categories"), new_cat + del_cat)
if set_desc: if set_desc:
message["description"] = ctx.parsedcomment message["description"] = ctx.parsedcomment

View file

@ -12,7 +12,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>. # along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
import json import json
import math import math
import random import random
@ -47,7 +47,7 @@ class DiscordMessageMetadata:
class DiscordMessage: class DiscordMessage:
"""A class defining a typical Discord JSON representation of webhook payload.""" """A class defining a typical Discord JSON representation of webhook payload."""
def __init__(self, message_type: str, event_type: str, content=None): def __init__(self, message_type: str, event_type: str, webhook_url: list[str], content=None):
self.webhook_object = dict(allowed_mentions={"parse": []}) self.webhook_object = dict(allowed_mentions={"parse": []})
self.length = 0 self.length = 0
self.metadata: Optional[DiscordMessageMetadata] = None self.metadata: Optional[DiscordMessageMetadata] = None

View file

@ -112,7 +112,7 @@ class MessageQueue:
if self.compare_message_to_dict(item[1], properties): if self.compare_message_to_dict(item[1], properties):
self._queue.pop(index) self._queue.pop(index)
async def pack_massages(self, messages: list[QueueEntry], current_pack=None) -> AsyncGenerator[tuple[StackedDiscordMessage, int, str]]: async def pack_massages(self, messages: list[QueueEntry], current_pack=None) -> AsyncGenerator[tuple[StackedDiscordMessage, int, str], None]:
"""Pack messages into StackedDiscordMessage. It's an async generator""" """Pack messages into StackedDiscordMessage. It's an async generator"""
# TODO Rebuild to support DELETE and PATCH messages # TODO Rebuild to support DELETE and PATCH messages
for index, message in enumerate(messages): for index, message in enumerate(messages):

View file

@ -5,7 +5,7 @@ from collections import OrderedDict
from src.config import settings from src.config import settings
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
from functools import cache from functools import cache
from src.discussions import Discussions # from src.discussions import Discussions
from statistics import Log, LogType from statistics import Log, LogType
logger = logging.getLogger("rcgcdb.domain") logger = logging.getLogger("rcgcdb.domain")

View file

@ -34,6 +34,11 @@ class ServerError(Exception):
"""Exception for when a request fails because of Server error""" """Exception for when a request fails because of Server error"""
pass pass
class FormatterBreaksAPISpec(Exception):
def __init__(self, field):
self.message = f"Formatter doesn't specify {field}!"
super().__init__(self.message)
class ClientError(Exception): class ClientError(Exception):
"""Exception for when a request failes because of Client error""" """Exception for when a request failes because of Client error"""

View file

@ -19,7 +19,7 @@ class UpdateDB:
def clear_list(self): def clear_list(self):
self.updated.clear() self.updated.clear()
async def fetch_rows(self, SQLstatement: str, args: Union[str, int]) -> collections.AsyncIterable: async def fetch_rows(self, SQLstatement: str, args: Union[str, int]) -> collections.abc.AsyncIterable:
async with db.pool().acquire() as connection: async with db.pool().acquire() as connection:
async with connection.transaction(): async with connection.transaction():
async for row in connection.cursor(SQLstatement, *args): async for row in connection.cursor(SQLstatement, *args):

View file

@ -28,8 +28,8 @@ from typing import Union, Optional, TYPE_CHECKING
Settings = namedtuple("Settings", ["lang", "display"]) Settings = namedtuple("Settings", ["lang", "display"])
logger = logging.getLogger("rcgcdb.wiki") logger = logging.getLogger("rcgcdb.wiki")
wiki_reamoval_reasons = {410: _("wiki deleted"), 404: _("wiki deleted"), 401: _("wiki inaccessible"), # wiki_reamoval_reasons = {410: _("wiki deleted"), 404: _("wiki deleted"), 401: _("wiki inaccessible"),
402: _("wiki inaccessible"), 403: _("wiki inaccessible"), 1000: _("discussions disabled")} # 402: _("wiki inaccessible"), 403: _("wiki inaccessible"), 1000: _("discussions disabled")}
if TYPE_CHECKING: if TYPE_CHECKING:
from src.domain import Domain from src.domain import Domain
@ -215,8 +215,7 @@ class Wiki:
request.url)) request.url))
elif 399 < request.status < 500: elif 399 < request.status < 500:
logger.error("Request returned ClientError status code on {url}".format(url=request.url)) logger.error("Request returned ClientError status code on {url}".format(url=request.url))
if request.status in wiki_reamoval_reasons: self.statistics.update(Log(type=LogType.HTTP_ERROR, title="{} error".format(request.status), details=str(request.headers) + "\n" + str(request.url)))
self.statistics.update(Log(type=LogType.HTTP_ERROR, title="{} error".format(request.status), details=str(request.headers) + "\n" + str(request.url)))
raise ClientError(request) raise ClientError(request)
else: else:
# JSON Extraction # JSON Extraction