From e9b4130fb4e5f5f1c1aed2f52ce97453dadbc2df Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 8 Jan 2014 14:05:40 -0500 Subject: Initial commit --- rschat.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 rschat.py (limited to 'rschat.py') 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) -- cgit v1.2.3-54-g00ecf