Commit edb32d76 authored by Mindiell's avatar Mindiell

All messages have been recollected in each specific modules

parent 6582ec6d
......@@ -8,8 +8,7 @@ import sqlite3
import config
from logs import Log
from messages import messages
from utils import get_cursor, get_url, is_moderator
from utils import is_moderator
class Admin():
def admin(self, user, msg):
......@@ -41,9 +40,9 @@ class Admin():
names = []
for row in connection.execute("SELECT name FROM moderator"):
names.append(row[0].encode("utf-8"))
return messages["admin_list"] % ", ".join(sorted(names))
return "Liste des modérateurs actuels: %s" % ", ".join(sorted(names))
else:
return messages["not_moderator"]
return "Désolé, il ne semble pas que vous ayez les droits pour cette commande."
def admin_add(self, user, msg):
"""
......@@ -68,13 +67,13 @@ class Admin():
values = [(name,) for name in names]
connection.executemany("INSERT INTO moderator (name) VALUES (?)", values)
connection.commit()
return messages["admin_add"] % ", ".join(names)
return "%s a(ont) été ajouté(s) à la liste des modérateurs" % ", ".join(names)
else:
return messages["admin_add_empty"]
return "Ces utilisateurs sont déjà modérateurs"
except Exception:
return ""
else:
return messages["not_moderator"]
return "Désolé, il ne semble pas que vous ayez les droits pour cette commande."
def admin_del(self, user, msg):
"""
......@@ -94,11 +93,11 @@ class Admin():
for name in names:
connection.execute("DELETE FROM moderator WHERE name=?", (name, ))
connection.commit()
return messages["admin_del"] % ", ".join(names)
return "%s a(ont) été retiré(s) de la liste des modérateurs." % ", ".join(names)
except Exception:
return ""
else:
return messages["not_moderator"]
return "Désolé, il ne semble pas que vous ayez les droits pour cette commande."
def admin_timer(self, user):
"""
......@@ -108,4 +107,4 @@ class Admin():
if is_moderator(user):
return "REACTOR"
else:
return messages["not_moderator"]
return "Désolé, il ne semble pas que vous ayez les droits pour cette commande."
......@@ -43,7 +43,7 @@ def fun(user, channel, message):
"sound": "yiik",
},
])
return messages["coin_deltree"] % (
return "%s ~ %s ~ Deltree ~ %s ~ %s" % (
animal["left"],
animal["sound"],
animal["sound"],
......
# encoding: utf-8
"""
Ce fichier contient les messages utilisés par Wantzel.
Il les recharge à chaque fois qu'on lui fournit la commande '~reload' sur IRC.
"""
messages = {
"hello":
"""Bonjour, je suis le bot de la Quadrature du Net, vous pouvez me demander de l'aide si besoin. (wantzel help)""",
"help":
"""Mes commandes sont : ~help ~rp(cpa) ~status ~kill ~stats et ~admin.
Pour plus d'informations, voir ici: https://wiki.laquadrature.net/Wantzel
Pour obtenir de l'aide sur une commande en particulier, il suffit de taper ~help <commande>""",
"help_help":
"""Bravo!
Tu viens d'entrer dans le monde récursif où l'aide sert à expliciter l'aide.""",
"help_rp":
"""Cette commande sert à ajouter un article à la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
L'utilisation se fait sous la forme: ~rp(cpa) <url de l'article à ajouter>""",
"help_status":
"""Cette commande sert à retrouver les informations concernant un article ajouté à la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
L'utilisation se fait sous la forme: ~status <url de l'article>""",
"help_stats":
"""Cette commande permet de fournir quelques statistiques sur la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
Les statistiques sont calculées sur des notes supérieurs ou égales à 0, 3, et 4. Et sur les 1, 3, 7, et 15 derniers jours.""",
"help_kill":
"""*Attention* seuls les vrais rp-jedis ont accès à cette commande <3
Fixe la note de l'article donné en paramètre à -100.
Utile en cas d'erreur ou pour s'assurer que l'article ne sera pas publié dans la RP
Utilisation: ~kill <url de l'article>""",
"help_admin":
"""*Attention* seuls les vrais rp-jedis ont accès à cette commande <3
Permet de gérer la liste des utilisateurs ayant un accès privilégié. Il n'y a qu'un seul niveau de privilège.
Utilisations:
~admin list => Fournit la liste des utilisateurs privilégiés
~admin add user[, user]> => Ajoute un ou plusieurs utilisateurs à la liste
~admin del user[, user] => Supprime un ou plusieurs utilisateurs de la liste
~admin timer => Relance un timer pour gérer le topic et les tweets""",
"rp_http":
"""Merci %s, mais je prends en compte uniquement les adresses internet qui commencent par http ou https""",
"status_unknown_article":
"""Désolé %s, l'url donnée n'existe pas dans la base de données.""",
"kill_none":
"""%s n'existe pas dans la base de données""",
"kill_done":
"""%s mis à -100""",
"stats_bravo":
"""Bravo les neurones, rien en retard depuis ces %s derniers jours!""",
"title":
"""Titre: %s (à %s)""",
"admin_list":
"""Liste des modérateurs actuels: %s""",
"admin_add":
"""%s a(ont) été ajouté(s) à la liste des modérateurs""",
"admin_add_empty":
"""Ces utilisateurs sont déjà modérateurs""",
"admin_del":
"""%s a(ont) été retiré(s) de la liste des modérateurs.""",
"not_moderator":
"""Désolé, il ne semble pas que vous ayez les droits pour cette commande.""",
"topic":
"""Canal de la revue de presse de La Quadrature du Net ~ %s articles en attente ~ Mode d'emploi https://wiki.laquadrature.net/Revue_de_presse ~ Une arme, le savoir est. Le diffuser, notre devoir c'est.""",
"tweet_rp_fr":
"""[fr] %s — %s""",
"tweet_rp_en":
"""[en] %s — %s""",
"new_starter":
"""Afin d'éviter des commandes prises en compte par plusieurs bots, il est désormais fortement conseillé d'utiliser des commandes commençant par '~', merci.""",
"please_op":
"""%s j'ai besoin d'être op pour modifier le topic, ne m'oubliez pas s'il vous plait !""",
"oped":
"""Merci %s <3""",
"deoped":
"""Vilain %s )o;""",
"wiki_update":
"""%s a mis à jour la page "%s" sur le wiki (%s)""",
"coin_deltree":
"""%s ~ %s ~ Deltree ~ %s ~ %s""",
"new_rp_new_article":
"""Merci %s, cette url a été ajoutée à la revue de presse ! À présent, que dirais-tu d'aider à choisir les extraits de l'article à publier sur #lqdn-rp ? <3""",
"new_rp_known_article":
"""Merci %s ! Un point a été ajouté à cet article : à partir de 3, il pourra être repris dans la revue de presse. D'ailleurs, que dirais-tu d'aider à choisir les extraits à publier sur #lqdn-rp ? <3""",
"new_rp_taken_article":
"""Merci %s ! Un point a été ajouté à cet article : il va être repris dans la revue de presse. D'ailleurs, que dirais-tu d'aider à choisir les extraits à publier sur #lqdn-rp ? <3""",
"known_rp_new_article":
"""Merci %s, cette url a été ajoutée à la revue de presse !""",
"known_rp_known_article":
"""Merci %s ! Un point a été ajouté à cet article : à partir de 3, il pourra être repris dans la revue de presse.""",
"known_rp_taken_article":
"""Merci %s ! Un point a été ajouté à cet article : il va être repris dans la revue de presse.""",
"master_rp_new_article":
"""Merci pour l'info %s !""",
"master_rp_known_article":
"""Merci %s !""",
"master_rp_taken_article":
"""Merci %s ! L'article est prêt pour la revue de presse !""",
}
......@@ -9,7 +9,6 @@ import time
import config
from logs import Log
from messages import messages
class Wiki():
def __init__(self, name, url):
......@@ -71,7 +70,7 @@ class Monitor():
if today < entry.updated_parsed:
if wiki.last_entry_updated < entry.updated_parsed:
# Ecriture de la mise à jour sur le canal de travail
messages.append(messages["wiki_update"] % (
messages.append("""%s a mis à jour la page "%s" sur le wiki (%s)""" % (
entry.author.encode("utf-8"),
entry.title.encode("utf-8"),
entry.link.encode("utf-8"),
......
......@@ -7,7 +7,6 @@ import re
import config
from logs import Log
from messages import messages
class Op():
def __init__(self):
......@@ -36,7 +35,7 @@ class Op():
Log.debug("op_offset : %s" % self.op_offset)
Log.debug("op_sequence : %s" % self.op_sequence[self.op_offset])
if self.op_counter>self.op_sequence[self.op_offset]:
message = messages["please_op"] % ", ".join(ops)
message = "%s j'ai besoin d'être op pour modifier le topic, ne m'oubliez pas s'il vous plait !" % ", ".join(ops)
# Then reset op_counter
self.op_counter = 0
# And move the sequence further in order not to spam channel
......@@ -52,7 +51,7 @@ class Op():
self.op_counter = 0
self.op_offset = 0
# thanks to user
return messages["oped"] % user
return "Merci %s <3" % user
else:
# bad user ;o(
return messages["deoped"] % user
return "Vilain %s )o;" % user
......@@ -4,13 +4,45 @@ Press review methods.
"""
import feedparser
import MySQLdb
import sqlite3
import time
import config
from logs import Log
from messages import messages
from utils import get_cursor, get_url, is_moderator
from utils import get_url, is_moderator
def get_cursor():
"""
This function connects to a MySQL database and returns a usable cursor.
"""
connection = MySQLdb.connect(
host=config.dbserver,
user=config.dbuser,
passwd=config.dbpassword,
db=config.dbname
)
if connection:
return connection.cursor()
return None
def tweet(message):
"""
Tweet message on specified account
"""
Log.debug("tweet method")
auth = OAuth(
config.TOKEN,
config.TOKENSEC,
config.CONSKEY,
config.CONSSEC
)
twitter = Twitter(auth=auth)
try:
Log.debug("Tweeting: %s" % message)
twitter.statuses.update(status=message)
except Exception as e:
Log.error("Erreur lors du tweet : " + str(e))
class Rp():
def __init__(self):
......@@ -76,9 +108,10 @@ class Rp():
# What is the number of chars we need to remove
excess = len(title) + min(len(link),23) - 135
title = ''.join([title[:-(excess + 2)], ' …'])
tweet(messages["tweet_rp_%s" % language] % (
tweet("[%s] %s — %s" % (
language,
title,
link
link,
))
Log.debug(entry.published_parsed)
Log.debug(entry.title)
......@@ -116,7 +149,7 @@ class Rp():
number = int(rows[0][0])
Log.debug("Found %s articles." % number)
if self.number != number:
topic = messages["topic"] % number
topic = "Canal de la revue de presse de La Quadrature du Net ~ %s articles en attente ~ Mode d'emploi https://wiki.laquadrature.net/Revue_de_presse ~ Une arme, le savoir est. Le diffuser, notre devoir c'est." % number
self.number = number
return topic
......@@ -164,7 +197,7 @@ class Rp():
)
rows = cursor.fetchall()
if not rows:
return messages["status_unknown_article"] % user
return "Désolé %s, l'url donnée n'existe pas dans la base de données." % user
message = "%s: note %s / " % (user, rows[0][2])
if rows[0][0] & 1:
message += "cite LQdN / "
......@@ -189,7 +222,7 @@ class Rp():
if url == "":
return message
elif url == "http":
return messages["rp_http"] % user
return "Merci %s, mais je prends en compte uniquement les adresses internet qui commencent par http ou https" % user
# Looking for such an article in database
cursor = get_cursor()
# We need to be able to retrieve an url with "http" or "https"
......@@ -206,11 +239,11 @@ class Rp():
)
rows = cursor.fetchall()
if not rows:
return messages["kill_none"] % url
return "%s n'existe pas dans la base de données." % url
else:
cursor.execute("UPDATE presse SET note=-100 WHERE id=%s", (rows[0][0], ))
return messages["kill_done"] % url
return messages["not_moderator"]
return "%s mis à -100" % url
return "Désolé, il ne semble pas que vous ayez les droits pour cette commande."
def stats(self):
"""
......@@ -242,7 +275,7 @@ class Rp():
if notnull:
return "note>=%s: " % note + period_result[:-2]
if somethingatall == 0:
return messages["stats_bravo"] % periods[-1]
return "Bravo les neurones, rien en retard depuis ces %s derniers jours!" % periods[-1]
def rp(self, command, user, channel, msg):
"""
......@@ -342,24 +375,24 @@ class Rp():
if master_user:
# user is a rp master
if note==1:
return messages["master_rp_new_article"] % user
return "Merci pour l'info %s !" % user
elif note<3:
return messages["master_rp_known_article"] % user
return "Merci %s !" % user
else:
return messages["master_rp_taken_article"] % user
return "Merci %s ! L'article est prêt pour la revue de presse !" % user
elif known_user or know_rp:
# user is known but not a master and/or he knows the rp channel
if note==1:
return messages["known_rp_new_article"] % user
return "Merci %s, cette url a été ajoutée à la revue de presse !" % user
elif note<3:
return messages["known_rp_known_article"] % user
return "Merci %s ! Un point a été ajouté à cet article : à partir de 3, il pourra être repris dans la revue de presse." % user
else:
return messages["known_rp_taken_article"] % user
return "Merci %s ! Un point a été ajouté à cet article : il va être repris dans la revue de presse." % user
else:
# user is unknown, and he does'nt seems to know the rp channel
if note==1:
return messages["new_rp_new_article"] % user
return "Merci %s, cette url a été ajoutée à la revue de presse ! À présent, que dirais-tu d'aider à choisir les extraits de l'article à publier sur #lqdn-rp ? <3" % user
elif note<3:
return messages["new_rp_known_article"] % user
return "Merci %s ! Un point a été ajouté à cet article : à partir de 3, il pourra être repris dans la revue de presse. D'ailleurs, que dirais-tu d'aider à choisir les extraits à publier sur #lqdn-rp ? <3" % user
else:
return messages["new_rp_taken_article"] % user
return "Merci %s ! Un point a été ajouté à cet article : il va être repris dans la revue de presse. D'ailleurs, que dirais-tu d'aider à choisir les extraits à publier sur #lqdn-rp ? <3" % user
......@@ -3,28 +3,12 @@
Utility functions for Wantzel bot.
"""
import MySQLdb
import re
import sqlite3
import config
from logs import Log
def get_cursor():
"""
This function connects to a MySQL database and returns a usable cursor.
"""
connection = MySQLdb.connect(
host=config.dbserver,
user=config.dbuser,
passwd=config.dbpassword,
db=config.dbname
)
if connection:
return connection.cursor()
return None
def get_url(message):
"""
Retrieve the url in the message.
......@@ -42,7 +26,6 @@ def get_url(message):
url = re.sub("[?&](utm_medium|utm_source|utm_campaign|xtor)=[^&]*", "", url)
return url
def is_moderator(name):
"""
This function verify if a user is a moderator.
......@@ -53,22 +36,3 @@ def is_moderator(name):
if int(cursor.fetchone()[0]) == 1:
return True
return False
def tweet(message):
"""
Tweet message on specified account
"""
Log.debug("tweet method")
auth = OAuth(
config.TOKEN,
config.TOKENSEC,
config.CONSKEY,
config.CONSSEC
)
twitter = Twitter(auth=auth)
try:
Log.debug("Tweeting: %s" % message)
twitter.statuses.update(status=message)
except Exception as e:
Log.error("Erreur lors du tweet : " + str(e))
......@@ -14,7 +14,6 @@ from twitter import Twitter, OAuth
import config
from logs import Log
from messages import messages
# bot modules
from admin import Admin
......@@ -185,9 +184,61 @@ class Wantzel(object):
command = re.search("[!~]help (help|rp|status|stats|kill|admin)", msg)
if command:
command = command.group(1)
self.send_message(user, messages["help_"+command])
if command=="help":
self.send_message(
user,
"""Bravo!
Tu viens d'entrer dans le monde récursif où l'aide sert à expliciter l'aide."""
)
elif command=="rp":
self.send_message(
user,
"""Cette commande sert à ajouter un article à la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
L'utilisation se fait sous la forme: ~rp(cpa) <url de l'article à ajouter>"""
)
elif command=="status":
self.send_message(
user,
"""Cette commande sert à retrouver les informations concernant un article ajouté à la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
L'utilisation se fait sous la forme: ~status <url de l'article>"""
)
elif command=="stats":
self.send_message(
user,
"""Cette commande permet de fournir quelques statistiques sur la Revue de Presse (https://wiki.laquadrature.net/Revue_de_presse)
Les statistiques sont calculées sur des notes supérieurs ou égales à 0, 3, et 4. Et sur les 1, 3, 7, et 15 derniers jours."""
)
elif command=="kill":
self.send_message(
user,
"""*Attention* seuls les vrais rp-jedis ont accès à cette commande <3
Fixe la note de l'article donné en paramètre à -100.
Utile en cas d'erreur ou pour s'assurer que l'article ne sera pas publié dans la RP
Utilisation: ~kill <url de l'article>"""
)
elif command=="admin":
self.send_message(
user,
"""*Attention* seuls les vrais rp-jedis ont accès à cette commande <3
Permet de gérer la liste des utilisateurs ayant un accès privilégié. Il n'y a qu'un seul niveau de privilège.
Utilisations:
~admin list => Fournit la liste des utilisateurs privilégiés
~admin add user[, user]> => Ajoute un ou plusieurs utilisateurs à la liste
~admin del user[, user] => Supprime un ou plusieurs utilisateurs de la liste
~admin timer => Relance un timer pour gérer le topic et les tweets"""
)
else:
self.send_message(
user,
"""Désolé, je ne connais pas cette commande."""
)
else:
self.send_message(user, messages["help"])
self.send_message(
user,
"""Mes commandes sont : ~help ~rp(cpa) ~status ~kill ~stats et ~admin.
Pour plus d'informations, voir ici: https://wiki.laquadrature.net/Wantzel
Pour obtenir de l'aide sur une commande en particulier, il suffit de taper ~help <commande>"""
)
if __name__ == '__main__':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment