summaryrefslogtreecommitdiff
path: root/rschat.py
diff options
context:
space:
mode:
authorAlex Xu <alex_y_xu@yahoo.ca>2014-01-08 14:05:40 -0500
committerAlex Xu <alex_y_xu@yahoo.ca>2014-01-08 14:05:40 -0500
commite9b4130fb4e5f5f1c1aed2f52ce97453dadbc2df (patch)
tree6fb7aa7e5d4517d97290f415cf92b83da63af654 /rschat.py
downloadrschat-master.tar.xz
rschat-master.zip
Initial commitHEADmaster
Diffstat (limited to 'rschat.py')
-rwxr-xr-xrschat.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/rschat.py b/rschat.py
new file mode 100755
index 0000000..b63fc48
--- /dev/null
+++ b/rschat.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+from __future__ import unicode_literals, with_statement
+
+VERSION=(0, 1, 0)
+
+from chat_iface import ChatInterface
+from irc_iface import IRCInterface
+try:
+ from configparser import SafeConfigParser
+except ImportError:
+ from ConfigParser import SafeConfigParser
+import logging
+import os
+import select
+import sys
+import time
+
+logger = logging.getLogger('rschat')
+logger.setLevel(logging.DEBUG)
+ch = logging.StreamHandler()
+ch.setLevel(logging.DEBUG)
+formatter = logging.Formatter('<%(levelno)s>[%(asctime)s] %(name)s:%(funcName)s: %(message)s')
+ch.setFormatter(formatter)
+logger.addHandler(ch)
+
+logger.debug("Starting rschat version %d.%d.%d" % VERSION)
+
+try:
+ xdg_config_home = os.environ['XDG_CONFIG_HOME']
+except KeyError:
+ xdg_config_home = os.path.expanduser('~/.config')
+
+try:
+ xdg_config_dirs = os.environ['XDG_CONFIG_DIRS'].split(':')
+except KeyError:
+ xdg_config_dirs = ['/etc/xdg']
+
+cfg = SafeConfigParser({
+ 'server': 'chat.freenode.net',
+ 'port': 6667,
+ 'nick': 'RSWBot',
+ 'channel': '#rswiki-cc',
+ 'chat': 'clan',
+})
+
+cfg.read([fldr + '/rschat.ini' for fldr in [xdg_config_home] + xdg_config_dirs + ['.']])
+
+with IRCInterface(cfg.get('IRC', 'server'), cfg.get('IRC', 'port', raw=True), cfg.get('IRC', 'nick'), cfg.get('IRC', 'channel')) as irc, \
+ ChatInterface(cfg.get('Chat', 'Chat'), cfg.get('Chat', 'user'), cfg.get('Chat', 'pass')) as chat:
+
+ logger.debug('Primary initialization complete, processing IRC input')
+
+ irc.poll()
+
+ # poll for new messages
+ logger.info('Initialization seems complete, starting main loop')
+
+ def poll(recv, send):
+ msgs = recv.poll()
+ if msgs:
+ list(map(send.send, ['%s: %s' % msg for msg in msgs]))
+
+ while True:
+ time.sleep(0.1)
+
+ # raw IRC commands
+ if select.select([sys.stdin], [], [], 0)[0]:
+ irc.send_raw(sys.stdin.readline())
+
+ poll(irc, chat)
+ poll(chat, irc)