I think this would work to terminate immediaate mode...
[irker.git] / irkerd
diff --git a/irkerd b/irkerd
index 54b585eea15a7c16dd304f3cf923a8f1ca12a5ad..40cef48e50c348db90c648209f21bae61ec0166f 100755 (executable)
--- a/irkerd
+++ b/irkerd
@@ -136,7 +136,6 @@ class IRCClient():
                     (insocks, _o, _e) = select.select(sockets, [], [], timeout)
                     for s in insocks:
                         connmap[s.fileno()].consume()
-
                 else:
                     time.sleep(timeout)
 
@@ -684,11 +683,13 @@ class Irker:
         self.irc.add_event_handler("disconnect", self._handle_disconnect)
         self.irc.add_event_handler("kick", self._handle_kick)
         self.irc.add_event_handler("every_raw_message", self._handle_every_raw_message)
+        self.servers = {}
+        self.until = None
+    def thread_launch(self):
         thread = threading.Thread(target=self.irc.spin)
         thread.setDaemon(True)
         self.irc._thread = thread
         thread.start()
-        self.servers = {}
     def logerr(self, errmsg):
         "Log a processing error."
         sys.stderr.write("irkerd: " + errmsg + "\n")
@@ -749,6 +750,9 @@ class Irker:
             with open(logfile, "a") as logfp:
                 logfp.write("%03f|%s|%s\n" % \
                              (time.time(), event.source, event.arguments[0]))
+        if self.until is not None:
+            if self.until == event.arguments[0]:
+                raise SystemExit, 1
     def pending(self):
         "Do we have any pending message traffic?"
         return [k for (k, v) in self.servers.items() if v.pending()]
@@ -870,8 +874,10 @@ if __name__ == '__main__':
     if immediate:
         (to, privmsg) = val.split(",")
         irker.handle('{"to":"%s","privmsg":"%s"}' % (to, privmsg))
+        irker.until = privmsg
         irker.irc.spin()
     else:
+        irker.thread_launch()
         try:
             tcpserver = SocketServer.TCPServer((HOST, PORT), IrkerTCPHandler)
             udpserver = SocketServer.UDPServer((HOST, PORT), IrkerUDPHandler)