import fuckit import os import sys import traceback import time from matrix_client.client import MatrixClient from time import sleep from yaml import load, dump class Bot(object): def __init__(self): self.conns = {} self.persist_dir = os.path.abspath('persist') if not os.path.exists(self.persist_dir): os.mkdir(self.persist_dir) bot = Bot() sys.path += ['plugins'] # bootstrap the reloader eval(compile(open(os.path.join('core', 'reload.py'), 'U').read(), os.path.join('core', 'reload.py'), 'exec'), globals()) reload(init=True) print "matrix has u" config = {} with open("./config.yml", "r") as fin: config = load(fin.read()) client = MatrixClient(config["me"]["homeserver"]) token = client.login_with_password(username=config["me"]["user"], password=config["me"]["password"]) rooms = client.get_rooms() def room_callback(event): room = rooms[event[u'room_id']] reload() if event[u'type'] == "m.room.message": print room.name, "<"+event[u'user_id']+">", event[u'content'][u'body'] if event[u'user_id'] == config["me"]["user"]: return else: content = event[u'content'] body = content[u'body'] if body.startswith("."): body = body.replace(".", "", 1) splitstuff = body.split() command = splitstuff[0] args = " ".join(splitstuff[1:]) cmd = match_command(command) if cmd in bot.commands: room.send_text(bot.commands[cmd][0](args)) else: for func, args in bot.plugs["regex"]: m = args['re'].search(body) if m: room.send_text(func(m)) elif u'invite_room_state' in event: for user in config["masters"]: if event[u'user_id'] == user: client.join_room(event[u'room_id']) print user, "asked me to join", event[u'room_id'] #else: # print dump(event) for room in rooms: rooms[room].add_listener(room_callback) while True: client.listen_for_events() sleep(0.25)