Welcome back my bots

This commit is contained in:
Hugo Levy-Falk 2020-02-20 21:03:04 +00:00
parent 4323798b54
commit 98dd2ef3fa
11 changed files with 231 additions and 2281 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
.env .env
*.log

View file

@ -0,0 +1,62 @@
[bot]
name = "Manu"
# Name of the environment variable to fetch
token = "GUTZWITOKEN"
# time between interventions in seconds
min_time = 3
channels = [
-311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
]
[ping]
quotes = [
"Les ordinateurs, c'est comme les galères romaines : moins il y a de RAM, et plus ça rame !",
"Il pédale dans la choucroute !",
"On a quand même de la chance, on vit beaucoup plus longtemps que nos ordinateurs.",
"Intel cest pas le contraire de \"tel autre\" hein, cest la marque.",
"Et depuis, je n'ai plus jamais utilisé de Macs.",
"\"Plug and Play\" pour moi cest plutôt \"je plug et jme plains.\"",
"Soit ils on changé la route, soit il y a un bogue.",
"Vous avez besoin de ce cours… \"ce cours\" en en deux mots hein ! Pas \"secours\"!",
"Machine de Mealy. [Prononcé \"Machine de Millet.\"]",
"La myopie forte.",
"Au bout de trois vies, cest *Game Over* ! [Lexamen, le rattrapage et la commission.]",
"Jai tout validé à 18. Sauf lélectromagnétisme, jai validé à 4.",
"Cest parce que moi je vois les champs magnétiques, mais du coup je ne savais pas faire les démonstrations.",
"Je me suis pointé en retard parce que je réveillais mon copiaule.",
"Il y a plein de *Klein* autour de chez mes parents.",
"Ils sont sérieux les Alsaciens !",
"Cest un bon conducteur, mais il consomme plus que son véhicule.",
"Et si jamais on pouvait mettre autre chose que des roues ?",
"Cétait une flaque de flotte, la Suisse : aquaplaning sur 300 bornes !",
"Aujourdhui, on fera des crêpes !",
"Tiens, ça pourrait être mon repas de midi ça !",
"Je mets de la farine, du lait puis des œufs… Ben je prépare des crêpes !",
"On souhaite fabriquer un modem… pas le parti politique, hein !",
"Schlumberger, ils font de la discrimination à lenvers : ils aiment beaucoup les étrangers et les femmes.",
"Pensez autrement.",
"Mon accent anglais, cest comme le français, cest approximatif.",
"Comme le disait un de mes profs : \"Et surtout… Essayez de me suivre !\"",
"Des fois… cest dur la vie dartiste.",
"Jaime pas les pommes, je préfère les poires.",
"Ce jour-là, jétais en pétard. Contre le foot. [Enterrement pendant la victoire de la France à la coupe du monde de 1998.]",
"Et donc, jai toujours un stylo sur moi.",
"Vous connaissez la règle des trois \"pourquoi\" ? Pour avoir la vérité sur quelque chose, on pose la question, puis on demande trois fois \"pourquoi ?\"",
"Vous risquez le décollement de la rétine.",
"Nessayez pas de faire voir la télé couleur à une vache !",
"Les bras men tombent.",
"Vous savez comment on dit \"Il fait froid\" en japonais ? SAKAI !",
"Lopérateur rouge cest celui qui sait faire [SFR]. Mais aujourdhui, il sait pas faire.",
"Les appareils photos numériques changent beaucoup plus vite que les humains. La preuve, j'suis là mon premier appareil photo numérique il est plus là.",
"Moi je suis vraiment sans mémoire.",
"Les vendeurs d'oscillos ont peur de moi.",
"Un filtre de Jean-Louis Gutzwiller, histoire de laisser mon nom à la postérité.",
"Ma maman, elle n'est pas de ce monde-là.",
"Et paf ! 3dB dans les dents !"
]
[match]
[join]

View file

@ -0,0 +1,33 @@
[bot]
name = "ZouZou"
# Name of the environment variable to fetch
token = "HOUZELLETOKEN"
# time between interventions in seconds
min_time = 1
channels = [
-311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
]
[ping]
quotes = [
"C'est très simple.",
"C'est facile.",
"Effectivement.",
"Alors.",
"Donc.",
"Voilà.",
"Ok ?",
"Hein.",
"D'accord ?",
"Euh...",
"Bon.",
"Bref.",
"D'accord ? Ok ? Voilà. Alors..."
]
[match]
"aide" = "Alors, hum... C'est de l'autoformation."
[join]

View file

@ -5,7 +5,12 @@ token = "MANUTOKEN"
# time between interventions in seconds # time between interventions in seconds
min_time = 30 min_time = 30
channels = [ channels = [
-311159479 -311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
] ]
[ping] [ping]
quotes = [ quotes = [

View file

@ -0,0 +1,51 @@
[bot]
name = "sel"
# Name of the environment variable to fetch
token = "PATOUTOKEN"
# time between interventions in seconds
min_time = 30
channels = [
-311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
]
[ping]
quotes = [
"En parlant de ça, Centrale ne sait vraiment pas travailler en multicampus",
"On avait ouvert une voie d'escalade sur une des façades de la résidence",
"Je vous ai parlé de la fois où j'ai discuté avec Bill Gates ?",
"Bosse plutôt que de me faire la conversation !",
"On parle, on parle, mais le code il avance pas beaucoup",
"Garantie 5 ans puis poubelle",
"Ben non, c'est une idée de merde",
"Oui, vas-y, fait comme tu veux",
"Je suis généreux, mais toi ça va pas être facile de te trouver des points",
"Attend un peu, il y a Konrad qui m'appelle. Qu'est-ce qu'il me veut encore celui-là ?",
"Hein !?",
"Faites du vpn sur l'ecole ou sur la rez depuis l'exterieur",
"Je viens donc de supprimer les comptes et de détruire les boites mail",
"Au fait, j'ai l'impression que vous avez limité ma vitesse de téléchargement, c'est un peu lent je trouve ... évitez de brider ma machine svp",
"Renaud c'est un visionnaire, mais un visionnaire aveugle",
"J'ai pas besoin de cirer des pompes ou sucer des bites. Ah je suis avec des élèves je te laisse",
"Annie elle aurait bien aimé être à fond DANS John Cagnol",
"Quand tu veux rouler vite et efficace, allongé c'est confortable",
"J'aime bien Sexion d'assaut",
"Si vous voulez pisser depuis le toit attendez que le directeur passe en-dessous",
"Pour être handicapé mental, faut déjà avoir un cerveau",
"Le prêtre a dit qu'il ne pouvait décemment pas prendre Gutzwiller : il est trop près de son Macintosh",
"Il est très bon, mais il est très con",
"On bute tout le monde et on recommence",
"Je suis toujours un peu en avance de phase",
"Stop. Tue toi.",
"La mort par convention mutuelle si je puis dire",
"Lâche moi la souris",
"On a une commande qui est 'casse-toi tu pue' et un autre qui dit 'casse-toi tu pompes les ressources'"
]
[match]
"password"="Ah facile pour avoir accès aux switches, id: root, mdp: switch"
"nvidia"="Les cartes nvidia c'est de la merde"
[join]
quotes = []

View file

@ -1,48 +0,0 @@
[bot]
name = "sel"
# Name of the environment variable to fetch
token = "SELTOKEN"
# time between interventions in seconds
min_time = 30
channels = [
-311159479
]
[ping]
quotes = [
"Arcas:`à viarezo ils font des caleçons.` Chibrac:`bah non au rezo, à viarezo ils ont pas de boules à couvrir`",
"Les lentilles c'est extrêmement pratique de base pour toute personne active [wink-wink Chibrac, NDLR]",
"proxima (ViaRézo):Pour ce qui est du reste, nous avons, je crois, bien compris votre demande ; mais nos impératifs actuels, surtout pour Rennes et Metz, impliquent de passer par notre école, qui est a priori assez frileuse vis-à-vis du Crans et de ses relations avec le CROUS; nous espérons donc pouvoir à terme nous rapprocher de la présentation que tu décris, mais cela impliquerait un travail en amont pour ne pas contrevenir à nos propres efforts, et nous souhaiterions donc que vous , ésentiez pas, pour linstant, vos démarches comme une action commune avec ViaRézo.",
"J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.",
"À Metz vous êtes vraiment des experts.",
"Centrale Metz",
"<Tipunchetrhum> Il faut vraiment être con pour acheter une imprimante Brother.",
"<David_5-1> bon, babel avec un pare-feu nftables, vous avez prévu d'y réfléchir pour 2042 ou ça a des chances d'arriver sous peu ?",
"<Chibrac> je glande presque autant qu'un pelec",
"<Chibrac> choisi l'excuse du moment chez ton supelec : l'inté, la campagne, les partiels, les vacances",
"<Chibrac> ouais mais j'ai jamais vu de gens aussi efficaces que les pelec pour justifier pq ils peuvent pas faire un truc",
"<Grubigrub> Chirac on connaît tous tes performances scolaires t'inquiète pas",
"Un jour j'irais me frotter à #federez, pour voir du gros sel.",
"<S&M> un prof de maths est généralement compétent en maths, alors que jattends toujours de rencontrer un prof dinfo qui est capable de mettre quelque chose en prod",
"<shaka> D'après le fameux théorème centralien je pense que j'ai droit donc j'ai le droit",
"<shaka> dtf vous arriverez pas au niveau de via qui découvre tous les ans des thunes placées sur des comptes random",
"<shaka> il faudrait faire un achivement : a réussi a désinstaller le virtualiseur du virtualiseur",
"<Guimoz> De toute facon il y a ceux qui ont réussi à conserver leur Coopé™ et ceux qui doivent s'exiler pour en retrouver une",
"<shaka> je rajoute du gros sel façon ViaRézo \n<klafyvel> fais gaffe bientôt le steak va coder en node",
"<Klafyvel> Je préfère parler de limitation de débit afin de prioriser les services critiques.",
"<Grubigrub> Le jour où @lebanni est engagé dans une entreprise,j'y enlève toutes mes actions.",
"<Nanoy> Toute façon, les prezs rezo c'est souvent des pots de fleurs avec une clé root.",
"<@lebanni> Je suis un gros quetard",
"La soeur du banni : Matthieu, tu peux m'aider sur mon exo de maths ? @lebanni : Flemme, mon temps vaut de l'argent",
"<Nanoy> Un JT c'est pas comme des nocturnes FedeRez, ça s'organise pas tout seul."
]
[match]
"détruire le monde" = "Manu on fait des collages ?"
"imprimante" = "Je pense qu'on devrait reprendre la même imprimante Brother."
"{name}, pourquoi es-tu là ?" = "{user} : En l'an 2018, en plus d'être feignants, les Rézomen devinrent salés à cause de la fermeture du campus. C'est pourquoi un jeune Rézoman nommé Klafyvel m'a créé, afin d'avoir un salage automatique de {channel}. Depuis je hante le chan."
"on peut te joindre sur irc et telegram ?" = "{user} : oui, sur telegram pour que mes amis iraniens profitent de ma science et sur irc en attendant que les barbus en manque de reconnaissance se mettent à la page. Je pense qu'on devrait ajouter un bridge matrix \U0001f914"
"telegram" = "{user} : tu devrais passer à irc."
"irc.*matrix" = "{user} : tu devrais passer à matrix."
"matrix.*irc" = "> {message}\nLes vrais font tourner matrix dans un tmux."
"proxmox" = "proxmox c'est surfait, faut l'autoremove"
[join]
quotes = ['Unleash the salt']

View file

@ -0,0 +1,33 @@
[bot]
name = "Marc"
# Name of the environment variable to fetch
token = "MARCTOKEN"
# time between interventions in seconds
min_time = 3
channels = [
-311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
]
[ping]
quotes = [
"Ça me désole quand munme.",
"Le monde va mal, vous savez. Faites HEC.",
"C'est pipoland m'voyez.",
"À Supélec, je ne sais pas comment ils fonctionnent.",
"C'est pas un Belge qui va révolutionner les grandes écoles, chacun sa merde.",
"Eh je suis pas un tueur. Enfin dans la vraie vie, si. D'ailleurs il y a eu un meurtre non élucidé près de chez moi, mais c'est pas moi.",
"C'est comme votre latence matinale, moi j'arrive avec mon sin(t) et je vous secoue harmoniquement.",
"Je vais essayer de vous aider, il va y avoir une sélection naturelle.",
"Si quelqu'un fait une thèse, il a 3 points de plus à l'exam'.",
"Si on me demande plus que le passé, je dis que le passé du passé c'est le passé.",
"C'est mal foutu parce que ce n'est pas moi qui l'ai fait mais des gens de Paris.",
"Marcher c'est compliqué.",
"Vous savez, j'ai mis un temps fou à comprendre qu'on avait cours ici."
]
[match]
"[Pp]hotonique" = "C'est la science du XXIIe siècle."
[join]

View file

@ -5,7 +5,12 @@ token = "SELTOKEN"
# time between interventions in seconds # time between interventions in seconds
min_time = 30 min_time = 30
channels = [ channels = [
-311159479 -311159479,
-320933904,
-45394299
]
admins = [
452970435 # klafyvel
] ]
[ping] [ping]
quotes = [ quotes = [

File diff suppressed because it is too large Load diff

View file

@ -8,8 +8,10 @@ import os
import toml import toml
import telegram import telegram
from telegram.ext import MessageHandler, Filters from telegram.ext import MessageHandler, Filters
from telegram.ext import Updater from telegram.ext import Updater, Handler
from telegram.ext import CommandHandler from telegram.ext import CommandHandler
from telegram import InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import InlineQueryHandler
class Bot: class Bot:
@ -22,6 +24,7 @@ class Bot:
logging.info("Loading configuration from %s.", filename) logging.info("Loading configuration from %s.", filename)
self.config = toml.load(filename) self.config = toml.load(filename)
self.name = self.config["bot"]['name'] self.name = self.config["bot"]['name']
self.min_time = self.config["bot"]["min_time"]
self.bot = telegram.Bot(os.environ[self.config["bot"]['token']]) self.bot = telegram.Bot(os.environ[self.config["bot"]['token']])
self.channels = {} self.channels = {}
self.reactions = {} self.reactions = {}
@ -34,7 +37,7 @@ class Bot:
self.add_ping(quote) self.add_ping(quote)
for channel in self.config["bot"]["channels"]: for channel in self.config["bot"]["channels"]:
self.channels[channel] = datetime.datetime(1,1,1) self.channels[int(channel)] = datetime.datetime(1,1,1)
self.updater = Updater(token=os.environ[self.config["bot"]["token"]], use_context=True) self.updater = Updater(token=os.environ[self.config["bot"]["token"]], use_context=True)
@ -43,6 +46,10 @@ class Bot:
self.quote_handler = CommandHandler('ping', self.on_ping) self.quote_handler = CommandHandler('ping', self.on_ping)
self.match_handler = MessageHandler(Filters.text, self.on_message) self.match_handler = MessageHandler(Filters.text, self.on_message)
self.dispatcher.add_handler(self.quote_handler) self.dispatcher.add_handler(self.quote_handler)
self.dispatcher.add_handler(self.match_handler)
def is_allowed(self, update, context):
return update.effective_chat.id in self.channels
def start(self): def start(self):
self.updater.start_polling() self.updater.start_polling()
@ -53,7 +60,31 @@ class Bot:
def on_join(self): def on_join(self):
pass pass
def on_inline(self, update, context):
if not self.is_allowed(update, context):
return
query = update.inline_query.query
if not query:
return
results = list()
results.append(
InlineQueryResultArticle(
id=query.upper(),
title='Caps',
input_message_content=InputTextMessageContent(query.upper())
)
)
context.bot.answer_inline_query(update.inline_query.id, results)
def on_ping(self, update, context): def on_ping(self, update, context):
if not self.is_allowed(update, context):
context.bot.send_message(
chat_id=update.effective_chat.id,
text="Sorry, mamma told me not to talk with random strangers.",
reply_to_message_id=update.effective_message.message_id
)
return
c = { c = {
"channel": update.effective_chat.title, "channel": update.effective_chat.title,
"name": self.name, "name": self.name,
@ -68,12 +99,14 @@ class Bot:
context.bot.send_message(chat_id=update.effective_chat.id, text=quote, reply_to_message_id=update.effective_message.message_id) context.bot.send_message(chat_id=update.effective_chat.id, text=quote, reply_to_message_id=update.effective_message.message_id)
def on_message(self, update, context): def on_message(self, update, context):
if not self.is_allowed(update, context):
return
user = update.effective_user user = update.effective_user
channel = update.effective_chat channel = update.effective_chat
message = update.effective_message message = update.effective_message
answer = self.get_reaction(user, channel, message) answer = self.get_reaction(user, channel, message)
for ans in answer: if answer:
context.bot.send_message(chat_id=update.effective_chat.id, text=ans) context.bot.send_message(chat_id=update.effective_chat.id, text=answer[0], reply_to_message_id=update.effective_message.message_id)
def add_reaction(self, match, reaction): def add_reaction(self, match, reaction):
"""Add a reaction to the bot. """Add a reaction to the bot.
@ -131,7 +164,7 @@ class Bot:
result = [] result = []
logging.debug("Looking for reactions.") logging.debug("Looking for reactions.")
for m in self.reactions.keys(): for m in self.reactions.keys():
search = m.search(message.text) search = re.search(m.format(**context), message.text)
if search: if search:
r = self.reactions[m] r = self.reactions[m]
if callable(r): if callable(r):

View file

@ -13,7 +13,7 @@ else:
logger = logging.getLogger() logger = logging.getLogger()
if DEBUG: if DEBUG:
logger.setLevel(logging.DEBUG) logger.setLevel(logging.INFO)
else: else:
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)