Merge branch 'master' into datarestructure
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
from copy import deepcopy
|
||||
from json import dumps
|
||||
from datetime import datetime
|
||||
|
||||
import main
|
||||
from core.relay import sendRelayNotification
|
||||
from modules import userinfo
|
||||
from utils.dedup import dedup
|
||||
|
||||
def testNetTarget(name, target):
|
||||
called = False
|
||||
@@ -50,28 +53,53 @@ def magicFunction(A, B):
|
||||
else:
|
||||
return all(A[k] in B[k] for k in set(A) & set(B)) and set(B) <= set(A)
|
||||
|
||||
def event(name, numberedName, cast, event=None):
|
||||
if "target" in cast.keys():
|
||||
target = cast["target"]
|
||||
else:
|
||||
target = None
|
||||
def event(numName, c): # yes I'm using a short variable because otherwise it goes off the screen
|
||||
if not "target" in c.keys():
|
||||
c["target"] = None
|
||||
|
||||
sendRelayNotification(name, cast)
|
||||
monitorGroups = testNetTarget(name, target)
|
||||
if dedup(numName, c):
|
||||
return
|
||||
# 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"]:
|
||||
userinfo.editUser(c["name"], c["muser"])
|
||||
elif c["type"] == "nick":
|
||||
userinfo.renameUser(c["name"], c["nick"], c["muser"], c["user"], c["user"]+"!"+c["ident"]+"@"+c["host"])
|
||||
elif c["type"] == "kick":
|
||||
userinfo.editUser(c["name"], c["muser"])
|
||||
userinfo.delUserByNick(c["name"], c["target"], c["user"])
|
||||
elif c["type"] == "quit":
|
||||
userinfo.delUserByNetwork(c["name"], c["nick"], c["muser"])
|
||||
elif c["type"] == "join":
|
||||
userinfo.addUser(c["name"], c["target"], c["nick"], c["muser"])
|
||||
elif c["type"] == "part":
|
||||
userinfo.delUser(c["name"], c["target"], c["nick"], c["muser"])
|
||||
|
||||
if "mtype" in c.keys():
|
||||
if c["mtype"] == "nick":
|
||||
userinfo.renameUser(c["name"], c["nick"], c["muser"], c["user"], c["user"]+"!"+c["ident"]+"@"+c["host"])
|
||||
|
||||
if "muser" in c.keys():
|
||||
del c["muser"]
|
||||
sendRelayNotification(c)
|
||||
|
||||
# only monitors below
|
||||
monitorGroups = testNetTarget(c["name"], c["target"])
|
||||
if monitorGroups == False:
|
||||
return
|
||||
for monitorGroup in monitorGroups:
|
||||
matcher = magicFunction(deepcopy(cast), deepcopy(main.monitor[monitorGroup]))
|
||||
matcher = magicFunction(deepcopy(c), deepcopy(main.monitor[monitorGroup]))
|
||||
if matcher == True:
|
||||
cast["monitor"] = True
|
||||
c["monitor"] = True
|
||||
if "send" in main.monitor[monitorGroup].keys():
|
||||
for i in main.monitor[monitorGroup]["send"].keys():
|
||||
if isinstance(main.monitor[monitorGroup]["send"][i], bool):
|
||||
sendRelayNotification(name, {"type": "err", "name": name, "target": target, "message": cast, "reason": "errdeliv"})
|
||||
sendRelayNotification({"type": "err", "name": name, "target": target, "message": c, "reason": "errdeliv"})
|
||||
continue
|
||||
if not i in main.pool.keys():
|
||||
sendRelayNotification(name, {"type": "err", "name": name, "target": target, "message": cast, "reason": "noname"})
|
||||
sendRelayNotification({"type": "err", "name": name, "target": target, "message": c, "reason": "noname"})
|
||||
if not i in main.IRCPool.keys():
|
||||
sendRelayNotification(name, {"type": "err", "name": name, "target": target, "message": cast, "reason": "noinstance"})
|
||||
sendRelayNotification({"type": "err", "name": name, "target": target, "message": c, "reason": "noinstance"})
|
||||
for x in main.monitor[monitorGroup]["send"][i]:
|
||||
main.IRCPool[i].msg(x, "monitor [%s] (%s) %s" % (monitorGroup, name, cast))
|
||||
main.IRCPool[i].msg(x, "monitor [%s] (%s) %s" % (monitorGroup, c["name"], c))
|
||||
|
||||
@@ -34,7 +34,7 @@ def provisionNetworkData(relay, alias, network, host, port, security, auth, pass
|
||||
elif auth == "ns":
|
||||
stage2commands["status"] = []
|
||||
stage2commands["nickserv"] = []
|
||||
stage2commands["status"].append("LoadMod NickServ")
|
||||
stage2commands["status"].append("LoadMod nickserv")
|
||||
stage2commands["nickserv"].append("Set %s" % password)
|
||||
if not main.config["ConnectOnCreate"]:
|
||||
stage3commands["status"] = []
|
||||
@@ -42,46 +42,47 @@ def provisionNetworkData(relay, alias, network, host, port, security, auth, pass
|
||||
if main.config["Toggles"]["CycleChans"]:
|
||||
stage2commands["status"] = []
|
||||
stage2commands["status"].append("LoadMod disconkick")
|
||||
stage2commands["status"].append("LoadMod chansaver")
|
||||
deliverRelayCommands(relay, commands,
|
||||
stage2=[[alias+"/"+network, stage2commands],
|
||||
[alias+"/"+network, stage3commands]])
|
||||
return
|
||||
|
||||
def provisionRelayForAlias(relay, alias):
|
||||
if "users" in main.relay[relay].keys():
|
||||
if alias in main.relay[relay]["users"]:
|
||||
return "PROVISIONED"
|
||||
else:
|
||||
main.relay[relay]["users"] = []
|
||||
main.relay[relay]["users"].append(alias)
|
||||
#if "users" in main.relay[relay].keys():
|
||||
# if alias in main.relay[relay]["users"]:
|
||||
# return "PROVISIONED"
|
||||
#else:
|
||||
# main.relay[relay]["users"] = []
|
||||
#main.relay[relay]["users"].append(alias)
|
||||
provisionUserData(relay, alias, main.alias[alias]["nick"],
|
||||
main.alias[alias]["altnick"],
|
||||
main.alias[alias]["ident"],
|
||||
main.alias[alias]["realname"],
|
||||
main.relay[relay]["password"])
|
||||
main.saveConf("relay")
|
||||
#main.saveConf("relay")
|
||||
return True
|
||||
|
||||
def provisionRelayForNetwork(relay, alias, network):
|
||||
if set(["users", "networks"]).issubset(main.relay[relay].keys()):
|
||||
if network in main.relay[relay]["networks"] and alias in main.relay[relay]["users"]:
|
||||
return "PROVISIONED"
|
||||
else:
|
||||
main.relay[relay]["networks"] = []
|
||||
main.relay[relay]["networks"].append(network)
|
||||
#if set(["users", "networks"]).issubset(main.relay[relay].keys()):
|
||||
# if network in main.relay[relay]["networks"] and alias in main.relay[relay]["users"]:
|
||||
# return "PROVISIONED"
|
||||
#else:
|
||||
# main.relay[relay]["networks"] = []
|
||||
#main.relay[relay]["networks"].append(network)
|
||||
provisionNetworkData(relay, alias, network,
|
||||
main.network[network]["host"],
|
||||
main.network[network]["port"],
|
||||
main.network[network]["security"],
|
||||
main.network[network]["auth"],
|
||||
main.alias[alias]["password"])
|
||||
main.saveConf("relay")
|
||||
#main.saveConf("relay")
|
||||
storedNetwork = False
|
||||
num = 1
|
||||
while not storedNetwork:
|
||||
i = str(num)
|
||||
if num == 1000:
|
||||
error("Too many iterations in while trying to choose name for r: %s a: %s n: %s" % (relay, alias, network))
|
||||
error("Iteration limit exceeded while trying to choose name for r: %s a: %s n: %s" % (relay, alias, network))
|
||||
return False
|
||||
|
||||
if network+i in main.pool.keys():
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import main
|
||||
from twisted.internet.threads import deferToThread
|
||||
from string import digits
|
||||
|
||||
import main
|
||||
from utils.logging.log import *
|
||||
from utils.logging.debug import debug
|
||||
|
||||
def getWhoSingle(name, query):
|
||||
result = main.r.sscan("live.who."+name, 0, query, count=9999999)
|
||||
@@ -23,6 +26,13 @@ def getChansSingle(name, nick):
|
||||
return None
|
||||
return [i.decode() for i in result]
|
||||
|
||||
def getChanList(name, nick):
|
||||
chanspace = "live.chan."+name+"."+nick
|
||||
result = main.r.smembers(chanspace)
|
||||
if len(result) == 0:
|
||||
return None
|
||||
return [i.decode() for i in result]
|
||||
|
||||
def getChans(nick):
|
||||
result = {}
|
||||
for i in main.nets():
|
||||
@@ -61,14 +71,19 @@ def getNamespace(name, channel, nick):
|
||||
chanspace = "live.chan.%s.%s" % (name, nick)
|
||||
return [gnamespace, namespace, chanspace]
|
||||
|
||||
def initialUsers(name, channel, users):
|
||||
def _initialUsers(name, channel, users):
|
||||
gnamespace = "live.who.%s" % name
|
||||
p = main.r.pipeline()
|
||||
for i in users:
|
||||
p.sadd(gnamespace, i[0]+"!"+i[1]+"@"+i[2])
|
||||
p.execute()
|
||||
|
||||
def initialNames(name, channel, names):
|
||||
def initialUsers(name, channel, users):
|
||||
debug("Initialising WHO records for %s on %s" % (channel, name))
|
||||
d = deferToThread(_initialUsers, name, channel, users)
|
||||
#d.addCallback(testCallback)
|
||||
|
||||
def _initialNames(name, channel, names):
|
||||
namespace = "live.who.%s.%s" % (name, channel)
|
||||
p = main.r.pipeline()
|
||||
for i in names:
|
||||
@@ -76,6 +91,11 @@ def initialNames(name, channel, names):
|
||||
p.sadd("live.chan."+name+"."+i, channel)
|
||||
p.execute()
|
||||
|
||||
def initialNames(name, channel, names):
|
||||
debug("Initialising NAMES records for %s on %s" % (channel, name))
|
||||
d = deferToThread(_initialNames, name, channel, names)
|
||||
#d.addCallback(testCallback)
|
||||
|
||||
def editUser(name, user):
|
||||
gnamespace = "live.who.%s" % name
|
||||
main.r.sadd(gnamespace, user)
|
||||
@@ -151,7 +171,7 @@ def delUserByNetwork(name, nick, user):
|
||||
p.delete(chanspace)
|
||||
p.execute()
|
||||
|
||||
def delChannel(name, channel): # This function is extremely expensive, look to replace
|
||||
def _delChannel(name, channel): # This function is extremely expensive, look to replace
|
||||
gnamespace = "live.who.%s" % name
|
||||
namespace = "live.who.%s.%s" % (name, channel)
|
||||
p = main.r.pipeline()
|
||||
@@ -166,10 +186,16 @@ def delChannel(name, channel): # This function is extremely expensive, look to r
|
||||
p.srem("live.chan."+name+"."+i.decode(), channel)
|
||||
p.delete(namespace)
|
||||
p.execute()
|
||||
return [name, channel]
|
||||
|
||||
def delChannel(name, channel):
|
||||
debug("Purging channel %s for %s" % (channel, name))
|
||||
d = deferToThread(_delChannel, name, channel)
|
||||
#d.addCallback(testCallback)
|
||||
|
||||
def delNetwork(name, channels):
|
||||
log("Purging channels for %s" % name)
|
||||
debug("Purging channels for %s" % name)
|
||||
for i in channels:
|
||||
delChannel(name, i)
|
||||
log("Finished purging channels for %s" % name)
|
||||
#log("Finished purging channels for %s" % name)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user