示例#1
0
class SheriffIRCBot(object):
    def __init__(self, tool, sheriff):
        self._tool = tool
        self._sheriff = sheriff
        self._message_queue = ThreadedMessageQueue()

    def irc_delegate(self):
        return _IRCThreadTearoff(self._tool.irc_password,
                                 self._message_queue,
                                 self._tool.wakeup_event)

    def process_message(self, message):
        (nick, request) = message
        tokenized_request = request.strip().split(" ")
        if not tokenized_request:
            return
        command = irc_command.commands.get(tokenized_request[0])
        args = tokenized_request[1:]
        if not command:
            # Give the peoples someone to talk with.
            command = irc_command.Eliza
            args = tokenized_request
        response = command().execute(nick, args, self._tool, self._sheriff)
        if response:
            self._tool.irc().post(response)

    def process_pending_messages(self):
        (messages, is_running) = self._message_queue.take_all()
        for message in messages:
            self.process_message(message)
示例#2
0
class SheriffIRCBot(object):
    def __init__(self, tool, sheriff):
        self._tool = tool
        self._sheriff = sheriff
        self._message_queue = ThreadedMessageQueue()

    def irc_delegate(self):
        return _IRCThreadTearoff(self._tool.irc_password, self._message_queue,
                                 self._tool.wakeup_event)

    def process_message(self, message):
        (nick, request) = message
        tokenized_request = request.strip().split(" ")
        if not tokenized_request:
            return
        command = irc_command.commands.get(tokenized_request[0])
        args = tokenized_request[1:]
        if not command:
            # Give the peoples someone to talk with.
            command = irc_command.Eliza
            args = tokenized_request
        response = command().execute(nick, args, self._tool, self._sheriff)
        if response:
            self._tool.irc().post(response)

    def process_pending_messages(self):
        (messages, is_running) = self._message_queue.take_all()
        for message in messages:
            self.process_message(message)
 def test_basic(self):
     queue = ThreadedMessageQueue()
     queue.post("Hello")
     queue.post("There")
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, ["Hello", "There"])
     self.assertTrue(is_running)
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, [])
     self.assertTrue(is_running)
     queue.post("More")
     queue.stop()
     queue.post("Messages")
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, ["More", "Messages"])
     self.assertFalse(is_running)
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, [])
     self.assertFalse(is_running)
 def test_basic(self):
     queue = ThreadedMessageQueue()
     queue.post("Hello")
     queue.post("There")
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, ["Hello", "There"])
     self.assertTrue(is_running)
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, [])
     self.assertTrue(is_running)
     queue.post("More")
     queue.stop()
     queue.post("Messages")
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, ["More", "Messages"])
     self.assertFalse(is_running)
     (messages, is_running) = queue.take_all()
     self.assertEqual(messages, [])
     self.assertFalse(is_running)
示例#5
0
class SheriffIRCBot(object):
    # FIXME: Lame.  We should have an auto-registering CommandCenter.
    commands = {
        "last-green-revision": irc_command.LastGreenRevision,
        "restart": irc_command.Restart,
        "rollout": irc_command.Rollout,
        "hi": irc_command.Hi,
    }

    def __init__(self, tool, sheriff):
        self._tool = tool
        self._sheriff = sheriff
        self._message_queue = ThreadedMessageQueue()

    def irc_delegate(self):
        return _IRCThreadTearoff(self._tool.irc_password,
                                 self._message_queue,
                                 self._tool.wakeup_event)

    def process_message(self, message):
        (nick, request) = message
        tokenized_request = request.strip().split(" ")
        if not tokenized_request:
            return
        command = self.commands.get(tokenized_request[0])
        if not command:
            self._tool.irc().post("%s: Available commands: %s" % (
                                  nick, ", ".join(self.commands.keys())))
            return
        response = command().execute(nick,
                                     tokenized_request[1:],
                                     self._tool,
                                     self._sheriff)
        if response:
            self._tool.irc().post(response)

    def process_pending_messages(self):
        (messages, is_running) = self._message_queue.take_all()
        for message in messages:
            self.process_message(message)