mirror of
https://gitlab.com/chicken-riders/RcGcDw.git
synced 2025-02-23 00:24:09 +00:00
Update shipped hooks
This commit is contained in:
parent
ab60fd3728
commit
d82e33366b
|
@ -331,7 +331,7 @@ def embed_discussion_article_comment(ctx: Context, post: dict):
|
|||
embed_author_discussions(post, embed)
|
||||
article_paths = ctx.comment_page
|
||||
if article_paths is None:
|
||||
article_page = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known
|
||||
article_paths = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known
|
||||
if not post["isReply"]:
|
||||
embed.event_type = "discussion/comment/post"
|
||||
embed["url"] = "{url}?commentId={commentId}".format(url=article_paths["fullUrl"], commentId=post["threadId"])
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import ipaddress
|
||||
from src.api.hook import post_hook
|
||||
from src.configloader import settings
|
||||
|
||||
|
@ -27,6 +28,11 @@ from src.configloader import settings
|
|||
# },
|
||||
# "requirements": [
|
||||
# {
|
||||
# "feed": [
|
||||
# "recentchanges",
|
||||
# "abuselog",
|
||||
# "discussion"
|
||||
# ],
|
||||
# "action": [
|
||||
# "edit",
|
||||
# "delete/delete",
|
||||
|
@ -40,6 +46,14 @@ from src.configloader import settings
|
|||
# "title": [
|
||||
# "PAGETITLE"
|
||||
# ],
|
||||
# "forum": [
|
||||
# "FORUMNAME",
|
||||
# null
|
||||
# ],
|
||||
# "is_reply": null,
|
||||
# "namespace": [
|
||||
# 0
|
||||
# ],
|
||||
# "tags": [
|
||||
# ["EDIT TAG", "AND EDIT TAG"],
|
||||
# ["OR EDIT TAG"]
|
||||
|
@ -55,6 +69,16 @@ from src.configloader import settings
|
|||
# ["OR CATEGORY"]
|
||||
# ]
|
||||
# }
|
||||
# ],
|
||||
# "filter": [
|
||||
# "Section removal",
|
||||
# "1"
|
||||
# ],
|
||||
# "af_action": [
|
||||
# "edit"
|
||||
# ],
|
||||
# "result": [
|
||||
# "disallow"
|
||||
# ]
|
||||
# }
|
||||
# ]
|
||||
|
@ -92,17 +116,57 @@ def edit_alerts_hook(message, metadata, context, change):
|
|||
# For every requirement, if one of the requirements passes the alert gets executed
|
||||
for requirement in alert.get("requirements", []):
|
||||
try:
|
||||
req_feed = requirement.get("feed", [])
|
||||
if req_feed and context.feed_type not in req_feed:
|
||||
raise RequirementNotMet
|
||||
req_action = requirement.get("action", [])
|
||||
# If current action isn't in config for this requirement AND current event type is not in the requirements in settings skip this requirement
|
||||
if req_action and context.event not in req_action and context.event.split('/', 1)[0] not in req_action:
|
||||
raise RequirementNotMet
|
||||
req_user = requirement.get("user", [])
|
||||
change_user = None
|
||||
change_anon = False
|
||||
if context.feed_type == "discussion":
|
||||
if change["creatorIp"]:
|
||||
change_user = change["creatorIp"][1:]
|
||||
change_anon = True
|
||||
elif change["createdBy"]["name"]:
|
||||
change_user = change["createdBy"]["name"]
|
||||
change_anon = False
|
||||
else:
|
||||
change_user = change["user"]
|
||||
if context.feed_type == "recentchanges":
|
||||
change_anon = "anon" in change
|
||||
else:
|
||||
try:
|
||||
ipaddress.ip_address(change_user)
|
||||
except ValueError:
|
||||
change_anon = False
|
||||
else:
|
||||
change_anon = True
|
||||
# If current user is not in config AND checkings for anon and user fail
|
||||
if req_user and change["user"] not in req_user and ("@__anon__" if "anon" in change else "@__user__") not in req_user:
|
||||
if req_user and change_user and change_user not in req_user and ("@__anon__" if change_anon else "@__user__") not in req_user:
|
||||
raise RequirementNotMet
|
||||
req_title = requirement.get("title", [])
|
||||
if req_title and change["title"] not in req_title:
|
||||
change_title = change["title"]
|
||||
if context.feed_type == "discussion" and change_title is None:
|
||||
change_title = change["_embedded"]["thread"][0]["title"]
|
||||
if change_title is None and context.comment_page is not None:
|
||||
change_title = context.comment_page["title"]
|
||||
if req_title and change_title not in req_title:
|
||||
raise RequirementNotMet
|
||||
if context.feed_type == "discussion":
|
||||
req_forum = requirement.get("forum", [])
|
||||
if req_forum and change["forumName"] not in req_forum:
|
||||
raise RequirementNotMet
|
||||
req_reply = requirement.get("is_reply", None)
|
||||
if req_reply is not None and change["isReply"] == req_reply:
|
||||
raise RequirementNotMet
|
||||
else:
|
||||
req_namespace = requirement.get("namespace", [])
|
||||
if req_namespace and change["ns"] not in req_namespace:
|
||||
raise RequirementNotMet
|
||||
if context.feed_type == "recentchanges":
|
||||
check_group_requirements(change.get("tags", []), requirement.get("tags", []))
|
||||
if requirement.get("categories", []):
|
||||
for req_cats in requirement.get("categories", []):
|
||||
|
@ -115,6 +179,17 @@ def edit_alerts_hook(message, metadata, context, change):
|
|||
break
|
||||
else:
|
||||
raise RequirementNotMet
|
||||
elif context.feed_type == "abuselog":
|
||||
req_filter = requirement.get("filter", [])
|
||||
# Allow both filter id and name as id might be hidden when logged out
|
||||
if req_filter and change["filter"] not in req_filter and change["filter_id"] not in req_filter:
|
||||
raise RequirementNotMet
|
||||
af_action = requirement.get("af_action", [])
|
||||
if af_action and change["action"] not in af_action:
|
||||
raise RequirementNotMet
|
||||
req_result = requirement.get("result", [])
|
||||
if req_result and change["result"] not in req_result:
|
||||
raise RequirementNotMet
|
||||
except RequirementNotMet:
|
||||
continue
|
||||
else:
|
||||
|
|
|
@ -25,14 +25,29 @@ from src.configloader import settings
|
|||
# }
|
||||
discord_users = settings.get("hooks", {}).get("usertalk", {})
|
||||
|
||||
def add_mention(message, userid):
|
||||
"""This function adds a mention for the userid"""
|
||||
message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + " <@{}>".format(userid)
|
||||
if message.webhook_object["allowed_mentions"].get("users", []):
|
||||
if userid not in message.webhook_object["allowed_mentions"]["users"]:
|
||||
message.webhook_object["allowed_mentions"]["users"].append(userid)
|
||||
else:
|
||||
message.webhook_object["allowed_mentions"]["users"] = [userid]
|
||||
|
||||
@post_hook
|
||||
def usertalk_hook(message, metadata, context, change):
|
||||
if discord_users and change["ns"] in [2, 3, 202] and not "/" in change["title"]:
|
||||
if not discord_users:
|
||||
return
|
||||
if context.feed_type in ["recentchanges", "abuselog"] and change["ns"] in [2, 3, 202, 1200] and not "/" in change["title"]:
|
||||
username = change["title"].split(':', 1)[1]
|
||||
if discord_users.get(username, "") and username != change["user"]:
|
||||
message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + " <@{}>".format(discord_users[username])
|
||||
if message.webhook_object["allowed_mentions"].get("users", []):
|
||||
if discord_users[username] not in message.webhook_object["allowed_mentions"]["users"]:
|
||||
message.webhook_object["allowed_mentions"]["users"].append(discord_users[username])
|
||||
else:
|
||||
message.webhook_object["allowed_mentions"]["users"] = [discord_users[username]]
|
||||
add_mention(message, discord_users[username])
|
||||
elif context.feed_type == "discussion" and context.event == "discussion/wall" and change["forumName"].endswith(' Message Wall'):
|
||||
username = change["forumName"][:-13]
|
||||
author = None
|
||||
if change["creatorIp"]:
|
||||
author = change["creatorIp"][1:]
|
||||
elif change["createdBy"]["name"]:
|
||||
author = change["createdBy"]["name"]
|
||||
if discord_users.get(username, "") and username != author:
|
||||
add_mention(message, discord_users[username])
|
||||
|
|
Loading…
Reference in a new issue