diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 98fa1cb..11c38e8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,21 @@ repos: -- repo: https://github.com/ambv/black - rev: 22.3.0 + - repo: https://github.com/psf/black + rev: 22.6.0 hooks: - id: black - args: - - --line-length=120 -- repo: https://gitlab.com/pycqa/flake8 + exclude: ^core/migrations + - repo: https://github.com/PyCQA/isort + rev: 5.10.1 + hooks: + - id: isort + - repo: https://github.com/PyCQA/flake8 rev: 4.0.1 hooks: - - id: flake8 - args: - - "--max-line-length=120" + - id: flake8 + args: [--max-line-length=88] + exclude: ^core/migrations + - repo: https://github.com/thibaudcolas/curlylint + rev: v0.13.1 + hooks: + - id: curlylint + files: \.(html|sls)$ diff --git a/commands/admall.py b/commands/admall.py index 8d74545..cb0c009 100644 --- a/commands/admall.py +++ b/commands/admall.py @@ -6,7 +6,9 @@ class AdmallCommand: def __init__(self, *args): self.admall(*args) - def admall(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def admall( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length > 2: for i in main.network.keys(): diff --git a/commands/alias.py b/commands/alias.py index d04cfdf..5bc12bf 100644 --- a/commands/alias.py +++ b/commands/alias.py @@ -1,5 +1,6 @@ -import main from yaml import dump + +import main from modules import alias @@ -7,7 +8,9 @@ class AliasCommand: def __init__(self, *args): self.alias(*args) - def alias(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def alias( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: info(dump(main.alias)) diff --git a/commands/all.py b/commands/all.py index a2994e9..16a6721 100644 --- a/commands/all.py +++ b/commands/all.py @@ -6,7 +6,9 @@ class AllCommand: def __init__(self, *args): self.all(*args) - def all(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def all( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length > 2: for i in main.network.keys(): @@ -15,7 +17,10 @@ class AllCommand: net = main.network[i].relays[x]["net"] alias = main.alias[x]["nick"] commands = {spl[1]: [" ".join(spl[2:])]} - success("Sending commands to relay %s as user %s" % (num, alias + "/" + net)) + success( + "Sending commands to relay %s as user %s" + % (num, alias + "/" + net) + ) deliverRelayCommands(num, commands, user=alias + "/" + net) return else: diff --git a/commands/allc.py b/commands/allc.py index 7a7b5fd..01698e5 100644 --- a/commands/allc.py +++ b/commands/allc.py @@ -6,7 +6,9 @@ class AllcCommand: def __init__(self, *args): self.allc(*args) - def allc(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def allc( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length > 4: targets = [] @@ -20,7 +22,8 @@ class AllcCommand: [ targets.append((i, x)) for x in main.alias.keys() - if main.alias[x]["nick"] == spl[2] and x in main.network[i].aliases.keys() + if main.alias[x]["nick"] == spl[2] + and x in main.network[i].aliases.keys() ] else: incUsage("allc") @@ -33,7 +36,10 @@ class AllcCommand: num = i[1] alias = main.alias[num]["nick"] commands = {spl[3]: [" ".join(spl[4:])]} - success("Sending commands to relay %i as user %s" % (num, alias + "/" + net)) + success( + "Sending commands to relay %i as user %s" + % (num, alias + "/" + net) + ) deliverRelayCommands(num, commands, user=alias + "/" + net) return else: diff --git a/commands/authcheck.py b/commands/authcheck.py index 26cc14e..7c41dd1 100644 --- a/commands/authcheck.py +++ b/commands/authcheck.py @@ -5,7 +5,9 @@ class AuthcheckCommand: def __init__(self, *args): self.authcheck(*args) - def authcheck(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def authcheck( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: results = [] @@ -13,7 +15,9 @@ class AuthcheckCommand: num = main.IRCPool[i].num net = main.IRCPool[i].net if not main.IRCPool[i].authenticated: - results.append("%s - %s: %s" % (net, num, main.alias[num]["nick"])) + results.append( + "%s - %s: %s" % (net, num, main.alias[num]["nick"]) + ) info("\n".join(results)) return elif length == 2: @@ -27,7 +31,9 @@ class AuthcheckCommand: if not net == spl[1]: continue if not main.IRCPool[i].authenticated: - results.append("%s - %s: %s" % (net, num, main.alias[num]["nick"])) + results.append( + "%s - %s: %s" % (net, num, main.alias[num]["nick"]) + ) info("\n".join(results)) return else: diff --git a/commands/auto.py b/commands/auto.py index ffc6df5..378a102 100644 --- a/commands/auto.py +++ b/commands/auto.py @@ -6,7 +6,9 @@ class AutoCommand: def __init__(self, *args): self.auto(*args) - def auto(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def auto( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: for i in main.network.keys(): @@ -14,9 +16,15 @@ class AutoCommand: info("Skipping %s - first relay exists" % i) else: num, alias = main.network[i].add_relay(1) - success("Successfully created first relay on network %s with alias %s" % (i, alias)) + success( + "Successfully created first relay on network %s with alias %s" + % (i, alias) + ) provision.provisionRelay(num, i) - success("Started provisioning network %s on first relay for alias %s" % (i, alias)) + success( + "Started provisioning network %s on first relay for alias %s" + % (i, alias) + ) main.saveConf("network") return elif length == 2: @@ -27,9 +35,15 @@ class AutoCommand: failure("First relay exists on %s" % spl[1]) return num, alias = main.network[spl[1]].add_relay(1) - success("Successfully created relay %i on network %s with alias %s" % (num, spl[1], alias)) + success( + "Successfully created relay %i on network %s with alias %s" + % (num, spl[1], alias) + ) provision.provisionRelay(num, spl[1]) - success("Started provisioning network %s on relay %s for alias %s" % (spl[1], num, alias)) + success( + "Started provisioning network %s on relay %s for alias %s" + % (spl[1], num, alias) + ) main.saveConf("network") return else: diff --git a/commands/blacklist.py b/commands/blacklist.py index 42684a6..858da28 100644 --- a/commands/blacklist.py +++ b/commands/blacklist.py @@ -1,12 +1,15 @@ -import main from yaml import dump +import main + class BlacklistCommand: def __init__(self, *args): self.blacklist(*args) - def blacklist(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def blacklist( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: info(dump(main.blacklist)) diff --git a/commands/chans.py b/commands/chans.py index 1ccf710..8b820ff 100644 --- a/commands/chans.py +++ b/commands/chans.py @@ -6,7 +6,9 @@ class ChansCommand: def __init__(self, *args): self.chans(*args) - def chans(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def chans( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if len(spl) < 2: incUsage("chans") diff --git a/commands/cmd.py b/commands/cmd.py index babdb2d..f2706db 100644 --- a/commands/cmd.py +++ b/commands/cmd.py @@ -6,7 +6,9 @@ class CmdCommand: def __init__(self, *args): self.cmd(*args) - def cmd(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def cmd( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length > 4: if not spl[1].isdigit(): diff --git a/commands/confirm.py b/commands/confirm.py index 86d657c..53a70a2 100644 --- a/commands/confirm.py +++ b/commands/confirm.py @@ -6,7 +6,9 @@ class ConfirmCommand: def __init__(self, *args): self.confirm(*args) - def confirm(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def confirm( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 4: if not spl[1] in main.network.keys(): @@ -19,7 +21,10 @@ class ConfirmCommand: failure("No such relay on %s: %s" % (spl[1], spl[2])) return regproc.confirmAccount(spl[1], int(spl[2]), spl[3]) - success("Requested confirmation on %s - %s with token %s" % (spl[1], spl[2], spl[3])) + success( + "Requested confirmation on %s - %s with token %s" + % (spl[1], spl[2], spl[3]) + ) return else: incUsage("confirm") diff --git a/commands/disable.py b/commands/disable.py index 9c52234..9a56fb4 100644 --- a/commands/disable.py +++ b/commands/disable.py @@ -6,7 +6,9 @@ class DisableCommand: def __init__(self, *args): self.disable(*args) - def disable(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def disable( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 3: if not spl[1] in main.network.keys(): diff --git a/commands/dist.py b/commands/dist.py index 2348e29..7e94c4e 100644 --- a/commands/dist.py +++ b/commands/dist.py @@ -1,12 +1,15 @@ +from subprocess import PIPE, run + import main -from subprocess import run, PIPE class DistCommand: def __init__(self, *args): self.dist(*args) - def dist(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def dist( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if main.config["Dist"]["Enabled"]: rtrn = run([main.config["Dist"]["File"]], shell=True, stdout=PIPE) diff --git a/commands/email.py b/commands/email.py index 4817988..3b78931 100644 --- a/commands/email.py +++ b/commands/email.py @@ -1,12 +1,15 @@ -import main from yaml import dump +import main + class EmailCommand: def __init__(self, *args): self.email(*args) - def email(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def email( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 4: if spl[1] == "add": @@ -19,10 +22,16 @@ class EmailCommand: return if not domain in main.irc["_"]["domains"]: main.irc["_"]["domains"].append(domain) - success("Successfully added domain %s to default config" % domain) + success( + "Successfully added domain %s to default config" + % domain + ) main.saveConf("irc") else: - failure("Domain already exists in default config: %s" % domain) + failure( + "Domain already exists in default config: %s" + % domain + ) return elif spl[1] == "del": if not spl[2].isdigit(): @@ -32,10 +41,16 @@ class EmailCommand: if domain in main.irc["_"]["domains"]: main.irc["_"]["domains"].remove(domain) - success("Successfully removed domain %s to default config" % domain) + success( + "Successfully removed domain %s to default config" + % domain + ) main.saveConf("irc") else: - failure("Domain does not exist in default config: %s" % domain) + failure( + "Domain does not exist in default config: %s" + % domain + ) return else: @@ -47,10 +62,15 @@ class EmailCommand: if not spl[3] in main.alias[num]["emails"]: main.alias[num]["emails"].append(spl[3]) main.saveConf("alias") - success("Successfully added email %s to alias %i" % (spl[3], num)) + success( + "Successfully added email %s to alias %i" + % (spl[3], num) + ) return else: - failure("Email already exists in alias %i: %s" % (num, spl[3])) + failure( + "Email already exists in alias %i: %s" % (num, spl[3]) + ) return elif spl[1] == "del": if not num in main.alias.keys(): @@ -59,10 +79,15 @@ class EmailCommand: if spl[3] in main.alias[num]["emails"]: main.alias[num]["emails"].remove(spl[3]) main.saveConf("alias") - success("Successfully removed email %s from alias %i" % (spl[3], num)) + success( + "Successfully removed email %s from alias %i" + % (spl[3], num) + ) return else: - failure("Email does not exist in alias %i: %s" % (spl[3], num)) + failure( + "Email does not exist in alias %i: %s" % (spl[3], num) + ) return elif length == 2: if spl[1] == "list": @@ -74,7 +99,12 @@ class EmailCommand: elif length == 3: if spl[1] == "list": if spl[2] == "domain": - filtered = {f"{k}:{k2}":v2 for k,v in main.irc.items() for k2,v2 in v.items() if k2 == "domains"} + filtered = { + f"{k}:{k2}": v2 + for k, v in main.irc.items() + for k2, v2 in v.items() + if k2 == "domains" + } info(dump(filtered)) return else: diff --git a/commands/enable.py b/commands/enable.py index 439b26c..1cfb0e4 100644 --- a/commands/enable.py +++ b/commands/enable.py @@ -6,7 +6,9 @@ class EnableCommand: def __init__(self, *args): self.enable(*args) - def enable(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def enable( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 3: if not spl[1] in main.network.keys(): diff --git a/commands/exec.py b/commands/exec.py index c2a5598..6f7a924 100644 --- a/commands/exec.py +++ b/commands/exec.py @@ -5,7 +5,9 @@ class ExecCommand: def __init__(self, *args): self.exec(*args) - def exec(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def exec( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length > 1: try: diff --git a/commands/help.py b/commands/help.py index 6dcf937..0ca3ff7 100644 --- a/commands/help.py +++ b/commands/help.py @@ -5,7 +5,9 @@ class HelpCommand: def __init__(self, *args): self.help(*args) - def help(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def help( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: helpMap = [] for i in main.help.keys(): diff --git a/commands/join.py b/commands/join.py index e6cbc20..d6147a0 100644 --- a/commands/join.py +++ b/commands/join.py @@ -6,7 +6,9 @@ class JoinCommand: def __init__(self, *args): self.join(*args) - def join(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def join( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 3: if not spl[1] in main.network.keys(): diff --git a/commands/list.py b/commands/list.py index 217b051..7fbc616 100644 --- a/commands/list.py +++ b/commands/list.py @@ -5,7 +5,9 @@ class ListCommand: def __init__(self, *args): self.list(*args) - def list(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def list( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: for i in main.network.keys(): diff --git a/commands/load.py b/commands/load.py index 31e66f4..b62da89 100644 --- a/commands/load.py +++ b/commands/load.py @@ -5,7 +5,9 @@ class LoadCommand: def __init__(self, *args): self.load(*args) - def load(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def load( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: if spl[1] in main.filemap.keys(): diff --git a/commands/loadmod.py b/commands/loadmod.py index 2923fd7..e440b58 100644 --- a/commands/loadmod.py +++ b/commands/loadmod.py @@ -6,7 +6,9 @@ class LoadmodCommand: def __init__(self, *args): self.loadmod(*args) - def loadmod(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def loadmod( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: rtrn = loadSingle(spl[1]) diff --git a/commands/logout.py b/commands/logout.py index 61cb834..06bd437 100644 --- a/commands/logout.py +++ b/commands/logout.py @@ -5,7 +5,9 @@ class LogoutCommand: def __init__(self, *args): self.logout(*args) - def logout(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def logout( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: obj.authed = False success("Logged out") diff --git a/commands/mod.py b/commands/mod.py index 10a19e1..94d3a7a 100644 --- a/commands/mod.py +++ b/commands/mod.py @@ -1,13 +1,16 @@ -import main from yaml import dump +import main + class ModCommand: # This could be greatly improved, but not really important right now def __init__(self, *args): self.mod(*args) - def mod(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def mod( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 4: if not spl[1] in main.network.keys(): @@ -21,7 +24,9 @@ class ModCommand: return main.saveConf("network") - success("Successfully set key %s to %s on %s" % (spl[2], spl[3], spl[1])) + success( + "Successfully set key %s to %s on %s" % (spl[2], spl[3], spl[1]) + ) return # Find a better way to do this # elif length == 6: diff --git a/commands/msg.py b/commands/msg.py index d92494a..754176c 100644 --- a/commands/msg.py +++ b/commands/msg.py @@ -5,7 +5,9 @@ class MsgCommand: def __init__(self, *args): self.msg(*args) - def msg(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def msg( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length >= 5: if not spl[1] in main.network.keys(): @@ -20,7 +22,10 @@ class MsgCommand: if not spl[3] in main.IRCPool[spl[1] + spl[2]].channels: info("Bot not on channel: %s" % spl[3]) main.IRCPool[spl[1] + spl[2]].msg(spl[3], " ".join(spl[4:])) - success("Sent %s to %s on relay %s on network %s" % (" ".join(spl[4:]), spl[3], spl[2], spl[1])) + success( + "Sent %s to %s on relay %s on network %s" + % (" ".join(spl[4:]), spl[3], spl[2], spl[1]) + ) return else: incUsage("msg") diff --git a/commands/network.py b/commands/network.py index 4a6bdf2..13b23bd 100644 --- a/commands/network.py +++ b/commands/network.py @@ -1,14 +1,18 @@ -import main +from string import digits + from yaml import dump + +import main from modules.network import Network -from string import digits class NetworkCommand: def __init__(self, *args): self.network(*args) - def network(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def network( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 7: if spl[1] == "add": @@ -28,7 +32,9 @@ class NetworkCommand: failure("Auth must be sasl, ns or none, not %s" % spl[5]) return else: - main.network[spl[2]] = Network(spl[2], spl[3], int(spl[4]), spl[5].lower(), spl[6].lower()) + main.network[spl[2]] = Network( + spl[2], spl[3], int(spl[4]), spl[5].lower(), spl[6].lower() + ) success("Successfully created network: %s" % spl[2]) main.saveConf("network") return diff --git a/commands/part.py b/commands/part.py index 249c32a..5a2de7e 100644 --- a/commands/part.py +++ b/commands/part.py @@ -5,7 +5,9 @@ class PartCommand: def __init__(self, *args): self.part(*args) - def part(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def part( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 4: if not spl[1] in main.network.keys(): diff --git a/commands/pass.py b/commands/pass.py index e37a51e..4b9e601 100644 --- a/commands/pass.py +++ b/commands/pass.py @@ -5,7 +5,9 @@ class PassCommand: def __init__(self, *args): self.password(*args) - def password(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def password( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: info("You are already authenticated") return diff --git a/commands/pending.py b/commands/pending.py index b65f2ad..5f962dd 100644 --- a/commands/pending.py +++ b/commands/pending.py @@ -5,14 +5,19 @@ class PendingCommand: def __init__(self, *args): self.pending(*args) - def pending(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def pending( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: results = [] for i in main.network.keys(): for x in main.network[i].relays.keys(): if not main.network[i].relays[x]["registered"]: - results.append("%s: confirm %s %s [code]" % (main.alias[x]["nick"], i, x)) + results.append( + "%s: confirm %s %s [code]" + % (main.alias[x]["nick"], i, x) + ) info("\n".join(results)) return elif length == 2: @@ -22,7 +27,10 @@ class PendingCommand: results = [] for x in main.network[spl[1]].relays.keys(): if not main.network[spl[1]].relays[x]["registered"]: - results.append("%s: confirm %s %s [code]" % (main.alias[x]["nick"], spl[1], x)) + results.append( + "%s: confirm %s %s [code]" + % (main.alias[x]["nick"], spl[1], x) + ) info("\n".join(results)) return else: diff --git a/commands/recheckauth.py b/commands/recheckauth.py index ab4b5b0..6cea741 100644 --- a/commands/recheckauth.py +++ b/commands/recheckauth.py @@ -5,7 +5,9 @@ class RecheckauthCommand: def __init__(self, *args): self.recheckauth(*args) - def recheckauth(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def recheckauth( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: results = [] diff --git a/commands/reg.py b/commands/reg.py index 41bb5f0..fb3794a 100644 --- a/commands/reg.py +++ b/commands/reg.py @@ -6,7 +6,9 @@ class RegCommand: def __init__(self, *args): self.reg(*args) - def reg(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def reg( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: if not spl[1] in main.network.keys(): diff --git a/commands/relay.py b/commands/relay.py index 34bbd70..7bfc3d8 100644 --- a/commands/relay.py +++ b/commands/relay.py @@ -1,18 +1,24 @@ -import main from yaml import dump +import main + class RelayCommand: def __init__(self, *args): self.relay(*args) - def relay(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def relay( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 3: if spl[1] == "add": if spl[2] in main.network.keys(): id, alias = main.network[spl[2]].add_relay() - success("Successfully created relay %s on network %s with alias %s" % (str(id), spl[2], alias)) + success( + "Successfully created relay %s on network %s with alias %s" + % (str(id), spl[2], alias) + ) main.saveConf("network") return else: @@ -35,7 +41,10 @@ class RelayCommand: failure("Must be a number, not %s" % spl[3]) return id, alias = main.network[spl[2]].add_relay(int(spl[3])) - success("Successfully created relay %s on network %s with alias %s" % (str(id), spl[2], alias)) + success( + "Successfully created relay %s on network %s with alias %s" + % (str(id), spl[2], alias) + ) main.saveConf("network") return else: @@ -52,7 +61,9 @@ class RelayCommand: failure("No such relay: %s on network %s" % (spl[3], spl[2])) return main.network[spl[2]].delete_relay(int(spl[3])) - success("Successfully deleted relay %s on network %s" % (spl[3], spl[2])) + success( + "Successfully deleted relay %s on network %s" % (spl[3], spl[2]) + ) main.saveConf("network") return else: diff --git a/commands/save.py b/commands/save.py index 12624cd..0dd22b6 100644 --- a/commands/save.py +++ b/commands/save.py @@ -5,7 +5,9 @@ class SaveCommand: def __init__(self, *args): self.save(*args) - def save(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def save( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: if spl[1] in main.filemap.keys(): diff --git a/commands/stats.py b/commands/stats.py index a396f12..ab6e686 100644 --- a/commands/stats.py +++ b/commands/stats.py @@ -1,14 +1,17 @@ +from string import digits + import main import modules.counters as count import modules.userinfo as userinfo -from string import digits class StatsCommand: def __init__(self, *args): self.stats(*args) - def stats(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def stats( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 1: stats = [] diff --git a/commands/swho.py b/commands/swho.py index 18dbc12..aa3a78c 100644 --- a/commands/swho.py +++ b/commands/swho.py @@ -5,7 +5,9 @@ class SwhoCommand: def __init__(self, *args): self.swho(*args) - def swho(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def swho( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: if not spl[1] in main.network.keys(): diff --git a/commands/token.py b/commands/token.py index 7d38eac..8d95394 100644 --- a/commands/token.py +++ b/commands/token.py @@ -1,13 +1,17 @@ -import main -from yaml import dump from uuid import uuid4 +from yaml import dump + +import main + class TokenCommand: def __init__(self, *args): self.token(*args) - def token(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def token( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: if spl[1] == "list": diff --git a/commands/users.py b/commands/users.py index 7d80e84..6ba7563 100644 --- a/commands/users.py +++ b/commands/users.py @@ -6,7 +6,9 @@ class UsersCommand: def __init__(self, *args): self.users(*args) - def users(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def users( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if len(spl) < 2: incUsage("users") diff --git a/commands/who.py b/commands/who.py index e80f488..8273ef4 100644 --- a/commands/who.py +++ b/commands/who.py @@ -6,7 +6,9 @@ class WhoCommand: def __init__(self, *args): self.who(*args) - def who(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + def who( + self, addr, authed, data, obj, spl, success, failure, info, incUsage, length + ): if authed: if length == 2: result = userinfo.getWho(spl[1]) diff --git a/core/bot.py b/core/bot.py index 375703d..31ff5d5 100644 --- a/core/bot.py +++ b/core/bot.py @@ -1,45 +1,38 @@ -from twisted.internet.protocol import ReconnectingClientFactory -from twisted.words.protocols.irc import IRCClient -from twisted.internet.defer import Deferred -from twisted.internet.task import LoopingCall -from twisted.internet import reactor, task -from twisted.words.protocols.irc import ( - symbolic_to_numeric, - numeric_to_symbolic, - lowDequote, - IRCBadMessage, -) - import sys -from string import digits -from random import randint from copy import deepcopy from datetime import datetime +from random import randint +from string import digits -from modules import userinfo -from modules import counters -from modules import monitor -from modules import chankeep -from modules import regproc +from twisted.internet import reactor, task +from twisted.internet.defer import Deferred +from twisted.internet.protocol import ReconnectingClientFactory +from twisted.internet.ssl import DefaultOpenSSLContextFactory +from twisted.internet.task import LoopingCall +from twisted.words.protocols.irc import (IRCBadMessage, IRCClient, lowDequote, + numeric_to_symbolic, + symbolic_to_numeric) +import main from core.relay import sendRelayNotification +from modules import chankeep, counters, monitor, regproc, userinfo from utils.dedup import dedup from utils.get import getRelay - -import main -from utils.logging.log import * from utils.logging.debug import * +from utils.logging.log import * from utils.logging.send import * from utils.parsing import parsen -from twisted.internet.ssl import DefaultOpenSSLContextFactory - def deliverRelayCommands(num, relayCommands, user=None, stage2=None): keyFN = main.certPath + main.config["Key"] certFN = main.certPath + main.config["Certificate"] - contextFactory = DefaultOpenSSLContextFactory(keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace")) - bot = IRCBotFactory(net=None, num=num, relayCommands=relayCommands, user=user, stage2=stage2) + contextFactory = DefaultOpenSSLContextFactory( + keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace") + ) + bot = IRCBotFactory( + net=None, num=num, relayCommands=relayCommands, user=user, stage2=stage2 + ) host, port = getRelay(num) rct = reactor.connectSSL(host, port, bot, contextFactory) @@ -165,7 +158,9 @@ class IRCBot(IRCClient): self.listAttempted = False # we asked for a list self.listSimple = False # after asking again we got the list, so use the simple # syntax from now on - self.wantList = False # we want to send a LIST, but not all relays are active yet + self.wantList = ( + False # we want to send a LIST, but not all relays are active yet + ) self.chanlimit = 0 self.prefix = {} self.servername = None @@ -197,9 +192,14 @@ class IRCBot(IRCClient): if not i in self.channels: if self.net in main.blacklist.keys(): if i in main.blacklist[self.net]: - debug("Not joining blacklisted channel %s on %s - %i" % (i, self.net, self.num)) + debug( + "Not joining blacklisted channel %s on %s - %i" + % (i, self.net, self.num) + ) continue - debug(self.net, "-", self.num, ": joining", i, "in", sleeptime, "seconds") + debug( + self.net, "-", self.num, ": joining", i, "in", sleeptime, "seconds" + ) reactor.callLater(sleeptime, self.join, i) sleeptime += increment if sleeptime == 10: @@ -207,11 +207,17 @@ class IRCBot(IRCClient): increment = 0.7 increment += 0.1 else: - error("%s - Cannot join channel we are already on: %s - %i" % (i, self.net, self.num)) + error( + "%s - Cannot join channel we are already on: %s - %i" + % (i, self.net, self.num) + ) def checkChannels(self): if not chankeep.allRelaysActive(self.net): - debug("Skipping channel check as we have inactive relays: %s - %i" % (self.net, self.num)) + debug( + "Skipping channel check as we have inactive relays: %s - %i" + % (self.net, self.num) + ) return if self.net in main.TempChan.keys(): if self.num in main.TempChan[self.net].keys(): @@ -225,7 +231,9 @@ class IRCBot(IRCClient): cast["ts"] = str(datetime.now().isoformat()) # remove odd stuff - for i in list(cast.keys()): # Make a copy of the .keys() as Python 3 cannot handle iterating over + for i in list( + cast.keys() + ): # Make a copy of the .keys() as Python 3 cannot handle iterating over if cast[i] == "": # a dictionary that changes length with each iteration del cast[i] # remove server stuff @@ -359,7 +367,9 @@ class IRCBot(IRCClient): def irc_ERR_PASSWDMISMATCH(self, prefix, params): log("%s - %i: password mismatch as %s" % (self.net, self.num, self.username)) - sendAll("%s - %i: password mismatch as %s" % (self.net, self.num, self.username)) + sendAll( + "%s - %i: password mismatch as %s" % (self.net, self.num, self.username) + ) def _who(self, channel): d = Deferred() @@ -474,12 +484,17 @@ class IRCBot(IRCClient): debug("Will not send LIST, unauthenticated: %s - %i" % (self.net, self.num)) return if self.listAttempted: - debug("List request dropped, already asked for LIST - %s - %i" % (self.net, self.num)) + debug( + "List request dropped, already asked for LIST - %s - %i" + % (self.net, self.num) + ) return else: self.listAttempted = True if self.listOngoing: - debug("LIST request dropped, already ongoing - %s - %i" % (self.net, self.num)) + debug( + "LIST request dropped, already ongoing - %s - %i" % (self.net, self.num) + ) return else: if nocheck: @@ -504,7 +519,9 @@ class IRCBot(IRCClient): self._tempList[1].append([channel, users, topic]) def irc_RPL_LISTEND(self, prefix, params): - if not len(self._tempList[0]) > 0: # there are no callbacks, can't do anything there + if ( + not len(self._tempList[0]) > 0 + ): # there are no callbacks, can't do anything there debug("We didn't ask for this LIST, discarding") self._tempList[0].clear() self._tempList[1].clear() @@ -529,7 +546,10 @@ class IRCBot(IRCClient): else: if self.listRetried: self.listRetried = False - debug("List received after retry - defaulting to simple list syntax: %s - %i" % (self.net, self.num)) + debug( + "List received after retry - defaulting to simple list syntax: %s - %i" + % (self.net, self.num) + ) self.listSimple = True def got_list(self, listinfo): @@ -543,7 +563,10 @@ class IRCBot(IRCClient): name = self.net + "1" if main.IRCPool[name].wantList == True: main.IRCPool[name].list(nocheck=True) - debug("Asking for a list for %s after final relay %i connected" % (self.net, self.num)) + debug( + "Asking for a list for %s after final relay %i connected" + % (self.net, self.num) + ) if self.num == 1: # Only one instance should do a list if self.chanlimit: if allRelays: @@ -560,7 +583,9 @@ class IRCBot(IRCClient): ]: # TODO: add check for register request sent, only send it once if main.config["AutoReg"]: if not self.authenticated: - self._regAttempt = reactor.callLater(5, regproc.registerAccount, self.net, self.num) + self._regAttempt = reactor.callLater( + 5, regproc.registerAccount, self.net, self.num + ) # regproc.registerAccount(self.net, self.num) try: self.chanlimit = int(chanlimit) @@ -568,7 +593,9 @@ class IRCBot(IRCClient): warn("Invalid chanlimit: %s" % i) if self.chanlimit == 0: self.chanlimit = 200 # don't take the piss if it's not limited - if not regproc.needToRegister(self.net): # if we need to register, only recheck on auth confirmation + if not regproc.needToRegister( + self.net + ): # if we need to register, only recheck on auth confirmation self.recheckList() def seed_prefix(self, prefix): @@ -669,7 +696,9 @@ class IRCBot(IRCClient): if negativepass == True: if self._negativePass == None: self._negativePass = True - debug("Positive registration check - %s - %i" % (self.net, self.num)) + debug( + "Positive registration check - %s - %i" % (self.net, self.num) + ) if sinst["ping"]: debug("Sending ping - %s - %i" % (self.net, self.num)) self.msg(sinst["entity"], sinst["pingmsg"]) @@ -725,7 +754,9 @@ class IRCBot(IRCClient): lc = self._getWho[channel] lc.stop() del self._getWho[channel] - userinfo.delChannels(self.net, [channel]) # < we do not need to deduplicate this + userinfo.delChannels( + self.net, [channel] + ) # < we do not need to deduplicate this # log("Can no longer cover %s, removing records" % channel)# as it will only be matched once -- # other bots have different nicknames so diff --git a/core/logstash.py b/core/logstash.py index 17e8dfd..66cded9 100644 --- a/core/logstash.py +++ b/core/logstash.py @@ -1,7 +1,8 @@ -import logstash import logging - from json import dumps, loads + +import logstash + import main from utils.logging.log import * diff --git a/core/parser.py b/core/parser.py index 1eb34c5..8d7c635 100644 --- a/core/parser.py +++ b/core/parser.py @@ -24,7 +24,9 @@ def parseCommand(addr, authed, data): failure("No text was sent") return if spl[0] in main.CommandMap.keys(): - main.CommandMap[spl[0]](addr, authed, data, obj, spl, success, failure, info, incUsage, length) + main.CommandMap[spl[0]]( + addr, authed, data, obj, spl, success, failure, info, incUsage, length + ) return incUsage(None) return diff --git a/core/relay.py b/core/relay.py index 66a9830..7f63209 100644 --- a/core/relay.py +++ b/core/relay.py @@ -1,6 +1,7 @@ -from twisted.internet.protocol import Protocol, Factory, ClientFactory -from json import dumps, loads from copy import deepcopy +from json import dumps, loads + +from twisted.internet.protocol import ClientFactory, Factory, Protocol import main from utils.logging.log import * @@ -114,8 +115,13 @@ class Relay(Protocol): def handleHello(self, parsed): if parsed["key"] in main.tokens.keys(): - if parsed["hello"] == main.tokens[parsed["key"]]["hello"] and main.tokens[parsed["key"]]["usage"] == "relay": - self.sendMsg({"type": "hello", "hello": main.tokens[parsed["key"]]["counter"]}) + if ( + parsed["hello"] == main.tokens[parsed["key"]]["hello"] + and main.tokens[parsed["key"]]["usage"] == "relay" + ): + self.sendMsg( + {"type": "hello", "hello": main.tokens[parsed["key"]]["counter"]} + ) self.authed = True else: self.transport.loseConnection() @@ -130,7 +136,10 @@ class Relay(Protocol): def connectionLost(self, reason): self.authed = False - log("Relay connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage())) + log( + "Relay connection lost from %s:%s -- %s" + % (self.addr.host, self.addr.port, reason.getErrorMessage()) + ) if self.addr in main.relayConnections.keys(): del main.relayConnections[self.addr] else: diff --git a/core/server.py b/core/server.py index 94af7a0..6b7a25d 100644 --- a/core/server.py +++ b/core/server.py @@ -1,8 +1,8 @@ -from twisted.internet.protocol import Protocol, Factory, ClientFactory -import main -from utils.logging.log import * +from twisted.internet.protocol import ClientFactory, Factory, Protocol +import main from core.parser import parseCommand +from utils.logging.log import * class Server(Protocol): @@ -34,7 +34,10 @@ class Server(Protocol): def connectionLost(self, reason): self.authed = False - log("Connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage())) + log( + "Connection lost from %s:%s -- %s" + % (self.addr.host, self.addr.port, reason.getErrorMessage()) + ) if self.addr in main.connections.keys(): del main.connections[self.addr] else: diff --git a/main.py b/main.py index 473fd3e..103c15a 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,9 @@ import json import pickle -from redis import StrictRedis -from string import digits from os import urandom +from string import digits + +from redis import StrictRedis from utils.logging.log import * @@ -106,5 +107,9 @@ def initConf(): def initMain(): global r, g initConf() - r = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBEphemeral"]) # Ephemeral - flushed on quit - g = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBPersistent"]) # Persistent + r = StrictRedis( + unix_socket_path=config["RedisSocket"], db=config["RedisDBEphemeral"] + ) # Ephemeral - flushed on quit + g = StrictRedis( + unix_socket_path=config["RedisSocket"], db=config["RedisDBPersistent"] + ) # Persistent diff --git a/modules/alias.py b/modules/alias.py index 1961ec6..6417e29 100644 --- a/modules/alias.py +++ b/modules/alias.py @@ -1,7 +1,8 @@ -import main import random import re +import main + def generate_password(): return "".join([chr(random.randint(0, 74) + 48) for i in range(32)]) diff --git a/modules/chankeep.py b/modules/chankeep.py index ec43b0f..fdbe974 100644 --- a/modules/chankeep.py +++ b/modules/chankeep.py @@ -1,11 +1,13 @@ -import main -from utils.logging.log import * -from utils.logging.debug import * from copy import deepcopy from math import ceil -import modules.provision + from twisted.internet.threads import deferToThread +import main +import modules.provision +from utils.logging.debug import * +from utils.logging.log import * + def allRelaysActive(net): relayNum = len(main.network[net].relays.keys()) @@ -46,7 +48,10 @@ def emptyChanAllocate(net, flist, relay, new): if toalloc > sum(chanfree[0].values()): correction = round(toalloc - sum(chanfree[0].values()) / chanfree[1]) # print("correction", correction) - warn("Ran out of channel spaces, provisioning additional %i relays for %s" % (correction, net)) + warn( + "Ran out of channel spaces, provisioning additional %i relays for %s" + % (correction, net) + ) # newNums = modules.provision.provisionMultipleRelays(net, correction) return False for i in chanfree[0].keys(): @@ -99,12 +104,18 @@ def keepChannels(net, listinfo, mean, sigrelay, relay): listinfo = minifyChans(net, listinfo) if not listinfo: return - if relay <= main.config["ChanKeep"]["SigSwitch"]: # we can cover all of the channels + if ( + relay <= main.config["ChanKeep"]["SigSwitch"] + ): # we can cover all of the channels coverAll = True - elif relay > main.config["ChanKeep"]["SigSwitch"]: # we cannot cover all of the channels + elif ( + relay > main.config["ChanKeep"]["SigSwitch"] + ): # we cannot cover all of the channels coverAll = False if not sigrelay <= main.config["ChanKeep"]["MaxRelay"]: - error("Network %s is too big to cover: %i relays required" % (net, sigrelay)) + error( + "Network %s is too big to cover: %i relays required" % (net, sigrelay) + ) return if coverAll: needed = relay - len(main.network[net].relays.keys()) diff --git a/modules/counters.py b/modules/counters.py index a088cc3..5d51a52 100644 --- a/modules/counters.py +++ b/modules/counters.py @@ -1,6 +1,7 @@ -import main from twisted.internet.task import LoopingCall +import main + def event(name, eventType): if not "local" in main.counters.keys(): diff --git a/modules/monitor.py b/modules/monitor.py index f174a80..e1c16a7 100644 --- a/modules/monitor.py +++ b/modules/monitor.py @@ -2,10 +2,9 @@ from copy import deepcopy from json import dumps import main -from core.relay import sendRelayNotification from core.logstash import sendLogstashNotification -from modules import userinfo -from modules import regproc +from core.relay import sendRelayNotification +from modules import regproc, userinfo from utils.dedup import dedup order = [ @@ -68,7 +67,9 @@ def parsemeta(numName, c): ) -def event(numName, c): # yes I'm using a short variable because otherwise it goes off the screen +def event( + numName, c +): # yes I'm using a short variable because otherwise it goes off the screen if dedup(numName, c): return diff --git a/modules/network.py b/modules/network.py index 21f1753..5652120 100644 --- a/modules/network.py +++ b/modules/network.py @@ -1,14 +1,15 @@ -from twisted.internet.ssl import DefaultOpenSSLContextFactory import json +from twisted.internet import reactor +from twisted.internet.ssl import DefaultOpenSSLContextFactory + +import main +from core.bot import IRCBot, IRCBotFactory from modules import alias from modules.chankeep import nukeNetwork from modules.regproc import needToRegister -from twisted.internet import reactor -from core.bot import IRCBot, IRCBotFactory -import main -from utils.logging.log import * from utils.get import getRelay +from utils.logging.log import * class Network: @@ -77,7 +78,9 @@ class Network: # e.g. freenode1 for the first relay on freenode network keyFN = main.certPath + main.config["Key"] certFN = main.certPath + main.config["Certificate"] - contextFactory = DefaultOpenSSLContextFactory(keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace")) + contextFactory = DefaultOpenSSLContextFactory( + keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace") + ) bot = IRCBotFactory(self.net, num) # host, port = self.relays[num]["host"], self.relays[num]["port"] host, port = getRelay(num) diff --git a/modules/provision.py b/modules/provision.py index 1f17a20..9e93236 100644 --- a/modules/provision.py +++ b/modules/provision.py @@ -1,11 +1,25 @@ +from twisted.internet import reactor + import main +import modules.regproc from core.bot import deliverRelayCommands from utils.logging.log import * -from twisted.internet import reactor -import modules.regproc -def provisionUserNetworkData(num, nick, altnick, ident, realname, emails, network, host, port, security, auth, password): +def provisionUserNetworkData( + num, + nick, + altnick, + ident, + realname, + emails, + network, + host, + port, + security, + auth, + password, +): print("nick", nick) print("altnick", altnick) print("emails", emails) @@ -16,17 +30,25 @@ def provisionUserNetworkData(num, nick, altnick, ident, realname, emails, networ stage2commands["status"] = [] commands["controlpanel"] = [] user = nick.lower() - commands["controlpanel"].append("AddUser %s %s" % (user, main.config["Relay"]["Password"])) + commands["controlpanel"].append( + "AddUser %s %s" % (user, main.config["Relay"]["Password"]) + ) commands["controlpanel"].append("AddNetwork %s %s" % (user, network)) commands["controlpanel"].append("Set Nick %s %s" % (user, nick)) commands["controlpanel"].append("Set Altnick %s %s" % (user, altnick)) commands["controlpanel"].append("Set Ident %s %s" % (user, ident)) commands["controlpanel"].append("Set RealName %s %s" % (user, realname)) if security == "ssl": - commands["controlpanel"].append("SetNetwork TrustAllCerts %s %s true" % (user, network)) # Don't judge me - commands["controlpanel"].append("AddServer %s %s %s +%s" % (user, network, host, port)) + commands["controlpanel"].append( + "SetNetwork TrustAllCerts %s %s true" % (user, network) + ) # Don't judge me + commands["controlpanel"].append( + "AddServer %s %s %s +%s" % (user, network, host, port) + ) elif security == "plain": - commands["controlpanel"].append("AddServer %s %s %s %s" % (user, network, host, port)) + commands["controlpanel"].append( + "AddServer %s %s %s %s" % (user, network, host, port) + ) if not main.config["ConnectOnCreate"]: stage2commands["status"].append("Disconnect") if main.config["Toggles"]["CycleChans"]: diff --git a/modules/regproc.py b/modules/regproc.py index ce0e5a2..353c5e6 100644 --- a/modules/regproc.py +++ b/modules/regproc.py @@ -1,9 +1,11 @@ +from copy import deepcopy +from random import choice + import main from modules import provision -from utils.logging.log import * from utils.logging.debug import * -from copy import deepcopy -from random import choice +from utils.logging.log import * + def needToRegister(net): # Check if the network does not support authentication @@ -51,7 +53,7 @@ def substitute(net, num, token=None): nickname = alias["nick"] username = nickname + "/" + net password = main.network[net].aliases[num]["password"] - #inst["email"] = inst["email"].replace("{nickname}", nickname) + # inst["email"] = inst["email"].replace("{nickname}", nickname) for i in inst.keys(): if not isinstance(inst[i], str): continue @@ -112,8 +114,12 @@ def enableAuthentication(net, num): auth = obj.auth password = obj.aliases[num]["password"] uname = main.alias[num]["nick"] + "/" + net - provision.provisionAuthenticationData(num, nick, net, security, auth, password) # Set up for auth - main.IRCPool[net + str(num)].msg(main.config["Tweaks"]["ZNC"]["Prefix"] + "status", "Jump") + provision.provisionAuthenticationData( + num, nick, net, security, auth, password + ) # Set up for auth + main.IRCPool[net + str(num)].msg( + main.config["Tweaks"]["ZNC"]["Prefix"] + "status", "Jump" + ) if selectInst(net)["check"] == False: confirmRegistration(net, num) @@ -129,10 +135,14 @@ def registerTest(c): if not main.IRCPool[name]._negativePass == True: if c["type"] == "query" and c["nick"] == sinst["entity"]: if sinst["checknegativemsg"] in c["msg"]: - confirmRegistration(c["net"], c["num"], negativepass=False) # Not passed negative check, report back + confirmRegistration( + c["net"], c["num"], negativepass=False + ) # Not passed negative check, report back return if sinst["checkendnegative"] in c["msg"]: - confirmRegistration(c["net"], c["num"], negativepass=True) # Passed the negative check, report back + confirmRegistration( + c["net"], c["num"], negativepass=True + ) # Passed the negative check, report back return if sinst["ping"]: if sinst["checkmsg2"] in c["msg"] and c["nick"] == sinst["entity"]: diff --git a/modules/userinfo.py b/modules/userinfo.py index 1722cb3..94c0833 100644 --- a/modules/userinfo.py +++ b/modules/userinfo.py @@ -1,9 +1,10 @@ -from twisted.internet.threads import deferToThread from string import digits +from twisted.internet.threads import deferToThread + import main -from utils.logging.log import * from utils.logging.debug import debug, trace +from utils.logging.log import * from utils.parsing import parsen @@ -145,7 +146,9 @@ def delUser(name, channel, nick, user): p.srem(namespace, nick) if channels == {channel.encode()}: # can we only see them on this channel? p.delete(chanspace) # remove channel tracking entry - p.hdel("live.prefix." + name + "." + channel, nick) # remove prefix tracking entry + p.hdel( + "live.prefix." + name + "." + channel, nick + ) # remove prefix tracking entry p.hdel(mapspace, nick) # remove nick mapping entry if user: p.srem(gnamespace, user) # remove global userinfo entry @@ -170,7 +173,10 @@ def getUserByNick(name, nick): if main.r.hexists(mapspace, nick): return main.r.hget(mapspace, nick) else: - warn("Entry doesn't exist: %s on %s - attempting auxiliary lookup" % (nick, mapspace)) + warn( + "Entry doesn't exist: %s on %s - attempting auxiliary lookup" + % (nick, mapspace) + ) # return False # legacy code below - remove when map is reliable usermatch = main.r.sscan(gnamespace, match=escape(nick) + "!*", count=999999999) @@ -200,10 +206,18 @@ def renameUser(name, oldnick, olduser, newnick, newuser): p.sadd("live.who." + name + "." + i, newnick) p.hdel(mapspace, oldnick) p.hset(mapspace, newnick, newuser) - if main.r.exists("live.prefix." + name + "." + i): # if there's a prefix entry for the channel - if main.r.hexists("live.prefix." + name + "." + i, oldnick): # if the old nick is in it - mode = main.r.hget("live.prefix." + name + "." + i, oldnick) # retrieve old modes - p.hset("live.prefix." + name + "." + i, newnick, mode) # set old modes to new nickname + if main.r.exists( + "live.prefix." + name + "." + i + ): # if there's a prefix entry for the channel + if main.r.hexists( + "live.prefix." + name + "." + i, oldnick + ): # if the old nick is in it + mode = main.r.hget( + "live.prefix." + name + "." + i, oldnick + ) # retrieve old modes + p.hset( + "live.prefix." + name + "." + i, newnick, mode + ) # set old modes to new nickname if main.r.exists(chanspace): p.rename(chanspace, newchanspace) else: diff --git a/threshold b/threshold index dc186b4..b7c6f78 100755 --- a/threshold +++ b/threshold @@ -1,14 +1,14 @@ #!/usr/bin/env python -from twisted.internet import reactor -from twisted.internet.ssl import DefaultOpenSSLContextFactory import sys -from signal import signal, SIGINT - +from codecs import getwriter # fix printing odd shit to the terminal +from signal import SIGINT, signal # from twisted.python import log # from sys import stdout # log.startLogging(stdout) -from sys import stdout, stderr # Import again because we want to override -from codecs import getwriter # fix printing odd shit to the terminal +from sys import stderr, stdout # Import again because we want to override + +from twisted.internet import reactor +from twisted.internet.ssl import DefaultOpenSSLContextFactory stdout = getwriter("utf8")(stdout) # this is a generic fix but we all know stderr = getwriter("utf8")(stderr) # it's just for the retards on Rizon using @@ -23,11 +23,11 @@ if "--debug" in sys.argv: # yes really main.config["Debug"] = True if "--trace" in sys.argv: main.config["Trace"] = True -from utils.logging.log import * -from utils.loaders.command_loader import loadCommands -from core.server import Server, ServerFactory -from core.relay import Relay, RelayFactory import modules.counters +from core.relay import Relay, RelayFactory +from core.server import Server, ServerFactory +from utils.loaders.command_loader import loadCommands +from utils.logging.log import * loadCommands() import core.logstash @@ -46,14 +46,20 @@ if __name__ == "__main__": ), interface=main.config["Listener"]["Address"], ) - log("Threshold running with SSL on %s:%s" % (main.config["Listener"]["Address"], main.config["Listener"]["Port"])) + log( + "Threshold running with SSL on %s:%s" + % (main.config["Listener"]["Address"], main.config["Listener"]["Port"]) + ) else: reactor.listenTCP( main.config["Listener"]["Port"], listener, interface=main.config["Listener"]["Address"], ) - log("Threshold running on %s:%s" % (main.config["Listener"]["Address"], main.config["Listener"]["Port"])) + log( + "Threshold running on %s:%s" + % (main.config["Listener"]["Address"], main.config["Listener"]["Port"]) + ) if main.config["RelayAPI"]["Enabled"]: relay = RelayFactory() if main.config["RelayAPI"]["UseSSL"] == True: @@ -76,7 +82,10 @@ if __name__ == "__main__": relay, interface=main.config["RelayAPI"]["Address"], ) - log("Threshold relay running on %s:%s" % (main.config["RelayAPI"]["Address"], main.config["RelayAPI"]["Port"])) + log( + "Threshold relay running on %s:%s" + % (main.config["RelayAPI"]["Address"], main.config["RelayAPI"]["Port"]) + ) for net in main.network.keys(): main.network[net].start_bots() modules.counters.setupCounterLoop() diff --git a/utils/cleanup.py b/utils/cleanup.py index 83ed661..51eaa05 100644 --- a/utils/cleanup.py +++ b/utils/cleanup.py @@ -1,8 +1,10 @@ -import main +import sys + from twisted.internet import reactor + +import main from utils.logging.debug import debug from utils.logging.log import * -import sys def handler(sig, frame): diff --git a/utils/dedup.py b/utils/dedup.py index dc8d4c3..89e4bee 100644 --- a/utils/dedup.py +++ b/utils/dedup.py @@ -1,7 +1,9 @@ -from datetime import datetime -from csiphash import siphash24 from copy import deepcopy +from datetime import datetime from json import dumps + +from csiphash import siphash24 + import main from utils.logging.debug import debug @@ -10,16 +12,24 @@ def dedup(numName, b): c = deepcopy(b) if "ts" in c.keys(): del c["ts"] - c["approxtime"] = str(datetime.utcnow().timestamp())[: main.config["Tweaks"]["DedupPrecision"]] + c["approxtime"] = str(datetime.utcnow().timestamp())[ + : main.config["Tweaks"]["DedupPrecision"] + ] castHash = siphash24(main.hashKey, dumps(c, sort_keys=True).encode("utf-8")) del c["approxtime"] - isDuplicate = any(castHash in main.lastEvents[x] for x in main.lastEvents.keys() if not x == numName) + isDuplicate = any( + castHash in main.lastEvents[x] + for x in main.lastEvents.keys() + if not x == numName + ) if isDuplicate: debug("Duplicate: %s" % (c)) return True if numName in main.lastEvents.keys(): main.lastEvents[numName].insert(0, castHash) - main.lastEvents[numName] = main.lastEvents[numName][0 : main.config["Tweaks"]["MaxHash"]] + main.lastEvents[numName] = main.lastEvents[numName][ + 0 : main.config["Tweaks"]["MaxHash"] + ] else: main.lastEvents[numName] = [castHash] return False diff --git a/utils/loaders/command_loader.py b/utils/loaders/command_loader.py index 9c4095b..19517ec 100644 --- a/utils/loaders/command_loader.py +++ b/utils/loaders/command_loader.py @@ -1,10 +1,9 @@ from os import listdir -from utils.logging.debug import debug -from utils.logging.log import * import commands - from main import CommandMap +from utils.logging.debug import debug +from utils.logging.log import * def loadCommands(allowDup=False): @@ -15,11 +14,15 @@ def loadCommands(allowDup=False): try: module = __import__("commands.%s" % commandName) if not commandName in CommandMap: - CommandMap[commandName] = getattr(getattr(module, commandName), className) + CommandMap[commandName] = getattr( + getattr(module, commandName), className + ) debug("Registered command: %s" % commandName) else: if allowDup: - CommandMap[commandName] = getattr(getattr(module, commandName), className) + CommandMap[commandName] = getattr( + getattr(module, commandName), className + ) debug("Registered command: %s" % commandName) error("Duplicate command: %s" % (commandName)) diff --git a/utils/loaders/single_loader.py b/utils/loaders/single_loader.py index f5219ac..64b0618 100644 --- a/utils/loaders/single_loader.py +++ b/utils/loaders/single_loader.py @@ -1,12 +1,11 @@ -from os import listdir -from importlib import reload import sys +from importlib import reload +from os import listdir -from utils.logging.debug import debug -from utils.logging.log import * import commands - from main import CommandMap +from utils.logging.debug import debug +from utils.logging.log import * def loadSingle(commandName): @@ -15,7 +14,9 @@ def loadSingle(commandName): try: if commandName in CommandMap.keys(): reload(sys.modules["commands." + commandName]) - CommandMap[commandName] = getattr(sys.modules["commands." + commandName], className) + CommandMap[commandName] = getattr( + sys.modules["commands." + commandName], className + ) debug("Reloaded command: %s" % commandName) return "RELOAD" module = __import__("commands.%s" % commandName) diff --git a/utils/logging/debug.py b/utils/logging/debug.py index 80651f7..0c73174 100644 --- a/utils/logging/debug.py +++ b/utils/logging/debug.py @@ -1,5 +1,6 @@ import main + # we need a seperate module to log.py, as log.py is imported by main.py, and we need to access main # to read the setting def debug(*data):