import json import main from core.relay import sendRelayNotification from modules import userinfo from utils.dedup import dedup order = [ "type", "net", "num", "channel", "msg", "nick", "ident", "host", "mtype", "user", "mode", "modearg", "realname", "server", "status", "ts", ] def parsemeta(numName, c): if "channel" not in c.keys(): c["channel"] = None # metadata scraping # need to check if this was received from a relay # in which case, do not do this if c["type"] in ["msg", "notice", "action", "topic", "mode"]: if "muser" in c.keys(): userinfo.editUser(c["net"], c["muser"]) # if c["type"] == "mode": # userinfo.updateMode(c) elif c["type"] == "nick": userinfo.renameUser( c["net"], c["nick"], c["muser"], c["user"], c["user"] + "!" + c["ident"] + "@" + c["host"], ) elif c["type"] == "kick": userinfo.editUser(c["net"], c["muser"]) userinfo.delUserByNick(c["net"], c["channel"], c["user"]) elif c["type"] == "quit": userinfo.delUserByNetwork(c["net"], c["nick"], c["muser"]) elif c["type"] == "join": userinfo.addUser(c["net"], c["channel"], c["nick"], c["muser"]) elif c["type"] == "part": userinfo.delUser(c["net"], c["channel"], c["nick"], c["muser"]) if "mtype" in c.keys(): if c["mtype"] == "nick": userinfo.renameUser( c["net"], c["nick"], c["muser"], c["user"], c["user"] + "!" + c["ident"] + "@" + c["host"], ) def queue_message(c): message = json.dumps(c) main.g.sadd(main.config["Ingest"]["Key"], message) def event( numName, c ): # yes I'm using a short variable because otherwise it goes off the screen if dedup(numName, c): return # make a copy of the object with dict() to prevent sending notifications with channel of None parsemeta(numName, dict(c)) if "muser" in c.keys(): del c["muser"] # sortedKeys = {k: c[k] for k in order if k in c} # Sort dict keys according to order # sortedKeys["src"] = "irc" c["src"] = "irc" if main.config["Ingest"]["Enabled"]: queue_message(c) sendRelayNotification(c)