Python/Twisted IRC 机器人日志问题
嘿,我最近才开始用Python,我的朋友建议我用Twisted来创建这个IRC机器人,因为这样会简单很多。这里是我目前写的代码(其实是基于logbot.py改的,哈哈)
from twisted.internet import reactor, protocol
from twisted.words.protocols import irc
from twisted.python import log
import sys, time
class MessageLogger:
def __init__(self, file):
self.file = file
def log(self, message):
timestamp = time.strftime("[%H:%M:%S]", time.localtime(time.time()))
self.file.write('%s %s\n' % (timestamp, message))
self.file.flush()
def close(self):
self.file.close()
class IRCProtocol(irc.IRCClient):
nickname = "3n7rar3"
def connectionMade(self):
irc.IRCClient.connectionMade(self)
self.logger = MessageLogger(open(self.factory.filename, "a"))
def signedOn(self):
print 'Success! Connection established.'
self.join(self.factory.channels)
print 'Joined channel', self.factory.channels
def privmsg(self, user, channel, msg):
user = user.split('!', 1)[0]
self.logger.log("<%s> %s" % (user, msg))
class IRCFactory(protocol.ClientFactory):
protocol = IRCProtocol
channels = "#testing"
def __init__(self, channel, filename):
self.channel = channel
self.filename = filename
def clientConnectionFailed(self, connector, reason):
print "Connection failed because of %s" % reason
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost: %s" % reason
connector.connect()
if __name__ == "__main__":
log.startLogging(sys.stdout)
host, port = "irc.freenode.net", 6667
fact = IRCFactory(sys.argv[1],sys.argv[2])
reactor.connectTCP(host, port, fact)
reactor.run()
现在的问题是,这个机器人只记录频道消息,但我还想让它记录频道的加入和离开。有什么简单的方法可以做到这一点吗?谢谢。
2 个回答
1
我觉得这个文档写得很清楚。你只需要像处理privmsg
那样,重写userJoined
和userLeft
这两个方法就可以了。
2
定义连接和部分的方法,并在里面也记录日志:
def userJoined(self, user, channel):
log.msg('%s has joined %s' % (user, channel))
def userLeft(self, user, channel):
log.msg('%s has left %s' % (user, channel))
def userQuit(self, user, quitMessage):
log.msg('%s has quit. Reason: %s' % (user, quitMessage))