summaryrefslogtreecommitdiffstats
path: root/punani/bot/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'punani/bot/__init__.py')
-rwxr-xr-xpunani/bot/__init__.py105
1 files changed, 0 insertions, 105 deletions
diff --git a/punani/bot/__init__.py b/punani/bot/__init__.py
deleted file mode 100755
index 4944bba0..00000000
--- a/punani/bot/__init__.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/python
-from Queue import Queue
-from SocketServer import BaseRequestHandler, ThreadingTCPServer
-from threading import Thread
-from time import sleep, strftime, strptime
-
-from ircbot import SingleServerIRCBot
-from irclib import nm_to_n
-
-
-class PunaniRequestHandler(BaseRequestHandler):
- """Handler for Punani messages."""
-
- def handle(self):
- try:
- msg = self.request.recv(1024).strip()
- except ValueError:
- msg = 'Invalid message.'
- else:
- self.server.queue.put((self.client_address, msg))
- print ('%s:%d' % self.client_address), str(msg)
-
-
-class PunaniReceiveServer(ThreadingTCPServer):
- """UDP server that waits for Punani messages."""
-
- def __init__(self):
- ThreadingTCPServer.__init__(self,
- ('127.0.0.1', 5555),
- PunaniRequestHandler)
- self.queue = Queue()
-
-
-class PunaniBot(SingleServerIRCBot):
-
- def __init__(self, server_list, channel_list, nickname='punani-ircbot',
- realname='Bob Ross'):
- self.reconnection_interval = 30
- SingleServerIRCBot.__init__(self, server_list, nickname, realname)
- self.channel_list = channel_list
-
- def on_welcome(self, conn, event):
- """Join channels after connect."""
- print 'Connected to %s:%d.' % conn.socket.getsockname()
- for channel, key in self.channel_list:
- conn.join(channel, key)
-
- def on_nicknameinuse(self, conn, event):
- """Choose another nickname if conflicting."""
- self._nickname += '_'
- conn.nick(self._nickname)
-
- def on_ctcp(self, conn, event):
- """Answer CTCP PING and VERSION queries."""
- whonick = nm_to_n(event.source())
- message = event.arguments()[0].lower()
- if message == 'version':
- conn.notice(whonick, 'Punani2irc')
- elif message == 'ping':
- conn.pong(whonick)
-
- def on_privmsg(self, conn, event):
- """React on private messages.
-
- Die, for example.
- """
- whonick = nm_to_n(event.source())
- message = event.arguments()[0]
- if message == 'die!':
- print 'Shutting down as requested by %s...' % whonick
- self.die('Shutting down.')
-
- def say(self, msg):
- """Say message to channels."""
- for channel, key in self.channel_list:
- self.connection.privmsg(channel, msg)
-
-
-def process_queue(announce_callback, queue, delay=2):
- """Process received messages in queue."""
- while True:
- sleep(delay)
- try:
- addr, msg = queue.get()
- except Empty:
- continue
- #do something with the addr?
- announce_callback(str(msg))
-if __name__ == '__main__':
- # Set IRC connection parameters.
- irc_servers = [('supernode', 6667)]
- irc_channels = [('#retiolum', '')]
-
- # Prepare and start IRC bot.
- bot = PunaniBot(irc_servers, irc_channels)
- t = Thread(target=bot.start)
- t.daemon = True
- t.start()
- announce = bot.say
-
- receiver = PunaniReceiveServer()
- t = Thread(target=process_queue, args=(announce, receiver.queue))
- t.daemon = True
- t.start()
- receiver.serve_forever()