Browse Source

Ajout des fichiers

merge-requests/1/head
Klafyvel 8 years ago
commit
5bde822623
  1. 3
      README.md
  2. 46
      bots.yaml
  3. 7
      install.sh
  4. 14
      klafirc.service
  5. 7
      klafirc/__init__.py
  6. 3
      klafirc/__main__.py
  7. BIN
      klafirc/__pycache__/__init__.cpython-36.pyc
  8. BIN
      klafirc/__pycache__/__main__.cpython-36.pyc
  9. BIN
      klafirc/__pycache__/bot.cpython-36.pyc
  10. BIN
      klafirc/__pycache__/irc.cpython-36.pyc
  11. BIN
      klafirc/__pycache__/loader.cpython-36.pyc
  12. BIN
      klafirc/__pycache__/runner.cpython-36.pyc
  13. BIN
      klafirc/__pycache__/settings.cpython-36.pyc
  14. 68
      klafirc/bot.py
  15. 55
      klafirc/irc.py
  16. 289
      klafirc/klafirc.log
  17. 38
      klafirc/loader.py
  18. 21
      klafirc/runner.py
  19. 24
      klafirc/settings.py
  20. 11
      requirements.txt

3
README.md

@ -0,0 +1,3 @@
#Klafirc
Klafirc is a simple irc bot which react to matches and pings.

46
bots.yaml

@ -0,0 +1,46 @@
bots:
sel:
on_ping:
- "Arcas:`à viarezo ils font des caleçons.` Chibrac:`bah non au rezo, à viarezo ils ont pas de boules à couvrir`"
- "Unleash the salt"
- "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 présentiez pas, pour l’instant, 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"
- "<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"
- "<Grubigrub> Chirac on connaît tous tes performances scolaires t'inquiète pas"
on_match:
'détruire le monde' : "Manu on fait des collages ?"
'{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 mode de reconnaissance se mettent à la page. Je pense qu'on devrait ajouter un bridge matrix \U0001f914"
Macron:
on_ping:
- "PARCE QUE C'EST NOTRE PROJEEEET !"
on_match:
'tocard' : "Est-ce que je peux dire autocar ?"
'^Manu.*\?' : "Tu m’appelles monsieur le président de la République, ou monsieur."
Patou:
on_ping:
- "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"
channels:
- server: irc.rezometz.org
port: 6667
channel: "#test"
bots: [sel, Macron, Patou]

7
install.sh

@ -0,0 +1,7 @@
pip3 install -r requirements.txt
mkdir /var/log/klafirc
mkdir /etc/klafirc
cp bots.yaml /etc/klafirc
cp klafirc.service /etc/systemd/system/
systemctl enable klafirc.service
systemctl start klafirc.service

14
klafirc.service

@ -0,0 +1,14 @@
[Unit]
Description=Klafyirc bots
After=network-online.target
[Service]
Type=simple
User=klafirc
Group=klafirc
ExecStart=python3 -m klafirc
[Install]
WantedBy=multi-user.target

7
klafirc/__init__.py

@ -0,0 +1,7 @@
"""
A simple irc bot. See /etc/klafirc/bots.yaml to see which bots are runned.
"""
from .runner import run
__version__ = "0.1"

3
klafirc/__main__.py

@ -0,0 +1,3 @@
from . import run
run()

BIN
klafirc/__pycache__/__init__.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/__main__.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/bot.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/irc.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/loader.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/runner.cpython-36.pyc

Binary file not shown.

BIN
klafirc/__pycache__/settings.cpython-36.pyc

Binary file not shown.

68
klafirc/bot.py

@ -0,0 +1,68 @@
import re
import random
class Bot:
def __init__(self, nickname):
"""Initialize a bot object
Args:
nickname: nickname of the bot on irc
"""
self.nickname = nickname
self.channel = None
self.port = None
self.server = None
self.reactions = {}
self.pings = []
self.ping_match = re.compile('^(<.+> )?\@?{name}'.format(name=nickname))
def add_reaction(self, match, reaction):
"""Add a reaction to the bot.
Args:
match: The string which, if matched will trigger the answer.
reaction: The string which will be sent.
"""
context = {
'server': self.server,
'channel': self.channel,
'name': self.nickname,
}
self.reactions[re.compile(match.format(**context))] = reaction
def add_ping(self, reaction):
"""Add a reaction to a ping"""
self.pings.append(reaction)
def get_reaction(self, user, channel, message):
"""Get a reaction to a message.
Args:
user: The user who sent the message.
channel: The channel on which the bot speak.
message: The message to which the bot has to react.
Returns:
Every matched reactions.
"""
username = user.split('!')[0]
context = {
'server': self.server,
'channel': channel,
'name': self.nickname,
'user': username,
'message': message
}
result = []
for m in self.reactions.keys():
if m.search(message):
result.append(self.reactions[m].format(**context))
if not result and self.ping_match.search(message):
sentence = random.choice(self.pings).format(**context)
result.append(' : '.join([username, sentence]))
return result

55
klafirc/irc.py

@ -0,0 +1,55 @@
from twisted.words.protocols import irc
from twisted.internet import reactor, protocol
from .bot import Bot
from .settings import logger
class IRCBot(irc.IRCClient):
"""An IRC bot"""
def connectionMade(self):
super(IRCBot, self).connectionMade()
logger.info('{name} is connected'.format(name=self.nickname))
self.join(self.factory.channel)
def connectionLost(self, reason):
super(IRCBot, self).connectionLost(reason)
logger.info('{name} is disconnected : {reason}'.format(
name=self.nickname,
reason = reason
))
def signedOn(self):
self.join(self.factory.channel)
def joined(self, channel):
logger.info(self.nickname + ' joined ' + self.factory.channel)
def privmsg(self, user, channel, msg):
results = self.factory.bot.get_reaction(user, channel, msg)
logger.debug(self.nickname + ' heard ' + msg)
if results:
logger.info(self.nickname + ' reacting to ' + msg)
for r in results:
self.say(self.factory.channel, r)
class IRCBotFactory(protocol.ClientFactory):
def __init__(self, bot):
self.bot = bot
self.channel = bot.channel
def clientConnectionLost(self, connector, reason):
connector.connect()
logger.info("Client connexion lost")
def clientConnectionFailed(self, connector, reason):
logger.info("Connection failed : " + reason)
reactor.stop()
def buildProtocol(self, addr):
p = IRCBot()
p.factory = self
p.nickname = self.bot.nickname
return p

289
klafirc/klafirc.log

@ -0,0 +1,289 @@
2018-08-02 12:38:12,880 :: INFO :: Klafirc is running !
2018-08-02 12:38:12,880 :: INFO :: Loading configuration from bots.yaml
2018-08-02 12:38:12,969 :: INFO :: sel is connected
2018-08-02 12:38:12,970 :: INFO :: Macron is connected
2018-08-02 12:38:12,974 :: INFO :: Patou is connected
2018-08-02 12:38:14,691 :: INFO :: sel_ joined #test
2018-08-02 12:38:14,710 :: INFO :: Macron_ joined #test
2018-08-02 12:38:14,726 :: INFO :: Patou joined #test
2018-08-02 12:38:14,773 :: DEBUG :: Macron_ heard Hello
2018-08-02 12:38:14,777 :: DEBUG :: sel_ heard Hello
2018-08-02 12:38:14,790 :: DEBUG :: Patou heard Hello
2018-08-02 12:38:14,791 :: DEBUG :: Patou heard Hello
2018-08-02 12:38:14,878 :: DEBUG :: Macron_ heard Hello
2018-08-02 12:38:14,882 :: DEBUG :: sel_ heard Hello
2018-08-02 12:39:13,839 :: DEBUG :: Patou heard sel : est un tocard
2018-08-02 12:39:13,840 :: DEBUG :: sel_ heard sel : est un tocard
2018-08-02 12:39:13,841 :: INFO :: sel_ reacting to sel : est un tocard
2018-08-02 12:39:13,841 :: DEBUG :: Macron_ heard sel : est un tocard
2018-08-02 12:39:13,912 :: DEBUG :: Macron_ heard klafyvel : À Metz vous êtes vraiment des experts.
2018-08-02 12:39:13,913 :: DEBUG :: Patou heard klafyvel : À Metz vous êtes vraiment des experts.
2018-08-02 12:39:37,662 :: DEBUG :: sel_ heard tocard
2018-08-02 12:39:37,663 :: DEBUG :: Patou heard tocard
2018-08-02 12:39:37,664 :: DEBUG :: Macron_ heard tocard
2018-08-02 12:39:37,664 :: INFO :: Macron_ reacting to tocard
2018-08-02 12:39:37,746 :: DEBUG :: Patou heard Est-ce que je peux dire autocar ?
2018-08-02 12:39:37,766 :: DEBUG :: sel_ heard Est-ce que je peux dire autocar ?
2018-08-02 12:43:05,801 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:43:05,802 :: INFO :: Client connexion lost
2018-08-02 12:43:05,803 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:43:05,803 :: INFO :: Client connexion lost
2018-08-02 12:43:05,804 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:43:05,804 :: INFO :: Client connexion lost
2018-08-02 12:43:06,716 :: INFO :: Klafirc is running !
2018-08-02 12:43:06,716 :: INFO :: Loading configuration from bots.yaml
2018-08-02 12:43:06,804 :: INFO :: sel is connected
2018-08-02 12:43:06,805 :: INFO :: Patou is connected
2018-08-02 12:43:06,810 :: INFO :: Macron is connected
2018-08-02 12:43:07,195 :: INFO :: sel_ joined #test
2018-08-02 12:43:07,211 :: INFO :: Patou joined #test
2018-08-02 12:43:08,286 :: INFO :: Macron_ joined #test
2018-08-02 12:43:27,472 :: DEBUG :: Patou heard sel est un tocard
2018-08-02 12:43:27,473 :: DEBUG :: sel_ heard sel est un tocard
2018-08-02 12:43:27,474 :: INFO :: sel_ reacting to sel est un tocard
2018-08-02 12:43:27,475 :: DEBUG :: Macron_ heard sel est un tocard
2018-08-02 12:43:27,476 :: INFO :: Macron_ reacting to sel est un tocard
2018-08-02 12:43:27,549 :: DEBUG :: Patou heard klafyvel : Arcas:`à viarezo ils font des caleçons.` Chibrac:`bah non au rezo, à viarezo ils ont pas de boules à couvrir`
2018-08-02 12:43:27,550 :: DEBUG :: Macron_ heard klafyvel : Arcas:`à viarezo ils font des caleçons.` Chibrac:`bah non au rezo, à viarezo ils ont pas de boules à couvrir`
2018-08-02 12:43:27,553 :: DEBUG :: sel_ heard Est-ce que je peux dire autocar ?
2018-08-02 12:43:27,616 :: DEBUG :: Patou heard Est-ce que je peux dire autocar ?
2018-08-02 12:43:51,988 :: DEBUG :: sel_ heard bon maintenant que ça march
2018-08-02 12:43:51,988 :: DEBUG :: Patou heard bon maintenant que ça march
2018-08-02 12:43:51,990 :: DEBUG :: Macron_ heard bon maintenant que ça march
2018-08-02 12:44:00,396 :: DEBUG :: Patou heard voyons si on peut détruire le monde
2018-08-02 12:44:00,397 :: DEBUG :: sel_ heard voyons si on peut détruire le monde
2018-08-02 12:44:00,398 :: DEBUG :: Macron_ heard voyons si on peut détruire le monde
2018-08-02 12:45:22,325 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:45:22,325 :: INFO :: Client connexion lost
2018-08-02 12:45:22,325 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:45:22,326 :: INFO :: Client connexion lost
2018-08-02 12:45:22,326 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 12:45:22,327 :: INFO :: Client connexion lost
2018-08-02 12:45:23,250 :: INFO :: Klafirc is running !
2018-08-02 12:45:23,251 :: INFO :: Loading configuration from bots.yaml
2018-08-02 12:45:23,341 :: INFO :: Patou is connected
2018-08-02 12:45:23,342 :: INFO :: sel is connected
2018-08-02 12:45:23,345 :: INFO :: Macron is connected
2018-08-02 12:45:24,779 :: INFO :: Patou joined #test
2018-08-02 12:45:24,799 :: INFO :: sel_ joined #test
2018-08-02 12:45:24,817 :: INFO :: Macron_ joined #test
2018-08-02 12:45:39,875 :: DEBUG :: Patou heard voyons si on peut détruire le monde
2018-08-02 12:45:39,876 :: DEBUG :: sel_ heard voyons si on peut détruire le monde
2018-08-02 12:45:39,876 :: INFO :: sel_ reacting to voyons si on peut détruire le monde
2018-08-02 12:45:39,877 :: DEBUG :: Macron_ heard voyons si on peut détruire le monde
2018-08-02 12:45:39,948 :: DEBUG :: Patou heard Manu on fait des collages ?
2018-08-02 12:45:39,948 :: DEBUG :: Macron_ heard Manu on fait des collages ?
2018-08-02 12:45:39,949 :: INFO :: Macron_ reacting to Manu on fait des collages ?
2018-08-02 12:45:40,020 :: DEBUG :: Patou heard Tu m’appelles monsieur le président de la République, ou monsieur.
2018-08-02 12:45:40,021 :: DEBUG :: sel_ heard Tu m’appelles monsieur le président de la République, ou monsieur.
2018-08-02 12:46:12,091 :: DEBUG :: Patou heard parfait, maintenant un peu de sucre pour les réponses
2018-08-02 12:46:12,092 :: DEBUG :: Macron_ heard parfait, maintenant un peu de sucre pour les réponses
2018-08-02 12:46:12,093 :: DEBUG :: sel_ heard parfait, maintenant un peu de sucre pour les réponses
2018-08-02 13:34:28,694 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:34:28,694 :: INFO :: Client connexion lost
2018-08-02 13:34:28,695 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:34:28,696 :: INFO :: Client connexion lost
2018-08-02 13:34:28,697 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:34:28,697 :: INFO :: Client connexion lost
2018-08-02 13:34:29,882 :: INFO :: Klafirc is running !
2018-08-02 13:34:29,882 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:34:30,150 :: INFO :: sel is connected
2018-08-02 13:34:30,152 :: INFO :: Macron is connected
2018-08-02 13:34:30,156 :: INFO :: Patou is connected
2018-08-02 13:34:30,999 :: INFO :: sel_ joined #test
2018-08-02 13:34:32,071 :: INFO :: Macron_ joined #test
2018-08-02 13:34:32,088 :: INFO :: Patou joined #test
2018-08-02 13:34:56,009 :: DEBUG :: Patou heard sel 🤔
2018-08-02 13:34:56,011 :: DEBUG :: sel_ heard sel 🤔
2018-08-02 13:34:56,011 :: INFO :: sel_ reacting to sel 🤔
2018-08-02 13:34:56,012 :: DEBUG :: Macron_ heard sel 🤔
2018-08-02 13:34:56,085 :: DEBUG :: Macron_ heard klafyvel : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:34:56,086 :: DEBUG :: Patou heard klafyvel : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:41:46,583 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:41:46,584 :: INFO :: Client connexion lost
2018-08-02 13:41:46,585 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:41:46,585 :: INFO :: Client connexion lost
2018-08-02 13:41:46,586 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:41:46,587 :: INFO :: Client connexion lost
2018-08-02 13:41:47,743 :: INFO :: Klafirc is running !
2018-08-02 13:41:47,743 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:42:55,998 :: INFO :: Klafirc is running !
2018-08-02 13:42:55,998 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:43:29,672 :: INFO :: Klafirc is running !
2018-08-02 13:43:29,672 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:43:41,504 :: INFO :: Klafirc is running !
2018-08-02 13:43:41,504 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:43:54,043 :: INFO :: Klafirc is running !
2018-08-02 13:43:54,044 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:46:29,128 :: INFO :: Klafirc is running !
2018-08-02 13:46:29,128 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:46:39,634 :: INFO :: Klafirc is running !
2018-08-02 13:46:39,634 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:46:39,722 :: INFO :: Macron is connected
2018-08-02 13:46:39,726 :: INFO :: Patou is connected
2018-08-02 13:46:39,731 :: INFO :: sel is connected
2018-08-02 13:46:41,131 :: INFO :: Macron_ joined Macron
2018-08-02 13:46:41,147 :: INFO :: Patou joined Patou
2018-08-02 13:46:41,168 :: INFO :: sel_ joined sel
2018-08-02 13:47:20,301 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:47:20,302 :: INFO :: Client connexion lost
2018-08-02 13:47:20,302 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:47:20,303 :: INFO :: Client connexion lost
2018-08-02 13:47:20,303 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:47:20,304 :: INFO :: Client connexion lost
2018-08-02 13:47:21,126 :: INFO :: Klafirc is running !
2018-08-02 13:47:21,126 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:47:21,216 :: INFO :: sel is connected
2018-08-02 13:47:21,217 :: INFO :: Patou is connected
2018-08-02 13:47:21,221 :: INFO :: Macron is connected
2018-08-02 13:47:22,623 :: INFO :: Macron_ joined #test
2018-08-02 13:47:22,627 :: INFO :: sel_ joined #test
2018-08-02 13:47:22,644 :: INFO :: Patou joined #test
2018-08-02 13:49:16,664 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:16,665 :: INFO :: Client connexion lost
2018-08-02 13:49:16,666 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:16,666 :: INFO :: Client connexion lost
2018-08-02 13:49:16,667 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:16,668 :: INFO :: Client connexion lost
2018-08-02 13:49:17,342 :: INFO :: Klafirc is running !
2018-08-02 13:49:17,342 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:49:17,434 :: INFO :: sel is connected
2018-08-02 13:49:17,436 :: INFO :: Patou is connected
2018-08-02 13:49:17,444 :: INFO :: Macron is connected
2018-08-02 13:49:18,843 :: INFO :: sel_ joined #test
2018-08-02 13:49:18,860 :: INFO :: Patou joined #test
2018-08-02 13:49:18,880 :: INFO :: Macron_ joined #test
2018-08-02 13:49:40,409 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:40,410 :: INFO :: Client connexion lost
2018-08-02 13:49:40,410 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:40,411 :: INFO :: Client connexion lost
2018-08-02 13:49:40,411 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:49:40,412 :: INFO :: Client connexion lost
2018-08-02 13:49:41,196 :: INFO :: Klafirc is running !
2018-08-02 13:49:41,196 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:49:41,288 :: INFO :: Patou is connected
2018-08-02 13:49:41,290 :: INFO :: Macron is connected
2018-08-02 13:49:41,293 :: INFO :: sel is connected
2018-08-02 13:49:41,696 :: INFO :: Patou joined #test
2018-08-02 13:49:41,712 :: INFO :: Macron_ joined #test
2018-08-02 13:49:42,979 :: INFO :: sel_ joined #test
2018-08-02 13:49:48,547 :: DEBUG :: Macron_ heard sel, pourquoi es-tu là ?
2018-08-02 13:49:48,548 :: DEBUG :: Patou heard sel, pourquoi es-tu là ?
2018-08-02 13:49:48,552 :: DEBUG :: sel_ heard sel, pourquoi es-tu là ?
2018-08-02 13:49:48,552 :: INFO :: sel_ reacting to sel, pourquoi es-tu là ?
2018-08-02 13:49:48,630 :: DEBUG :: Patou heard 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.
2018-08-02 13:49:48,630 :: DEBUG :: Patou heard klafyvel : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:49:48,631 :: DEBUG :: Macron_ heard 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.
2018-08-02 13:49:48,632 :: DEBUG :: Macron_ heard klafyvel : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:51:07,441 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:51:07,442 :: INFO :: Client connexion lost
2018-08-02 13:51:07,442 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:51:07,443 :: INFO :: Client connexion lost
2018-08-02 13:51:07,444 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:51:07,445 :: INFO :: Client connexion lost
2018-08-02 13:51:08,366 :: INFO :: Klafirc is running !
2018-08-02 13:51:08,366 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:51:08,456 :: INFO :: sel is connected
2018-08-02 13:51:08,457 :: INFO :: Patou is connected
2018-08-02 13:51:08,463 :: INFO :: Macron is connected
2018-08-02 13:51:09,844 :: INFO :: Patou joined #test
2018-08-02 13:51:09,863 :: INFO :: sel_ joined #test
2018-08-02 13:51:09,901 :: INFO :: Macron_ joined #test
2018-08-02 13:51:18,927 :: DEBUG :: Patou heard sel, pourquoi es-tu là ?
2018-08-02 13:51:18,929 :: DEBUG :: sel_ heard sel, pourquoi es-tu là ?
2018-08-02 13:51:18,929 :: INFO :: sel_ reacting to sel, pourquoi es-tu là ?
2018-08-02 13:51:18,930 :: DEBUG :: Macron_ heard sel, pourquoi es-tu là ?
2018-08-02 13:51:19,022 :: DEBUG :: Patou heard 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 #test. Depuis je hante le chan.
2018-08-02 13:51:19,022 :: DEBUG :: Macron_ heard 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 #test. Depuis je hante le chan.
2018-08-02 13:51:45,392 :: DEBUG :: sel_ heard Sel, quel est votre métier ?
2018-08-02 13:51:45,393 :: DEBUG :: Macron_ heard Sel, quel est votre métier ?
2018-08-02 13:51:45,394 :: DEBUG :: Patou heard Sel, quel est votre métier ?
2018-08-02 13:52:05,863 :: DEBUG :: sel_ heard ah oui la casse
2018-08-02 13:52:05,865 :: DEBUG :: Macron_ heard ah oui la casse
2018-08-02 13:52:05,865 :: DEBUG :: Patou heard ah oui la casse
2018-08-02 13:52:07,112 :: DEBUG :: sel_ heard sel devient insensible à la casse
2018-08-02 13:52:07,113 :: INFO :: sel_ reacting to sel devient insensible à la casse
2018-08-02 13:52:07,113 :: DEBUG :: Patou heard sel devient insensible à la casse
2018-08-02 13:52:07,114 :: DEBUG :: Macron_ heard sel devient insensible à la casse
2018-08-02 13:52:07,187 :: DEBUG :: Patou heard Guimoz : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:52:07,188 :: DEBUG :: Macron_ heard Guimoz : J'ai vraiment hâte de rencontrer les N1As de l'année prochaine.
2018-08-02 13:52:24,071 :: DEBUG :: sel_ heard sel, tu penses quoi de Manu ?
2018-08-02 13:52:24,072 :: INFO :: sel_ reacting to sel, tu penses quoi de Manu ?
2018-08-02 13:52:24,074 :: DEBUG :: Patou heard sel, tu penses quoi de Manu ?
2018-08-02 13:52:24,075 :: DEBUG :: Macron_ heard sel, tu penses quoi de Manu ?
2018-08-02 13:52:24,144 :: DEBUG :: Patou heard klafyvel : <Chibrac> je glande presque autant qu'un pelec
2018-08-02 13:52:24,145 :: DEBUG :: Macron_ heard klafyvel : <Chibrac> je glande presque autant qu'un pelec
2018-08-02 13:52:33,881 :: DEBUG :: sel_ heard ouais moyennement pertinent
2018-08-02 13:52:33,882 :: DEBUG :: Macron_ heard ouais moyennement pertinent
2018-08-02 13:52:33,883 :: DEBUG :: Patou heard ouais moyennement pertinent
2018-08-02 13:53:57,589 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:53:57,590 :: INFO :: Client connexion lost
2018-08-02 13:53:57,591 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:53:57,592 :: INFO :: Client connexion lost
2018-08-02 13:53:57,592 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:53:57,593 :: INFO :: Client connexion lost
2018-08-02 13:53:58,453 :: INFO :: Klafirc is running !
2018-08-02 13:53:58,453 :: INFO :: Loading configuration from bots.yaml
2018-08-02 13:53:58,546 :: INFO :: Patou is connected
2018-08-02 13:53:58,547 :: INFO :: Macron is connected
2018-08-02 13:53:58,555 :: INFO :: sel is connected
2018-08-02 13:53:59,964 :: INFO :: Patou joined #test
2018-08-02 13:53:59,985 :: INFO :: Macron_ joined #test
2018-08-02 13:53:59,999 :: INFO :: sel_ joined #test
2018-08-02 13:54:51,169 :: DEBUG :: Patou heard sel on va détruire le monde ?
2018-08-02 13:54:51,170 :: DEBUG :: Macron_ heard sel on va détruire le monde ?
2018-08-02 13:54:51,171 :: DEBUG :: sel_ heard sel on va détruire le monde ?
2018-08-02 13:54:51,172 :: INFO :: sel_ reacting to sel on va détruire le monde ?
2018-08-02 13:54:51,248 :: DEBUG :: Patou heard Manu on fait des collages ?
2018-08-02 13:54:51,248 :: DEBUG :: Macron_ heard Manu on fait des collages ?
2018-08-02 13:54:51,249 :: INFO :: Macron_ reacting to Manu on fait des collages ?
2018-08-02 13:54:51,319 :: DEBUG :: Patou heard Tu m’appelles monsieur le président de la République, ou monsieur.
2018-08-02 13:54:51,320 :: DEBUG :: sel_ heard Tu m’appelles monsieur le président de la République, ou monsieur.
2018-08-02 13:55:12,882 :: DEBUG :: Macron_ heard Macron : ça part
2018-08-02 13:55:12,883 :: INFO :: Macron_ reacting to Macron : ça part
2018-08-02 13:55:12,884 :: DEBUG :: Patou heard Macron : ça part
2018-08-02 13:55:12,885 :: DEBUG :: sel_ heard Macron : ça part
2018-08-02 13:55:12,957 :: DEBUG :: Patou heard klafyvel : PARCE QUE C'EST NOTRE PROJEEEET !
2018-08-02 13:55:12,958 :: DEBUG :: sel_ heard klafyvel : PARCE QUE C'EST NOTRE PROJEEEET !
2018-08-02 13:56:18,732 :: DEBUG :: sel_ heard paaarfait
2018-08-02 13:56:18,734 :: DEBUG :: Patou heard paaarfait
2018-08-02 13:56:18,735 :: DEBUG :: Macron_ heard paaarfait
2018-08-02 13:56:35,543 :: DEBUG :: Patou heard maintenant un petit setup d'installation, un service et c'est fini
2018-08-02 13:56:35,545 :: DEBUG :: Macron_ heard maintenant un petit setup d'installation, un service et c'est fini
2018-08-02 13:56:35,546 :: DEBUG :: sel_ heard maintenant un petit setup d'installation, un service et c'est fini
2018-08-02 13:56:37,145 :: INFO :: Patou is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:56:37,146 :: INFO :: Client connexion lost
2018-08-02 13:56:37,146 :: INFO :: sel_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:56:37,147 :: INFO :: Client connexion lost
2018-08-02 13:56:37,147 :: INFO :: Macron_ is disconnected : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
]
2018-08-02 13:56:37,148 :: INFO :: Client connexion lost

38
klafirc/loader.py

@ -0,0 +1,38 @@
import yaml
from .bot import Bot
from .settings import logger
class Loader:
def __init__(self, filename):
logger.info('Loading configuration from ' + filename)
with open(filename) as f:
self.dict = yaml.load(f)
self.bots = []
def load_bot_template(self, name, channel, serv, port):
template = self.dict['bots'][name]
b = Bot(nickname=name)
b.server = serv
b.channel = channel
b.port = port
for ping in template.get('on_ping', []):
b.add_ping(ping)
matches = template.get('on_match', [])
for match in matches:
b.add_reaction(match, matches[match])
return b
def load_bots(self):
for channel in self.dict['channels']:
name = channel['channel']
serv = channel['server']
port = channel.get('port', 6667)
bots_name = channel['bots']
for nickname in bots_name:
b = self.load_bot_template(nickname, name, serv, port)
self.bots.append(b)

21
klafirc/runner.py

@ -0,0 +1,21 @@
from twisted.internet import reactor
from .loader import Loader
from .irc import IRCBotFactory
from .settings import logger, BOT_FILE
class Runner:
def __init__(self):
self.loader = Loader(BOT_FILE)
def run(self):
self.loader.load_bots()
for bot in self.loader.bots:
bot_factory = IRCBotFactory(bot)
reactor.connectTCP(bot.server, bot.port, bot_factory)
reactor.run()
def run():
logger.info('Klafirc is running !')
runner = Runner()
runner.run()

24
klafirc/settings.py

@ -0,0 +1,24 @@
import logging
from logging.handlers import RotatingFileHandler
DEBUG = True
BOT_FILE = '/home/klafyvel/dev/klafirc/bots.yaml'
LOG_FILE = '/var/log/klafirc/klafirc.log'
logger = logging.getLogger()
if DEBUG:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
file_handler = RotatingFileHandler(LOG_FILE, 'a', 1000000, 1)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

11
requirements.txt

@ -0,0 +1,11 @@
attrs==18.1.0
Automat==0.7.0
constantly==15.1.0
hyperlink==18.0.0
idna==2.7
incremental==17.5.0
PyHamcrest==1.9.0
PyYAML==3.13
six==1.11.0
Twisted==18.7.0
zope.interface==4.5.0
Loading…
Cancel
Save