added possibility to use hooks

This commit is contained in:
Frisk 2021-05-03 01:46:40 +02:00
parent 1b417ce359
commit 77bdac1349
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
3 changed files with 30 additions and 3 deletions

View file

@ -13,3 +13,24 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>. # along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
import src.api.hooks
def pre_hook(func):
"""
Decorator to register a pre hook and return a function
:return: func
"""
src.api.hooks.pre_hooks.append(func)
return func
def post_hook(func):
"""
Decorator to register a post hook and return a function
:return: func
"""
src.api.hooks.post_hooks.append(func)
return func

View file

@ -15,3 +15,5 @@
# Made just to avoid circular imports # Made just to avoid circular imports
formatter_hooks = {} formatter_hooks = {}
pre_hooks = []
post_hooks = []

View file

@ -27,11 +27,11 @@ from collections import defaultdict, Counter
from typing import Optional from typing import Optional
import src.api.client import src.api.client
from src.api.context import Context from src.api.context import Context
from src.api.hooks import formatter_hooks from src.api.hooks import formatter_hooks, pre_hooks, post_hooks
from src.configloader import settings from src.configloader import settings
from src.misc import add_to_dict, datafile, \ from src.misc import add_to_dict, datafile, \
WIKI_API_PATH WIKI_API_PATH
from src.api.util import create_article_path, default_message from src.api.util import create_article_path, default_message, sanitize_to_markdown
from src.discord.queue import send_to_discord from src.discord.queue import send_to_discord
from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.message import DiscordMessage, DiscordMessageMetadata
from src.exceptions import MWError from src.exceptions import MWError
@ -239,6 +239,8 @@ def rc_processor(change, changed_categories):
page_id=change.get("pageid", None)) page_id=change.get("pageid", None))
logger.debug(change) logger.debug(change)
context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) context = Context(settings["appearance"]["mode"], settings["webhookURL"], client)
for hook in pre_hooks:
hook(change)
if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression
context.event = "suppressed" context.event = "suppressed"
discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change)
@ -246,7 +248,7 @@ def rc_processor(change, changed_categories):
if "commenthidden" not in change: if "commenthidden" not in change:
LinkParser.feed(change.get("parsedcomment", "")) LinkParser.feed(change.get("parsedcomment", ""))
parsed_comment = LinkParser.new_string parsed_comment = LinkParser.new_string
parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment) parsed_comment = sanitize_to_markdown(parsed_comment)
else: else:
parsed_comment = _("~~hidden~~") parsed_comment = _("~~hidden~~")
context.set_parsedcomment(parsed_comment) context.set_parsedcomment(parsed_comment)
@ -270,6 +272,8 @@ def rc_processor(change, changed_categories):
discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change)
if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED:
delete_messages(dict(pageid=change.get("pageid"))) delete_messages(dict(pageid=change.get("pageid")))
for hook in post_hooks:
hook(discord_message, metadata)
send_to_discord(discord_message, metadata) send_to_discord(discord_message, metadata)