From fe1fefecc0ed0aa34281741f17226d0afb315bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9munaire?= Date: Tue, 14 Aug 2012 05:55:48 +0200 Subject: [PATCH] Add a module that extend prompt command with server feature (connect, join, ..) --- modules/cmd_server.py | 163 +++++++++++++++++++++++++++++++++++++++++ modules/cmd_server.xml | 12 +++ 2 files changed, 175 insertions(+) create mode 100644 modules/cmd_server.py create mode 100644 modules/cmd_server.xml diff --git a/modules/cmd_server.py b/modules/cmd_server.py new file mode 100644 index 0000000..6609240 --- /dev/null +++ b/modules/cmd_server.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- + +# Nemubot is a modulable IRC bot, built around XML configuration files. +# Copyright (C) 2012 Mercier Pierre-Olivier +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +nemubotversion = 3.2 +NODATA = True + +def close(data, toks, context, prompt): + """Disconnect and forget (remove from the servers list) the server""" + if len(toks) > 1: + for s in toks[1:]: + if s in servers: + context.servers[s].disconnect() + del context.servers[s] + else: + print ("close: server `%s' not found." % s) + elif prompt.selectedServer is not None: + prompt.selectedServer.disconnect() + del prompt.servers[selectedServer.id] + prompt.selectedServer = None + return + +def connect(data, toks, context, prompt): + """Make the connexion to a server""" + if len(toks) > 1: + for s in toks[1:]: + if s in context.servers: + context.servers[s].launch(context) + else: + print ("connect: server `%s' not found." % s) + + elif prompt.selectedServer is not None: + prompt.selectedServer.launch(context) + else: + print (" Please SELECT a server or give its name in argument.") + +def disconnect(data, toks, context, prompt): + """Close the connection to a server""" + if len(toks) > 1: + for s in toks[1:]: + if s in context.servers: + if not context.servers[s].disconnect(): + print ("disconnect: server `%s' already disconnected." % s) + else: + print ("disconnect: server `%s' not found." % s) + elif prompt.selectedServer is not None: + if not prompt.selectedServer.disconnect(): + print ("disconnect: server `%s' already disconnected." + % prompt.selectedServer.id) + else: + print (" Please SELECT a server or give its name in argument.") + +def hotswap(data, toks, context, prompt): + """Reload a server class""" + if len(toks) > 1: + print ("hotswap: apply only on selected server") + elif prompt.selectedServer is not None: + del context.servers[prompt.selectedServer.id] + srv = server.Server(selectedServer.node, selectedServer.nick, + selectedServer.owner, selectedServer.realname, + selectedServer.s) + context.servers[srv.id] = srv + prompt.selectedServer.kill() + prompt.selectedServer = srv + prompt.selectedServer.start() + else: + print (" Please SELECT a server or give its name in argument.") + +def join(data, toks, context, prompt): + """Join or leave a channel""" + rd = 1 + if len(toks) <= rd: + print ("%s: not enough arguments." % toks[0]) + return + + if toks[rd] in context.servers: + srv = context.servers[toks[rd]] + rd += 1 + elif prompt.selectedServer is not None: + srv = prompt.selectedServer + else: + print (" Please SELECT a server or give its name in argument.") + return + + if len(toks) <= rd: + print ("%s: not enough arguments." % toks[0]) + return + + if toks[0] == "join": + if len(toks) > rd + 1: + srv.join(toks[rd], toks[rd + 1]) + else: + srv.join(toks[rd]) + elif toks[0] == "leave" or toks[0] == "part": + srv.leave(toks[rd]) + return + +def send(data, toks, context, prompt): + """Send a message on a channel""" + rd = 1 + if len(toks) <= rd: + print ("send: not enough arguments.") + return + + if toks[rd] in context.servers: + srv = context.servers[toks[rd]] + rd += 1 + elif prompt.selectedServer is not None: + srv = prompt.selectedServer + else: + print (" Please SELECT a server or give its name in argument.") + return + + if len(toks) <= rd: + print ("send: not enough arguments.") + return + + #Check the server is connected + if not srv.connected: + print ("send: server `%s' not connected." % srv.id) + return + + if toks[rd] in srv.channels: + chan = toks[rd] + rd += 1 + else: + print ("send: channel `%s' not authorized in server `%s'." + % (toks[rd], srv.id)) + return + + if len(toks) <= rd: + print ("send: not enough arguments.") + return + + srv.send_msg_final(chan, toks[rd]) + return "done" + +def zap(data, toks, context, prompt): + """Hard change connexion state""" + if len(toks) > 1: + for s in toks[1:]: + if s in context.servers: + context.servers[s].connected = not context.servers[s].connected + else: + print ("zap: server `%s' not found." % s) + elif prompt.selectedServer is not None: + prompt.selectedServer.connected = not prompt.selectedServer.connected + else: + print (" Please SELECT a server or give its name in argument.") diff --git a/modules/cmd_server.xml b/modules/cmd_server.xml new file mode 100644 index 0000000..62c16de --- /dev/null +++ b/modules/cmd_server.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + +