More development, this time focusing on Discord messages and discussions

This commit is contained in:
Frisk 2022-08-09 12:57:40 +02:00
parent 1e1fbb8563
commit 5ca43bfe26
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
22 changed files with 246 additions and 204 deletions

View file

@ -44,7 +44,7 @@ def abuse_filter_format_user(change, settings):
@formatter.embed(event="abuselog")
def embed_abuselog(ctx: Context, change: dict):
action = "abuselog/{}".format(change["result"])
embed = DiscordMessage(ctx.message_type, action, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, action)
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.add_field(ctx._("Performed"), abusefilter_translatable(change["action"], ctx._, ctx._("Unknown")))
@ -63,14 +63,14 @@ def compact_abuselog(ctx: Context, change: dict):
action=abusefilter_translatable(change["action"], ctx._, ctx._("Unknown")), target=change.get("title", ctx._("Unknown")),
target_url=clean_link(create_article_path(sanitize_to_url(change.get("title", ctx._("Unknown"))))),
result=abusefilter_translatable(change["result"], ctx._, ctx._("Unknown")))
return DiscordMessage(ctx.message_type, action, ctx.webhook_url, content=message)
return DiscordMessage(ctx.message_type, action, content=message)
# abusefilter/modify - AbuseFilter filter modification
@formatter.embed(event="abusefilter/modify")
def embed_abuselog_modify(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(
"Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'],
@ -93,14 +93,14 @@ def compact_abuselog_modify(ctx: Context, change: dict):
"logparams"][
'newId'],
filter_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# abusefilter/create - AbuseFilter filter creation
@formatter.embed(event="abusefilter/create")
def embed_abuselog_create(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))
embed["title"] = ctx._("Created abuse filter number {number}").format(number=change["logparams"]['newId'])
@ -118,4 +118,4 @@ def compact_abuselog_create(ctx: Context, change: dict):
"logparams"][
'newId'],
filter_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -25,7 +25,7 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="cargo/createtable")
def embed_cargo_createtable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
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,
author_url=author_url,
table=table)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# cargo/recreatetable - Recreating a Cargo table
@ -48,7 +48,7 @@ def compact_cargo_createtable(ctx: Context, change: dict):
@formatter.embed(event="cargo/recreatetable")
def embed_cargo_recreatetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
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,
author_url=author_url,
table=table)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# cargo/replacetable - Replacing a Cargo table
@ -71,7 +71,7 @@ def compact_cargo_recreatetable(ctx: Context, change: dict):
@formatter.embed(event="cargo/replacetable")
def embed_cargo_replacetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
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,
author_url=author_url,
table=table)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# cargo/deletetable - Deleting a table in Cargo
@ -94,7 +94,7 @@ def compact_cargo_replacetable(ctx: Context, change: dict):
@formatter.embed(event="cargo/deletetable")
def embed_cargo_deletetable(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path("Special:CargoTables")
embed["title"] = ctx._("Deleted the Cargo table \"{table}\"").format(table=sanitize_to_markdown(change["logparams"]["0"]))
@ -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,
author_url=author_url,
table=sanitize_to_markdown(change["logparams"]["0"]))
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -28,7 +28,7 @@ from src.misc import profile_field_name
@formatter.embed(event="curseprofile/profile-edited")
def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -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})*")
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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# 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")
def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -93,7 +93,7 @@ def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordM
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else:
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, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# 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")
def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -124,7 +124,7 @@ def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMe
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else:
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, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# 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")
def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -155,7 +155,7 @@ def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordM
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
else:
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, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# 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")
def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -194,7 +194,7 @@ def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordM
else:
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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# 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")
def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
target_user = change["title"].split(':', 1)[1]
if target_user != change["user"]:
@ -226,4 +226,4 @@ def compact_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMe
author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment)
else:
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, ctx.webhook_url, content=content, reason=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, content=content, reason=parsed_comment)

View file

@ -27,7 +27,7 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="datadump/generate")
def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["title"] = ctx._("Generated {file} dump").format(file=change["logparams"]["filename"])
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
@ -42,14 +42,14 @@ def compact_datadump_generate(ctx: Context, change: dict):
author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]),
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# datadump/delete - Deleting a dump of a wiki
@formatter.embed(event="datadump/delete")
def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["title"] = ctx._("Deleted {file} dump").format(file=sanitize_to_markdown(change["logparams"]["filename"]))
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
@ -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"]),
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -137,7 +137,7 @@ def common_discussions(post: dict, embed: DiscordMessage, ctx: Context):
@formatter.embed(event="discussion/forum")
def embed_discussion_forum(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
embed = DiscordMessage("embed", "discussion")
common_discussions(post, embed, ctx)
author = ctx._("unknown") # Fail safe
if post["createdBy"]["name"]:
@ -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"],
threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"],
forumName=post["forumName"])
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
return DiscordMessage("compact", event_type, content=message)
# discussion/wall - Wall posts/replies
@ -272,8 +272,8 @@ def embed_author_discussions(post: dict, embed: DiscordMessage, ctx: Context):
@formatter.embed(event="discussion/wall")
def embed_discussion_wall(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
common_discussions(post, embed)
embed = DiscordMessage("embed", "discussion")
common_discussions(post, embed, ctx)
embed_author_discussions(post, embed, ctx)
user_wall = ctx._("unknown") # Fail safe
if post["forumName"].endswith(' Message Wall'):
@ -313,15 +313,15 @@ def compact_discussion_wall(ctx: Context, post: dict):
author=author, author_url=author_url, url=ctx.settings["fandom_discussions"]["wiki_url"],
title=post["_embedded"]["thread"][0]["title"], user=user_wall,
user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"])
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
return DiscordMessage("compact", event_type, content=message)
# discussion/article_comment - Article comments
@formatter.embed(event="discussion/article_comment")
def embed_discussion_article_comment(ctx: Context, post: dict):
embed = DiscordMessage("embed", "discussion", ctx.settings["fandom_discussions"]["webhookURL"])
common_discussions(post, embed)
embed = DiscordMessage("embed", "discussion")
common_discussions(post, embed, ctx)
embed_author_discussions(post, embed, ctx)
article_paths = ctx.comment_page
if article_paths is None:
@ -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, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"],
commentId=post["threadId"], replyId=post["id"])
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
return DiscordMessage("compact", event_type, content=message)

View file

@ -26,7 +26,7 @@ from src.api.util import embed_helper, clean_link, compact_author, create_articl
@formatter.embed(event="interwiki/iw_add", mode="embed")
def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki")
embed["title"] = ctx._("Added an entry to the interwiki table")
@ -45,7 +45,7 @@ def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
"[{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'],
website=change["logparams"]['1'], table_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# interwiki/iw_edit - Editing interwiki entry
@ -53,7 +53,7 @@ def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
@formatter.embed(event="interwiki/iw_edit", mode="embed")
def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki")
embed["title"] = ctx._("Edited an entry in interwiki table")
@ -72,7 +72,7 @@ def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
"[{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'],
website=change["logparams"]['1'], table_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# interwiki/iw_delete - Deleting interwiki entry
@ -80,7 +80,7 @@ def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
@formatter.embed(event="interwiki/iw_delete", mode="embed")
def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path("Special:Interwiki")
embed["title"] = ctx._("Deleted an entry in interwiki table")
@ -100,4 +100,4 @@ def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
table_url=link,
desc=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -24,7 +24,7 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="managewiki/settings")
def embed_managewiki_settings(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed wiki settings")
@ -38,14 +38,14 @@ def compact_managewiki_settings(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change)
parsed_comment = compact_summary(ctx)
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, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/delete - Deleting a wiki
@formatter.embed(event="managewiki/delete")
def embed_managewiki_delete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
@ -62,14 +62,14 @@ def compact_managewiki_delete(ctx: Context, change: dict):
"logparams"].get("wiki",
ctx._("Unknown")),
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/delete-group - Deleting a group
@formatter.embed(event="managewiki/delete-group")
def embed_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
group = change["title"].split("/")[-1]
@ -86,14 +86,14 @@ def compact_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessag
author_url=author_url,
group=group,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/lock - Locking a wiki
@formatter.embed(event="managewiki/lock")
def embed_managewiki_lock(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
@ -107,14 +107,14 @@ def compact_managewiki_lock(ctx: Context, change: dict):
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")),
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/namespaces - Modirying a wiki namespace
@formatter.embed(event="managewiki/namespaces")
def embed_managewiki_namespaces(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Modified \"{namespace_name}\" namespace").format(
@ -130,14 +130,14 @@ def compact_managewiki_namespaces(ctx: Context, change: dict):
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")),
wiki_name=change["logparams"].get("wiki", ctx._("Unknown")), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/namespaces-delete - Deleteing a namespace
@formatter.embed(event="managewiki/namespaces-delete")
def embed_managewiki_namespaces_delete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted a \"{namespace_name}\" namespace").format(
@ -155,14 +155,14 @@ def compact_managewiki_namespaces_delete(ctx: Context, change: dict):
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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/rights - Modifying user groups
@formatter.embed(event="managewiki/rights")
def embed_managewiki_rights(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
group_name = change["title"].split("/permissions/", 1)[1]
@ -178,14 +178,14 @@ def compact_managewiki_rights(ctx: Context, change: dict):
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
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/undelete - Restoring a wiki
@formatter.embed(event="managewiki/undelete")
def embed_managewiki_undelete(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
@ -200,14 +200,14 @@ def compact_managewiki_undelete(ctx: Context, change: dict):
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", ctx._("Unknown")),
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managewiki/unlock - Unlocking a wiki
@formatter.embed(event="managewiki/unlock")
def embed_managewiki_unlock(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", ctx._("Unknown")))
@ -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")),
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -39,7 +39,7 @@ if 1 == 2: # additional translation strings in unreachable code
@formatter.embed(event="edit", mode="embed", aliases=["new"])
def embed_edit(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
action = ctx.event
editsize = change["newlen"] - change["oldlen"]
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, 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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# Upload - upload/reupload, upload/upload
@formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"])
def embed_upload_upload(ctx, change) -> DiscordMessage:
license = None
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
action = ctx.event
# Requesting more information on the image
request_for_image_data = None
@ -233,7 +233,7 @@ def compact_upload_revert(ctx, change) -> DiscordMessage:
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,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
@formatter.compact(event="upload/overwrite", mode="compact")
@ -244,7 +244,7 @@ def compact_upload_overwrite(ctx, change) -> DiscordMessage:
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,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
@formatter.compact(event="upload/upload", mode="compact")
@ -258,13 +258,13 @@ def compact_upload_upload(ctx, change) -> DiscordMessage:
change["title"]),
file_link=file_link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# delete/delete - Page deletion
@formatter.embed(event="delete/delete", mode="embed")
def embed_delete_delete(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted page {article}").format(article=sanitize_to_markdown(change["title"]))
@ -282,13 +282,13 @@ def compact_delete_delete(ctx, change) -> DiscordMessage:
change["title"]),
page_link=page_link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# delete/delete_redir - Redirect deletion
@formatter.embed(event="delete/delete_redir", mode="embed")
def embed_delete_delete_redir(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted redirect {article} by overwriting").format(
@ -304,7 +304,7 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage:
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,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# delete/restore - Restoring a page
@ -312,7 +312,7 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage:
@formatter.embed(event="delete/restore", mode="embed")
def embed_delete_restore(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed['url'] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Restored {article}").format(article=sanitize_to_markdown(change["title"]))
@ -330,7 +330,7 @@ def compact_delete_restore(ctx, change) -> DiscordMessage:
change["title"]),
article_url=page_link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# delete/event - Deleting an event with revdelete feature
@ -338,7 +338,7 @@ def compact_delete_restore(ctx, change) -> DiscordMessage:
@formatter.embed(event="delete/event", mode="embed")
def embed_delete_event(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed['url'] = create_article_path("Special:RecentChanges")
embed["title"] = ctx._("Changed visibility of log events")
@ -352,14 +352,14 @@ def compact_delete_event(ctx, change) -> DiscordMessage:
content = ctx._("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author,
author_url=author_url,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# delete/revision - Deleting revision information
@formatter.embed(event="delete/revision", mode="embed")
def embed_delete_revision(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
amount = len(change["logparams"]["ids"])
embed['url'] = create_article_path(sanitize_to_url(change["title"]))
@ -380,7 +380,7 @@ def compact_delete_revision(ctx, change) -> DiscordMessage:
"[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}",
amount).format(author=author, author_url=author_url,
article=sanitize_to_markdown(change["title"]), article_url=link, amount=amount, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# move/move - Moving pages
@ -388,7 +388,7 @@ def compact_delete_revision(ctx, change) -> DiscordMessage:
@formatter.embed(event="move/move", mode="embed")
def embed_move_move(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title']))
embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment,
@ -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"]),
target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment,
made_a_redirect=redirect_status)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# move/move_redir - Move over redirect
@ -421,7 +421,7 @@ def compact_move_move(ctx, change) -> DiscordMessage:
@formatter.embed(event="move/move_redir", mode="embed")
def embed_move_move_redir(ctx, change) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title']))
embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment,
@ -446,7 +446,7 @@ def compact_move_move_redir(ctx, change) -> DiscordMessage:
article=sanitize_to_markdown(change["title"]),
target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment,
made_a_redirect=redirect_status)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# protect/move_prot - Moving protection
@ -454,7 +454,7 @@ def compact_move_move_redir(ctx, change) -> DiscordMessage:
@formatter.embed(event="protect/move_prot", mode="embed")
def embed_protect_move_prot(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))
embed["title"] = ctx._("Moved protection settings from {redirect}{article} to {title}").format(
@ -474,7 +474,7 @@ def compact_protect_move_prot(ctx, change):
author=author, author_url=author_url, redirect="" if "redirect" in change else "",
article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]),
target=sanitize_to_markdown(change["title"]), target_url=link, comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# protect/protect - Creating protection
@ -482,7 +482,7 @@ def compact_protect_move_prot(ctx, change):
@formatter.embed(event="protect/protect", mode="embed")
def embed_protect_protect(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Protected {target}").format(target=sanitize_to_markdown(change["title"]))
@ -505,7 +505,7 @@ def compact_protect_protect(ctx, change):
settings=change["logparams"].get("description", "") + (
ctx._(" [cascading]") if "cascade" in change["logparams"] else ""),
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# protect/modify - Changing protection settings
@ -513,7 +513,7 @@ def compact_protect_protect(ctx, change):
@formatter.embed(event="protect/modify", mode="embed")
def embed_protect_modify(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"]))
@ -536,7 +536,7 @@ def compact_protect_modify(ctx, change):
settings=sanitize_to_markdown(change["logparams"].get("description", "")) + (
ctx._(" [cascading]") if "cascade" in change["logparams"] else ""),
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# protect/unprotect - Unprotecting a page
@ -544,7 +544,7 @@ def compact_protect_modify(ctx, change):
@formatter.embed(event="protect/unprotect", mode="embed")
def embed_protect_unprotect(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed protection from {article}").format(article=sanitize_to_markdown(change["title"]))
@ -559,7 +559,7 @@ def compact_protect_unprotect(ctx, change):
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,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# block/block - Blocking an user
@ -590,7 +590,7 @@ def block_expiry(change: dict, ctx: Context) -> str:
@formatter.embed(event="block/block", mode="embed")
def embed_block_block(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
user = change["title"].split(':', 1)[1]
try:
ipaddress.ip_address(user)
@ -676,13 +676,13 @@ def compact_block_block(ctx, change):
user_url=link,
restriction_desc=restriction_description,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# block/reblock - Changing settings of a block
@formatter.embed(event="block/reblock", mode="embed")
def embed_block_reblock(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
user = change["title"].split(':', 1)[1]
@ -698,14 +698,14 @@ def compact_block_reblock(ctx, change):
parsed_comment = compact_summary(ctx)
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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# block/unblock - Unblocking an user
@formatter.embed(event="block/unblock", mode="embed")
def embed_block_unblock(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
user = change["title"].split(':', 1)[1]
@ -725,7 +725,7 @@ def compact_block_unblock(ctx, change):
user_url=link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# suppressed - Custom event for whenever there is limited information available about the event due to revdel
@ -733,7 +733,7 @@ def compact_block_unblock(ctx, change):
@formatter.embed(event="suppressed", mode="embed")
def embed_suppressed(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed["url"] = create_article_path("")
embed["title"] = ctx._("Action has been hidden by administration")
embed["author"]["name"] = ctx._("Unknown")
@ -743,14 +743,14 @@ def embed_suppressed(ctx, change):
@formatter.compact(event="suppressed", mode="compact")
def compact_suppressed(ctx, change):
content = ctx._("An action has been hidden by administration.")
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# import/upload - Importing pages by uploading exported XML files
@formatter.embed(event="import/upload", mode="embed")
def embed_import_upload(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx.ngettext("Imported {article} with {count} revision",
@ -769,7 +769,7 @@ def compact_import_upload(ctx, change):
change["logparams"]["count"]).format(
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
count=change["logparams"]["count"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# import/interwiki - Importing interwiki entries
@ -777,7 +777,7 @@ def compact_import_upload(ctx, change):
@formatter.embed(event="import/interwiki", mode="embed")
def embed_import_interwiki(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx.ngettext("Imported {article} with {count} revision from \"{source}\"",
@ -802,7 +802,7 @@ def compact_import_interwiki(ctx, change):
count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]),
source_url=source_link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# rights/rights - Assigning rights groups
@ -824,7 +824,7 @@ def get_changed_groups(change: dict, ctx: Context) -> [[str], [str]]:
@formatter.embed(event="rights/rights", aliases=["rights/autopromote"])
def embed_rights_rights(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1])))
if ctx.event == "rights/rights":
embed["title"] = ctx._("Changed group membership for {target}").format(target=sanitize_to_markdown(change["title"].split(":")[1]))
@ -865,14 +865,14 @@ def compact_rights_rights(ctx, change):
content = ctx._("The system autopromoted [{target}]({target_url}) to {added}.{comment}").format(
target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link,
added=ctx._(", ").join(added), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# merge/merge - Merging histories of two pages
@formatter.embed(event="merge/merge", mode="embed")
def embed_merge_merge(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Merged revision histories of {article} into {dest}").format(
@ -892,7 +892,7 @@ def compact_merge_merge(ctx, change):
"[{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,
dest=sanitize_to_markdown(change["logparams"]["dest_title"]), comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/autocreate - Auto creation of user account
@ -900,7 +900,7 @@ def compact_merge_merge(ctx, change):
@formatter.embed(event="newusers/autocreate", mode="embed")
def embed_newusers_autocreate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account automatically")
@ -912,7 +912,7 @@ def compact_newusers_autocreate(ctx, change):
author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created automatically").format(author=author,
author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/create - Auto creation of user account
@ -920,7 +920,7 @@ def compact_newusers_autocreate(ctx, change):
@formatter.embed(event="newusers/create", mode="embed")
def embed_newusers_create(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account")
@ -931,7 +931,7 @@ def embed_newusers_create(ctx, change):
def compact_newusers_create(ctx, change):
author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/autocreate - Auto creation of user account
@ -939,7 +939,7 @@ def compact_newusers_create(ctx, change):
@formatter.embed(event="newusers/create2", mode="embed")
def embed_newusers_create2(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account {article}").format(article=sanitize_to_markdown(change["title"]))
@ -953,7 +953,7 @@ def compact_newusers_create2(ctx, change):
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/byemail - Creation of account by email
@ -961,7 +961,7 @@ def compact_newusers_create2(ctx, change):
@formatter.embed(event="newusers/byemail", mode="embed")
def embed_newusers_byemail(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created account {article} and password was sent by email").format(
@ -977,7 +977,7 @@ def compact_newusers_byemail(ctx, change):
content = ctx._(
"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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/newusers - New users
@ -985,7 +985,7 @@ def compact_newusers_byemail(ctx, change):
@formatter.embed(event="newusers/newusers", mode="embed")
def embed_newusers_newusers(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["user"])))
embed["title"] = ctx._("Created account")
@ -996,7 +996,7 @@ def embed_newusers_newusers(ctx, change):
def compact_newusers_newusers(ctx, change):
author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# newusers/reclaim - New user reclaimed
@ -1004,7 +1004,7 @@ def compact_newusers_newusers(ctx, change):
@formatter.embed(event="newusers/reclaim", mode="embed")
def embed_newusers_reclaim(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["user"])))
embed["title"] = ctx._("Reclaimed account")
@ -1015,7 +1015,7 @@ def embed_newusers_reclaim(ctx, change):
def compact_newusers_reclaim(ctx, change):
author, author_url = compact_author(ctx, change)
content = ctx._("Account [{author}]({author_url}) was reclaimed").format(author=author, author_url=author_url)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# contentmodel/change - Changing the content model of a page
@ -1023,7 +1023,7 @@ def compact_newusers_reclaim(ctx, change):
@formatter.embed(event="contentmodel/change", mode="embed")
def embed_contentmodel_change(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed the content model of the page {article}").format(
@ -1044,7 +1044,7 @@ def compact_contentmodel_change(ctx, change):
author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link,
old=change["logparams"]["oldmodel"],
new=change["logparams"]["newmodel"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# contentmodel/new - Creating a page with non-default content model
@ -1052,7 +1052,7 @@ def compact_contentmodel_change(ctx, change):
@formatter.embed(event="contentmodel/new", mode="embed")
def embed_contentmodel_new(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change, set_desc=False)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created the page {article} using a non-default content model").format(
@ -1071,7 +1071,7 @@ def compact_contentmodel_new(ctx, change):
"[{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,
new=change["logparams"]["newmodel"], comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managetags/create - Creating log tags
@ -1079,7 +1079,7 @@ def compact_contentmodel_new(ctx, change):
@formatter.embed(event="managetags/create", mode="embed")
def embed_managetags_create(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
ctx.client.refresh_internal_data()
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
@ -1103,7 +1103,7 @@ def compact_managetags_create(ctx, change):
tag_url=link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managetags/delete - Deleting a tag
@ -1111,7 +1111,7 @@ def compact_managetags_create(ctx, change):
@formatter.embed(event="managetags/delete", mode="embed")
def embed_managetags_delete(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
ctx.client.refresh_internal_data()
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
@ -1145,7 +1145,7 @@ def compact_managetags_delete(ctx, change):
tag=sanitize_to_markdown(change["logparams"]["tag"]),
tag_url=link, count=change["logparams"]["count"],
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managetags/activate - Activating a tag
@ -1153,7 +1153,7 @@ def compact_managetags_delete(ctx, change):
@formatter.embed(event="managetags/activate", mode="embed")
def embed_managetags_activate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
@ -1173,7 +1173,7 @@ def compact_managetags_activate(ctx, change):
"tag"]),
tag_url=link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# managetags/deactivate - Deactivating a tag
@ -1181,7 +1181,7 @@ def compact_managetags_activate(ctx, change):
@formatter.embed(event="managetags/deactivate", mode="embed")
def embed_managetags_deactivate(ctx, change):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"]))
@ -1201,4 +1201,4 @@ def compact_managetags_deactivate(ctx, change):
"tag"]),
tag_url=link,
comment=parsed_comment)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -26,7 +26,7 @@ from src.api.util import embed_helper, compact_summary, clean_link, compact_auth
@formatter.embed(event="renameuser/renameuser")
def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
edits = change["logparams"]["edits"]
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"]),
new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -27,7 +27,7 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="sprite/sprite")
def embed_sprite_sprite(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"]))
@ -43,14 +43,14 @@ def compact_sprite_sprite(ctx: Context, change: dict):
article=sanitize_to_markdown(change[
"title"]),
article_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# sprite/sheet - Creating a sprite sheet
@formatter.embed(event="sprite/sheet")
def embed_sprite_sheet(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Created the sprite sheet for {article}").format(article=sanitize_to_markdown(change["title"]))
@ -62,14 +62,14 @@ def compact_sprite_sheet(ctx: Context, change: dict):
author, author_url = compact_author(ctx, change)
link = clean_link(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)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# sprite/slice - Editing a slice
@formatter.embed(event="sprite/slice")
def embed_sprite_slice(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Edited the slice for {article}").format(article=sanitize_to_markdown(change["title"]))
@ -84,4 +84,4 @@ def compact_sprite_slice(ctx: Context, change: dict):
article=sanitize_to_markdown(change[
"title"]),
article_url=link)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -27,7 +27,7 @@ from src.api.util import embed_helper, compact_author, create_article_path, sani
@formatter.embed(event="pagetranslation/mark")
def embed_pagetranslation_mark(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
link = create_article_path(sanitize_to_url(change["title"]))
if "?" in link:
@ -53,14 +53,14 @@ def compact_pagetranslation_mark(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/unmark - Removing a page from translation system
@formatter.embed(event="pagetranslation/unmark")
def embed_pagetranslation_unmark(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"]))
@ -78,14 +78,14 @@ def compact_pagetranslation_unmark(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/moveok - Completed moving translation page
@formatter.embed(event="pagetranslation/moveok")
def embed_pagetranslation_moveok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"]))
embed["title"] = ctx._("Completed moving translation pages from \"{article}\" to \"{target}\"").format(
@ -104,14 +104,14 @@ def compact_pagetranslation_moveok(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]),
target_url=link, comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/movenok - Failed while moving translation page
@formatter.embed(event="pagetranslation/movenok")
def embed_pagetranslation_movenok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Encountered a problem while moving \"{article}\" to \"{target}\"").format(
@ -132,14 +132,14 @@ def compact_pagetranslation_movenok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/deletefnok - Failure in deletion of translatable page
@formatter.embed(event="pagetranslation/deletefnok")
def embed_pagetranslation_deletefnok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format(
@ -160,14 +160,14 @@ def compact_pagetranslation_deletefnok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/deletelok - Completion in deleting a page?
@formatter.embed(event="pagetranslation/deletelok")
def embed_pagetranslation_deletelok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Completed deletion of translation page \"{article}\"").format(
@ -186,14 +186,14 @@ def compact_pagetranslation_deletelok(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/deletelnok - Failure in deletion of article belonging to a translation page
@formatter.embed(event="pagetranslation/deletelnok")
def embed_pagetranslation_deletelnok(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format(
@ -214,14 +214,14 @@ def compact_pagetranslation_deletelnok(ctx: Context, change: dict):
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/encourage - Encouraging to translate an article
@formatter.embed(event="pagetranslation/encourage")
def embed_pagetranslation_encourage(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
@ -238,14 +238,14 @@ def compact_pagetranslation_encourage(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/discourage - Discouraging to translate an article
@formatter.embed(event="pagetranslation/discourage")
def embed_pagetranslation_discourage(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
@ -262,14 +262,14 @@ def compact_pagetranslation_discourage(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/prioritylanguages - Changing the priority of translations?
@formatter.embed(event="pagetranslation/prioritylanguages")
def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
if "languages" in change["logparams"]:
@ -313,7 +313,7 @@ def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/associate - Adding an article to translation group
@ -321,7 +321,7 @@ def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
@formatter.embed(event="pagetranslation/associate")
def embed_pagetranslation_associate(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Added translatable page \"{article}\" to aggregate group \"{group}\"").format(
@ -340,14 +340,14 @@ def compact_pagetranslation_associate(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
group=change["logparams"]["aggregategroup"], comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagetranslation/dissociate - Removing an article from translation group
@formatter.embed(event="pagetranslation/dissociate")
def embed_pagetranslation_dissociate(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format(
@ -366,14 +366,14 @@ def compact_pagetranslation_dissociate(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
group=change["logparams"]["aggregategroup"], comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# translationreview/message - Reviewing translation
@formatter.embed(event="translationreview/message")
def embed_translationreview_message(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
link = create_article_path(sanitize_to_url(change["title"]))
if "?" in link:
@ -399,14 +399,14 @@ def compact_translationreview_message(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# translationreview/group - Changing of state for group translation?
@formatter.embed(event="translationreview/group")
def embed_translationreview_group(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
embed["title"] = ctx._("Changed the state of `{language}` translations of \"{article}\"").format(
@ -437,7 +437,7 @@ def compact_translationreview_group(ctx: Context, change: dict):
article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link,
new_state=change["logparams"]["new-state"], comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)
# pagelang/pagelang - Changing the language of a page
@ -453,7 +453,7 @@ def get_languages(change: dict, ctx: Context):
@formatter.embed(event="pagelang/pagelang")
def embed_pagelang_pagelang(ctx: Context, change: dict):
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
embed = DiscordMessage(ctx.message_type, ctx.event)
embed_helper(ctx, embed, change)
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
old_lang, new_lang = get_languages(change, ctx)
@ -475,4 +475,4 @@ def compact_pagelang_pagelang(ctx: Context, change: dict):
article=sanitize_to_markdown(change["title"]), article_url=link,
old_lang=old_lang, new_lang=new_lang, comment=parsed_comment
)
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
return DiscordMessage(ctx.message_type, ctx.event, content=content)

View file

@ -24,9 +24,9 @@ if TYPE_CHECKING:
class Context:
"""Context object containing client and some metadata regarding specific formatter call,
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_url: 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.webhook_url = webhook_url
self.webhook_urls = webhook_urls
self.message_type = message_type
self.feed_type = feed_type
self.categories = None
@ -50,4 +50,4 @@ class Context:
self.comment_page = page
def __str__(self):
return f"<Context message_type={self.message_type} feed_type={self.feed_type} event={self.event} webhook_url={self.webhook_url}"
return f"<Context message_type={self.message_type} feed_type={self.feed_type} event={self.event} webhook_urls={self.webhook_urls}"

View file

@ -35,13 +35,12 @@ def _register_formatter(func, kwargs, formatter_type: str, action_type=None):
action_type = kwargs.get("event", action_type)
if action_type is None:
raise FormatterBreaksAPISpec("event type")
if settings["appearance"]["mode"] == formatter_type:
for act in [action_type] + kwargs.get("aliases", []): # Make action_type string a list and merge with aliases
if act in src.api.hooks.formatter_hooks:
if act in src.api.hooks.formatter_hooks[formatter_type]:
logger.warning(f"Action {act} is already defined inside of "
f"{src.api.hooks.formatter_hooks[act].__module__}! "
f"{src.api.hooks.formatter_hooks[formatter_type][act].__module__}! "
f"Overwriting it with one from {func.__module__}")
src.api.hooks.formatter_hooks[act] = func
src.api.hooks.formatter_hooks[formatter_type][act] = func
def embed(**kwargs):

View file

@ -18,6 +18,6 @@ from typing import Callable, List, Dict
from src.discord.message import DiscordMessage, DiscordMessageMetadata
from src.api.context import Context
formatter_hooks: Dict[str, Callable[[Context, dict], DiscordMessage]] = {}
formatter_hooks: Dict[str, dict[str, Callable[[Context, dict], DiscordMessage]]] = {"embed": {}, "compact": {}}
pre_hooks: List[Callable[[Context, dict], None]] = []
post_hooks: List[Callable[[DiscordMessage, DiscordMessageMetadata, Context, dict], None]] = []

View file

@ -32,9 +32,9 @@ if TYPE_CHECKING:
logger = logging.getLogger("src.api.util")
def default_message(event: str, formatter_hooks: dict) -> Callable:
def default_message(event: str, display: str, formatter_hooks: dict) -> Callable:
"""Returns a method of a formatter responsible for the event or None if such does not exist."""
return formatter_hooks.get(event, formatter_hooks.get("generic", formatter_hooks["no_formatter"]))
return formatter_hooks.get(display, {}).get(event, formatter_hooks.get("generic", formatter_hooks["no_formatter"]))
def clean_link(link: str) -> str:

View file

@ -233,8 +233,8 @@ async def main_loop():
logger.debug("Connection type: {}".format(db.connection_pool))
await populate_wikis()
# START LISTENER CONNECTION
# We are here
domains.run_all_domains()
# We are here
try:
signals = (signal.SIGHUP, signal.SIGTERM, signal.SIGINT)
for s in signals:

View file

@ -18,9 +18,12 @@ import math
import random
from collections import defaultdict
from typing import Optional
with open("src/api/template_settings.json", "r") as template_json:
settings: dict = json.load(template_json)
class DiscordMessageMetadata:
def __init__(self, method, log_id = None, page_id = None, rev_id = None, webhook_url = None, new_data = None):
self.method = method
@ -42,11 +45,10 @@ class DiscordMessageMetadata:
class DiscordMessage:
"""A class defining a typical Discord JSON representation of webhook payload."""
def __init__(self, message_type: str, event_type: str, webhook_url: str, metadata: DiscordMessageMetadata, content=None):
def __init__(self, message_type: str, event_type: str, content=None):
self.webhook_object = dict(allowed_mentions={"parse": []})
self.webhook_url = webhook_url
self.length = 0
self.metadata = metadata
self.metadata: Optional[DiscordMessageMetadata] = None
if message_type == "embed":
self.__setup_embed()

28
src/discussions.py Normal file
View file

@ -0,0 +1,28 @@
from collections import OrderedDict
import src.wiki
class Discussions():
def __init__(self, wikis: OrderedDict[str, src.wiki.Wiki]):
self.wikis = wikis
async def tick_discussions(self):
while True:
try:
wiki_url = self.irc.updated_wikis.pop()
except KeyError:
break
try:
wiki = self.wikis[wiki_url]
except KeyError:
logger.error(f"Could not find a wiki with URL {wiki_url} in the domain group!")
continue
await self.run_discussion_scan(wiki)
for wiki in self.wikis.values():
if wiki.statistics.last_checked_discussion < settings.get("irc_overtime", 3600):
await self.run_discussion_scan(wiki)
else:
return # Recently scanned wikis will get at the end of the self.wikis, so we assume what is first hasn't been checked for a while
async def add_wiki(self, wiki):

View file

@ -5,6 +5,7 @@ from collections import OrderedDict
from src.config import settings
from typing import TYPE_CHECKING, Optional
from functools import cache
from src.discussions import Discussions
logger = logging.getLogger("rcgcdb.domain")
if TYPE_CHECKING:
@ -17,9 +18,10 @@ class Domain:
def __init__(self, name: str):
self.name = name # This should be always in format of topname.extension for example fandom.com
self.task: Optional[asyncio.Task] = None
self.wikis: OrderedDict[str, src.wiki.Wiki] = OrderedDict() # TODO Check if we can replace with https://docs.python.org/3/library/asyncio-queue.html
self.wikis: OrderedDict[str, src.wiki.Wiki] = OrderedDict()
self.rate_limiter: src.wiki_ratelimiter = src.wiki_ratelimiter.RateLimiter()
self.irc: Optional[src.irc_feed.AioIRCCat] = None
self.discussions_handler: Optional[Discussions] = None
def __iter__(self):
return iter(self.wikis)
@ -42,7 +44,7 @@ class Domain:
def run_domain(self):
if not self.task or self.task.cancelled():
self.task = asyncio.create_task(self.run_wiki_check())
self.task = asyncio.create_task(self.run_wiki_check(), name=self.name)
else:
logger.error(f"Tried to start a task for domain {self.name} however the task already exists!")
@ -57,6 +59,7 @@ class Domain:
wiki.set_domain(self)
if wiki.script_url in self.wikis:
self.wikis[wiki.script_url].update_targets()
else:
self.wikis[wiki.script_url] = wiki
if first:
self.wikis.move_to_end(wiki.script_url, last=False)

View file

@ -26,7 +26,7 @@ class DomainManager:
if len(split_payload) < 2:
raise ValueError("Improper pub/sub message! Pub/sub payload: {}".format(payload))
if split_payload[0] == "ADD":
await self.new_wiki(Wiki(split_payload[1], None, None)) # TODO Can already exist
await self.new_wiki(Wiki(split_payload[1], None, None))
elif split_payload[0] == "REMOVE":
try:
results = await connection.fetch("SELECT * FROM rcgcdw WHERE wiki = $1;", split_payload[1])
@ -65,6 +65,9 @@ class DomainManager:
parsed_url = urlparse(url)
return ".".join(urlunparse((*parsed_url[0:2], "", "", "", "")).split(".")[-2:])
def return_domain(self, domain: str):
return self.domains[domain]
async def new_domain(self, name: str) -> Domain:
domain_object = Domain(name)
for irc_server in settings["irc_servers"].keys():
@ -74,7 +77,7 @@ class DomainManager:
self.domains[name] = domain_object
return self.domains[name]
async def run_all_domains(self):
def run_all_domains(self):
for domain in self.domains.values():
domain.run_domain()

View file

@ -6,7 +6,7 @@ import types
import irc.client_aio
import json
import logging
from typing import TYPE_CHECKING, Callable
from typing import TYPE_CHECKING, Callable, Optional
from urllib.parse import urlparse, quote
logger = logging.getLogger("rcgcdw.irc_feed")
@ -19,10 +19,11 @@ class AioIRCCat(irc.client_aio.AioSimpleIRCClient):
super().connect(*args, **kwargs)
self.connection_details = (args, kwargs)
def __init__(self, targets: dict[str, str], domain_object: Domain, rc_callback: Callable, discussion_callback: Callable):
def __init__(self, targets: dict[str, str], domain_object: Domain, rc_callback: Optional[Callable], discussion_callback: Optional[Callable]):
irc.client_aio.SimpleIRCClient.__init__(self)
self.targets = targets
self.updated_wikis: set[str] = set()
self.rc_callback = rc_callback
self.discussion_callback = discussion_callback
self.domain = domain_object
self.connection.buffer_class.errors = "replace" # Ignore encoding errors

View file

@ -1,5 +1,7 @@
from __future__ import annotations
import concurrent.futures
import functools
import json
import time
from dataclasses import dataclass
@ -17,6 +19,7 @@ from src.formatters.discussions import feeds_embed_formatter, feeds_compact_form
from src.api.hooks import formatter_hooks
from src.api.client import Client
from src.api.context import Context
from src.discord.message import DiscordMessage, DiscordMessageMetadata
from src.misc import parse_link
from src.i18n import langs
from src.wiki_ratelimiter import RateLimiter
@ -48,6 +51,7 @@ class Wiki:
self.domain: Optional[Domain] = None
self.targets: Optional[defaultdict[Settings, list[str]]] = None
self.client: Client = Client(formatter_hooks, self)
self.message_history =
self.update_targets()
@ -252,7 +256,7 @@ class Wiki:
if highest_id is None or change["rcid"] > highest_id: # make sure that the highest_rc is really highest rcid but do allow other entries with potentially lesser rcids come after without breaking the cycle
highest_id = change["rcid"]
for combination, webhooks in self.targets.items():
message, metadata = await rc_processor(self, change, categorize_events, combination, webhooks)
message = await rc_processor(self, change, categorize_events, combination, webhooks)
break
@cache
@ -265,22 +269,22 @@ def prepare_settings(display_mode: int) -> dict:
return template
async def rc_processor(wiki: Wiki, change: dict, changed_categories: dict, display_options: namedtuple("Settings", ["lang", "display"]), webhooks: list) -> tuple[
discord.discord.DiscordMessage, discord.discord.DiscordMessageMetadata]:
async def rc_processor(wiki: Wiki, change: dict, changed_categories: dict, display_options: namedtuple("Settings", ["lang", "display"]), webhooks: list) -> DiscordMessage:
from src.misc import LinkParser
LinkParser = LinkParser()
metadata = discord.discord.DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None),
metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None),
page_id=change.get("pageid", None))
context = Context("embed" if display_options.display > 0 else "compact", "recentchanges", webhook, wiki.client, langs[display_options.lang]["rc_formatters"], prepare_settings(display_options.display))
context = Context("embed" if display_options.display > 0 else "compact", "recentchanges", webhooks, wiki.client, langs[display_options.lang]["rc_formatters"], prepare_settings(display_options.display))
if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression
context.event = "suppressed"
try:
discord_message: Optional[discord.discord.DiscordMessage] = default_message("suppressed", display_options.display, formatter_hooks)(context, change)
discord_message: Optional[DiscordMessage] = await asyncio.get_event_loop().run_in_executor(
None, functools.partial(default_message("suppressed", display_options.display, formatter_hooks), context, change))
except NoFormatter:
return
except:
if settings.get("error_tolerance", 1) > 0:
discord_message: Optional[discord.discord.DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run
discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run
else:
raise
else:
@ -312,12 +316,12 @@ async def rc_processor(wiki: Wiki, change: dict, changed_categories: dict, displ
return
context.event = identification_string
try:
discord_message: Optional[discord.discord.DiscordMessage] = default_message(identification_string, formatter_hooks)(context,
change)
discord_message: Optional[DiscordMessage] = await asyncio.get_event_loop().run_in_executor(None,
functools.partial(default_message(identification_string, display_options.display, formatter_hooks), context,
change))
except:
if settings.get("error_tolerance", 1) > 0:
discord_message: Optional[
discord.discord.DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run
discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run
else:
raise
if identification_string in ("delete/delete", "delete/delete_redir"): # TODO Move it into a hook?
@ -337,7 +341,9 @@ async def rc_processor(wiki: Wiki, change: dict, changed_categories: dict, displ
for revid in logparams.get("ids", []):
delete_messages(dict(revid=revid))
discord_message.finish_embed()
return discord_message, metadata
if discord_message:
discord_message.metadata = metadata
return discord_message
@dataclass