class Campy(object): def __init__(self): self.client = Campfire(settings.CAMPFIRE_SUBDOMAIN, settings.CAMPFIRE_API_KEY, ssl=True) self.rooms = [] self.since_message_id = None self.plugins = [] for plugin in settings.REGISTERED_PLUGINS: path = plugin.split('.') klass = path.pop() plugin_obj = getattr(__import__('.'.join(path), globals(), locals(), [klass], -1), klass) self.plugins.append(plugin_obj()) for room in settings.CAMPFIRE_ROOMS: print "Joining %s" % room room = self.client.find_room_by_name(room) if room: self.rooms.append(room) room.join() def listen(self): def callback(message): for plugin in self.plugins: try: speaker = self.client.user(message['user_id']) if not message['body']: return if re.match('%s: help' % settings.CAMPFIRE_BOT_NAME, message['body']): try: plugin.send_help(self.client, self.client.room(message['room_id']), message, speaker) except NotImplementedError: pass else: plugin.handle_message(self.client, self.client.room(message['room_id']), message, speaker) except HTTPNotFoundException: pass def errback(message): print message # Setup all rooms first for room in self.rooms: room.listen(callback, errback, False) # Then start listening to those rooms reactor.run() def die(self): for room in self.rooms: if settings.SAY_GOODBYE: room.speak("Goodbye!") if settings.LEAVE_ON_EXIT: room.leave()
class Bot: def __init__(self): self.client = Campfire(settings.CAMPFIRE_SUBDOMAIN, settings.CAMPFIRE_API_KEY, ssl=True) self.rooms = [] self.plugins = [] for p in settings.INSTALLED_PLUGINS: klass = get_callable(p) if klass: print 'Loading plugin: %s' % klass self.plugins.append(klass()) def join_rooms(self): self.rooms = [] for r in settings.CAMPFIRE_ROOMS: print 'Joining room: %s' % r room = self.client.find_room_by_name(r) if room: self.rooms.append(room) room.join() def listen(self): def callback(message): room = self.client.room(message['room_id']) for p in self.plugins: if isinstance(p, ListenerPlugin): p.recieve_message(self.client, room, message) def errback(message): print message for r in self.rooms: r.listen(callback, errback) def find_room_by_name(self, room_name): return self.client.find_room_by_name(room_name)
def notify_camp(todo): c = Campfire(subdomain,campfire_key) room = c.room(room_id) room.speak(todo)