77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
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)
|