Author: cwittich
Date: Mon Oct 9 01:41:07 2006
New Revision: 24459
URL:
http://svn.reactos.org/svn/reactos?rev=24459&view=rev
Log:
arty's IRC bot changes
Modified:
trunk/tools/buildbot/buildbot/buildbot/status/words.py
Modified: trunk/tools/buildbot/buildbot/buildbot/status/words.py
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/buildbot/buildbot/buildbot/s…
==============================================================================
--- trunk/tools/buildbot/buildbot/buildbot/status/words.py (original)
+++ trunk/tools/buildbot/buildbot/buildbot/status/words.py Mon Oct 9 01:41:07 2006
@@ -2,7 +2,7 @@
# code to deliver build status through twisted.words (instant messaging
# protocols: irc, etc)
-
+import time
import traceback, StringIO, re, shlex
from twisted.internet import protocol, reactor
@@ -82,20 +82,44 @@
bot retrieves all status information
"""
self.nickname = nickname
+ self.wantnick = nickname
self.channels = channels
self.password = password
self.status = status
self.categories = categories
self.counter = 0
self.hasQuit = 0
+ self.pingSelf = 1
+ self.hasReconnected = 0
+ self.timeout = 60
def signedOn(self):
if self.password:
+ if self.nickname != self.wantnick:
+ self.msg("Nickserv", "GHOST " + self.wantnick + " " +
self.password)
+ self.setNick(self.wantnick)
self.msg("Nickserv", "IDENTIFY " + self.password)
for c in self.channels:
self.join(c)
+ reactor.callLater(self.timeout, self.checkPing)
+ self.lastping = time.time()
+ def checkPing(self):
+ if time.time() - self.lastping > (self.timeout * 2):
+ self.pingSelf = 1
+ log.msg("Dropping due to pingout")
+ self.shutdown()
+ if self.pingSelf:
+ self.ping(self.nickname)
+ self.monitor = reactor.callLater(self.timeout, self.checkPing)
+ def end(self):
+ self.pingSelf = 0
+ def shutdown(self):
+ self.sendLine("QUIT")
+ self.end()
def joined(self, channel):
log.msg("I have joined", channel)
+ if self.hasReconnected:
+ self.msg(channel, "Hello again")
def left(self, channel):
log.msg("I have left", channel)
def kickedFrom(self, channel, kicker, message):
@@ -203,6 +227,19 @@
for r in response:
reactor.callLater(when, self.reply, reply, r)
when += 2.5
+ def command_PING(self, user, reply, person):
+ self.reply(reply, "ping to " + person)
+ self.ping(person)
+ def pong(self, user, secs):
+ self.lastping = time.time()
+ log.msg("Pong from " + user + " took " + str(secs))
+# def command_JOIN(self, user, reply, chan):
+# self.reply(reply, "joining " + chan)
+# self.join(chan)
+
+# def command_PART(self, user, reply, chan):
+# self.reply(reply, "parting " + chan)
+# self.part(chan)
def command_HELLO(self, user, reply, args):
self.reply(reply, "yes?")
@@ -227,6 +264,9 @@
self.reply(reply, str)
return
command_LIST.usage = "list builders - List configured builders"
+
+ def command_DEAD(self, user, reply, args):
+ self.pingSelf = 0
def command_STATUS(self, user, reply, args):
args = args.split()
@@ -464,6 +504,14 @@
def command_EXCITED(self, user, reply, args):
# like 'buildbot: destroy the sun!'
self.reply(reply, "What you say!")
+
+# def command_DISCON(self, user, reply, args):
+# log.msg("Disconnecting on request: " + str(args))
+# self.shutdown()
+
+ def connectionLost(self, reason = "foo"):
+ log.msg("Connection lost: " + str(reason))
+ self.shutdown()
def action(self, user, channel, data):
#log.msg("action: %s,%s,%s" % (user, channel, data))
@@ -511,6 +559,7 @@
self.password = password
self.channels = channels
self.categories = categories
+ self.hasReconnected = False
def __getstate__(self):
d = self.__dict__.copy()
@@ -519,8 +568,12 @@
def shutdown(self):
self.shuttingDown = True
+ self.hasReconnected = True
if self.p:
self.p.quit("buildmaster reconfigured: bot disconnecting")
+ self.p.end()
+ self.factory.shutdown()
+ del self.factory
def buildProtocol(self, address):
p = self.protocol(self.nickname, self.password,
@@ -529,6 +582,7 @@
p.factory = self
p.status = self.status
p.control = self.control
+ p.hasReconnected = self.hasReconnected
self.p = p
return p