rj1
about | log | files | refs | license
commit d90001a7ca8e767929daea126e4549e03cc2c595
parent 8b0a42a16d74fdeee5da1e4c92c49dcc73bca801
author: rj1 <[email protected]>
date:   Fri, 27 May 2022 12:45:24 -0500

add/delete relays via *status

Diffstat:
Mrelay.py | 88++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 81 insertions(+), 7 deletions(-)

diff --git a/relay.py b/relay.py @@ -5,16 +5,90 @@ class relay(znc.Module): description = "oneway relay" module_types = [znc.CModInfo.UserModule] + def OnLoad(self, args, message): + self.relays = {} + message.s = "loading relay module" + return True + + def OnModCommand(self, command): + command = str(command) + if command == "help": + self.PutModule("commands:") + self.PutModule("help - show this help message") + self.PutModule("add - add a relay - e.g. add <sourcechannel> <targetnetwork> <targetchannel>") + return self.PutModule("list - list all relays") + + if command.startswith("add"): + return self._addRelay(command) + + if command.startswith("del"): + return self._delRelay(command) + + if command == "list": + if not self.relays: + return self.PutModule("no relays are configured, please configure one") + + for i,relay in self.relays.items(): + self.PutModule(f"[{i}] {relay['sourceChan']} -> {relay['targetNet']}.{relay['targetChan']}") + return + + return self.PutModule("unknown command, type help") + def OnChanMsg(self, nick, channel, message): - self._sendMsg(nick, channel, f"<{nick}> {message}") + for relay in self.relays.values(): + if str(channel.GetName()).lower() == relay['sourceChan'].lower(): + network = self.GetUser().FindNetwork(relay['targetNet']) + formattedMsg = f"<{nick}> {message}" + network.PutIRC(f"PRIVMSG {relay['targetChan']} :{formattedMsg}") return znc.CONTINUE def OnChanAction(self, nick, channel, message): - self._sendMsg(nick, channel, f"*{nick} {message}") + for relay in self.relays.values(): + if str(channel.GetName()).lower() == relay['sourceChan'].lower(): + network = self.GetUser().FindNetwork(relay['targetNet']) + formattedMsg = f"*{nick} {message}" + network.PutIRC(f"PRIVMSG {relay['targetChan']} :{formattedMsg}") return znc.CONTINUE - def _sendMsg(self, network, channel, message): - if str(channel.GetName()).lower() == channel: - network = self.GetUser().FindNetwork(network) - network.PutIRC(f"PRIVMSG {channel} :{message}") - return znc.CONTINUE + def _addRelay(self, cmd): + parts = cmd.split() + if len(parts) < 4: + self.PutModule("usage: add <sourcechannel> <targetnetwork> <targetchannel>") + return self.PutModule("e.g. add #znc privatenetwork #znc-relay") + + if not parts[1].startswith("#") or not parts[3].startswith("#"): + return self.PutModule("irc channels must start with #") + + for relay in self.relays.values(): + if relay['sourceChan'] == parts[1]: + return self.PutModule("relay already exists") + + relay = { + 'sourceChan': parts[1], + 'targetNet': parts[2], + 'targetChan': parts[3] + } + + self.relays[len(self.relays)] = relay + # self.nv['relays'] = self.relays + return self.PutModule(f"relay for {relay['sourceChan']} added!") + + def _delRelay(self, cmd): + # delete relay + parts = cmd.split() + if len(parts) < 2: + self.PutModule("usage: del <relayid>") + return self.PutModule("e.g. del 0") + + try: + relayId = int(parts[1]) + except ValueError: + return self.PutModule("relay id must be an integer") + + if relayId not in self.relays: + return self.PutModule("relay id not found") + + del self.relays[relayId] + # self.nv['relays'] = self.relays + return self.PutModule("relay deleted") +