2014-05-14 22:57:30 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2014-05-14 19:38:19 +02:00
|
|
|
from twisted.internet import protocol
|
|
|
|
from twisted.python import log
|
|
|
|
from twisted.words.protocols import irc
|
|
|
|
|
|
|
|
|
|
|
|
class MonitorBot(irc.IRCClient):
|
|
|
|
def connectionMade(self):
|
|
|
|
"""Called when a connection is made."""
|
|
|
|
self.nickname = self.factory.nickname
|
|
|
|
self.realname = self.factory.realname
|
|
|
|
irc.IRCClient.connectionMade(self)
|
|
|
|
log.msg("connectionMade")
|
|
|
|
|
|
|
|
def connectionLost(self, reason):
|
|
|
|
"""Called when a connection is lost."""
|
|
|
|
irc.IRCClient.connectionLost(self, reason)
|
|
|
|
log.msg("connectionLost {!r}".format(reason))
|
|
|
|
|
|
|
|
# callbacks for events
|
|
|
|
|
|
|
|
def signedOn(self):
|
|
|
|
"""Called when bot has successfully signed on to server."""
|
|
|
|
log.msg("Signed on")
|
|
|
|
if self.nickname != self.factory.nickname:
|
|
|
|
log.msg('Your nickname was already occupied, actual nickname is "{}".'.format(self.nickname))
|
|
|
|
self.join(self.factory.channel)
|
|
|
|
|
|
|
|
def joined(self, channel):
|
|
|
|
"""Called when the bot joins the channel."""
|
|
|
|
log.msg("[{nick} has joined {channel}]".format(nick=self.nickname, channel=self.factory.channel,))
|
|
|
|
|
|
|
|
def privmsg(self, user, channel, msg):
|
|
|
|
"""Called when the bot receives a message."""
|
|
|
|
sendTo = None
|
|
|
|
prefix = ''
|
|
|
|
senderNick = user.split('!', 1)[0]
|
|
|
|
if channel == self.nickname:
|
|
|
|
# Reply back in the query / privmsg
|
|
|
|
sendTo = senderNick
|
|
|
|
elif msg.startswith(self.nickname):
|
|
|
|
# Reply back on the channel
|
|
|
|
sendTo = channel
|
|
|
|
prefix = senderNick + ': ' #Mark message so people know what is going on
|
|
|
|
else:
|
|
|
|
msg = msg.lower()
|
|
|
|
if msg in ['!hi']:
|
|
|
|
sendTo = channel
|
|
|
|
prefix = senderNick + ': '
|
|
|
|
if sendTo:
|
|
|
|
reply = "Hello."
|
|
|
|
self.msg(sendTo, prefix + reply)
|
|
|
|
log.msg(
|
|
|
|
"sent message to {receiver}, triggered by {sender}:\n\t{reply}"
|
|
|
|
.format(receiver=sendTo, sender=senderNick, reply=reply)
|
|
|
|
)
|
|
|
|
|
|
|
|
class MonitorBotFactory(protocol.ClientFactory):
|
|
|
|
protocol = MonitorBot
|
|
|
|
|
|
|
|
def __init__(self, channel, nickname, realname):
|
|
|
|
"""Initialize the bot factory with our settings."""
|
|
|
|
self.channel = channel
|
|
|
|
self.nickname = nickname
|
|
|
|
self.realname = realname
|