Mercurial > libervia-backend
diff src/plugins/plugin_xep_0045.py @ 926:d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
- registerTextCommands can be called by a plugin in its __init__ method, it looks for methods starting with "cmd_" and register them as new commands
- addWhoIsCb: add a callback to /whois command, the callback can complete whois informations
- plugins parrot, XEP-0045 and XEP-0092 now manage their own commands
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 24 Mar 2014 10:57:15 +0100 |
parents | 1a759096ccbd |
children | 73873e9b56f7 |
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0045.py Sun Mar 23 10:02:50 2014 +0100 +++ b/src/plugins/plugin_xep_0045.py Mon Mar 24 10:57:15 2014 +0100 @@ -43,6 +43,7 @@ "type": "XEP", "protocols": ["XEP-0045"], "dependencies": [], + "recommendations": [C.TEXT_CMDS], "main": "XEP_0045", "handler": "yes", "description": _("""Implementation of Multi-User Chat""") @@ -74,6 +75,10 @@ host.bridge.addSignal("roomUserChangedNick", ".plugin", signature='ssss') # args: room_jid, old_nick, new_nick, profile host.bridge.addSignal("roomNewSubject", ".plugin", signature='sss') # args: room_jid, subject, profile self.__submit_conf_id = host.registerCallback(self._submitConfiguration, with_data=True) + try: + self.host.plugins[C.TEXT_CMDS].registerTextCommands(self) + except KeyError: + info(_("Text commands not available")) def __check_profile(self, profile): """check if profile is used and connected @@ -348,6 +353,85 @@ self.clients[profile] = SatMUCClient(self) return self.clients[profile] + # Text commands # + + def cmd_nick(self, mess_data, profile): + """change nickname""" + debug("Catched nick command") + + if mess_data['type'] != "groupchat": + #/nick command does nothing if we are not on a group chat + info("Ignoring /nick command on a non groupchat message") + + return True + + nick = mess_data["unparsed"].strip() + room = mess_data["to"] + + self.nick(room, nick, profile) + + return False + + def cmd_join(self, mess_data, profile): + """join a new room (on the same service if full jid is not specified)""" + debug("Catched join command") + + if mess_data['type'] != "groupchat": + #/leave command does nothing if we are not on a group chat + info("Ignoring /join command on a non groupchat message") + return True + + if mess_data["unparsed"].strip(): + room = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) + nick = (self.getRoomNick(mess_data["to"].userhost(), profile) or + self.host.getClient(profile).jid.user) + self.join(room, nick, {}, profile) + + return False + + def cmd_leave(self, mess_data, profile): + """quit a room""" + debug("Catched leave command") + + if mess_data['type'] != "groupchat": + #/leave command does nothing if we are not on a group chat + info("Ignoring /leave command on a non groupchat message") + return True + + if mess_data["unparsed"].strip(): + room = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) + else: + room = mess_data["to"] + + self.leave(room, profile) + + return False + + def cmd_part(self, mess_data, profile): + """just a synonym of /leave""" + return self.cmd_leave(mess_data, profile) + + def cmd_title(self, mess_data, profile): + """change room's subject""" + debug("Catched title command") + + if mess_data['type'] != "groupchat": + #/leave command does nothing if we are not on a group chat + info("Ignoring /title command on a non groupchat message") + return True + + subject = mess_data["unparsed"].strip() + + if subject: + room = mess_data["to"] + self.subject(room, subject, profile) + + return False + + def cmd_topic(self, mess_data, profile): + """just a synonym of /title""" + return self.cmd_title(mess_data, profile) + class SatMUCClient (muc.MUCClient): #implements(iwokkel.IDisco)