diff --git a/modbot.py b/modbot.py index ca535f72efcc0ec1c6559c8a0299112333c7fae8..8ca74445885751ac621fc92cd9dcfb1ae784316a 100644 --- a/modbot.py +++ b/modbot.py @@ -208,13 +208,14 @@ Options: users, topic, post, - simulate = simulate + simulate = simulate, + server = SERVER ) print(result) - if "actions" in result: + if not simulate and "actions" in result: for action in result["actions"]: if action["action"] in switch_actions: - switch_actions[action["action"]](kwargs) + switch_actions[action["action"]](action["kwargs"]) topic.post_seen_latest = post["id"] diff --git a/rules/std_clarity.py b/rules/std_clarity.py index a4a91815ed4ed158ab9bd1a07ef67f1d52bff480..44096415135753ef903d67017fdd7f25e31c14e0 100644 --- a/rules/std_clarity.py +++ b/rules/std_clarity.py @@ -24,12 +24,26 @@ DESCRIPTION = "Checks for clarity in posts" AUTHORS = ["tuxmain <tuxmain@zettascript.org>"] SETTINGS = { "post_chars_count_max": 10000, - "warnings": 3 + "warnings": 3, + "moderate_staff": False } +ITEMS = { + "too_long": """**Message trop long** : cela gêne la lecture du topic et le déroulement d'un débat. Veillez à laisser du temps aux autres pour répondre.""", + "no_paragraphs": """**Paragraphes trop longs** : un message structuré en petits paragraphes est plus lisible.""", + "no_punctuation": """**Peu de ponctuation** : utiliser plus de ponctuation rendrait vos phrases plus lisibles.""" +} MESSAGE_WARNING_TEXT = """Bonjour, -Vous avez posté un message trop long.""" +Vous avez récemment posté [un message]({server}/t/{topic_id}/{post_id}) ne respectant pas certains critères aidant à entretenir une bonne communication sur ce forum : + +{items} + +L'équipe de modération vous prie de suivre ces règles, dans le cas contraire des mesures pourront être prises. + +Si vous pensez que cet avertissement est une erreur, veuillez nous en excuser. [Vous pouvez le signaler sur ce topic.](https://forum.monnaie-libre.fr/t/developpement-dun-plugin-discourse-pour-limiter-le-nombre-de-posts-par-jour-par-personne/7121) (c'est d'autant plus probable que ce robot de modération est en développement) + +Ce message est envoyé par un robot qui ne saura pas lire vos réponses.""" MESSAGE_SANCTION_TEXT = """Bonjour, Vous avez encore posté un message trop long. C'était la fois de trop. @@ -39,8 +53,18 @@ Que la foudre de la modération s'abatte sur votre clavier ! def target_new_post(users, topic, post, **kwargs): user = users[post["user_id"]] + if SETTINGS["moderate_staff"] and (user["admin"] or user["moderator"]): + return {} + text = utils.clean_html(post["cooked"]) - if len(text) > SETTINGS["post_chars_count_max"] and "message de test" in text: + infringed = [] + + if len(text) > SETTINGS["post_chars_count_max"]: + infringed.append("too_long") + + print(text) + + if len(infringed) > 0: user.warnings += 1 if user.warnings < SETTINGS["warnings"]: return { @@ -49,7 +73,12 @@ def target_new_post(users, topic, post, **kwargs): "action": "send_message", "kwargs": { "user": user, - "text": MESSAGE_WARNING_TEXT + "text": MESSAGE_WARNING_TEXT.format( + server=kwargs["server"], + topic_id=topic.id, + post_id=post["id"], + items="\n".join([" * {}".format(ITEMS[i]) for i in infringed]) + ) } } ] diff --git a/utils.py b/utils.py index aa18b42dba68e8bfb408a2a63af8aa6268598f8f..2d499dfcd8adc36bfae2c47c1878e90954365369 100644 --- a/utils.py +++ b/utils.py @@ -17,8 +17,6 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. """ -# THIS IS NOT A RULE FILE, but only a library used by rules! - import re, html word_separators = [" ", ",", ".", ";", ":", "?", "!", "(", ")", "/", "+", "<", ">", "\t", "\n", "\r", "=", "…", "\u202f", '"', "\\"] @@ -26,7 +24,10 @@ ngram_word_separator = " " clean_html_r = re.compile("<.*?>") -def clean_html(text): +def clean_html(text, remove_asides=True): + if remove_asides: + text = re.sub(re.compile("<aside(.+?)</aside>"), "", text) + return html.unescape(re.sub(clean_html_r, '', text)) def find_words(text):