summaryrefslogtreecommitdiff
path: root/irc_iface.py
blob: c70866c86faadbf9a72c94ba3b1fb89cdf5aee63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from __future__ import unicode_literals
import irc.client
import logging

logger = logging.getLogger('rschat.' + __name__)

class IRCInterface(irc.client.SimpleIRCClient):
  def __init__(self, server, port, nick, channel):
    logger.debug("Initializing IRCInterface")
    super(self.__class__, self).__init__()
    self.server = server
    self.port = port
    self.nick = nick
    self.channel = channel
    self.queue = []

  def __enter__(self):
    logger.info("Connecting to %s:%s as %s" % (self.server, self.port, self.nick))
    self.connect(self.server, self.port, self.nick)
    return self

  def on_welcome(self, connection, _):
    logger.info("Connected, joining %s" % self.channel)
    connection.join(self.channel)

  def send(self, line):
    self.connection.privmsg(self.channel, line)

  def on_pubmsg(self, _, event):
    source = event.source
    self.queue.append((source[:source.index('!')], event.arguments[0]))

  def poll(self):
    self.ircobj.process_once()
    queue = self.queue
    self.queue = []
    return queue

  def send_raw(self, *args, **kwargs):
    return self.connection.send_raw(*args, **kwargs)

  def __exit__(self, *_):
    self.connection.quit()