Mercurial > libervia-backend
annotate src/plugins/plugin_misc_text_commands.py @ 1955:633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
/!\ database schema has been modified, do a backup before updating
message have been refactored, here are the main changes:
- languages are now handled
- all messages have an uid (internal to SàT)
- message updating is anticipated
- subject is now first class
- new naming scheme is used newMessage => messageNew, getHistory => historyGet, sendMessage => messageSend
- minimal compatibility refactoring in quick_frontend/Primitivus, better refactoring should follow
- threads handling
- delayed messages are saved into history
- info messages may also be saved in history (e.g. to keep track of people joining/leaving a room)
- duplicate messages should be avoided
- historyGet return messages in right order, no need to sort again
- plugins have been updated to follow new features, some of them need to be reworked (e.g. OTR)
- XEP-0203 (Delayed Delivery) is now fully handled in core, the plugin just handle disco and creation of a delay element
- /!\ jp and Libervia are currently broken, as some features of Primitivus
It has been put in one huge commit to avoid breaking messaging between changes.
This is the main part of message refactoring, other commits will follow to take profit of the new features/behaviour.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 24 May 2016 22:11:04 +0200 |
parents | 2daf7b4c6756 |
children | a2bc5089c2eb |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1889
diff
changeset
|
1 #!/usr/bin/env python2 |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
4 # SàT plugin for managing text commands |
1766 | 5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
10 # (at your option) any later version. |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
15 # GNU Affero General Public License for more details. |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
600
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
21 from sat.core.constants import Const as C |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
22 from sat.core import exceptions |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
23 from twisted.words.protocols.jabber import jid |
921 | 24 from twisted.internet import defer |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
25 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
26 log = getLogger(__name__) |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
27 from twisted.python import failure |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
28 from collections import OrderedDict |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 |
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 PLUGIN_INFO = { |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
31 "name": "Text commands", |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
32 "import_name": C.TEXT_CMDS, |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
33 "type": "Misc", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
34 "protocols": [], |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
35 "dependencies": [], |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
36 "main": "TextCommands", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
37 "handler": "no", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
38 "description": _("""IRC like text commands""") |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 } |
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
41 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
42 class InvalidCommandSyntax(Exception): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
43 """Throwed while parsing @command in docstring if syntax is invalid""" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
44 pass |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
45 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
46 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
47 CMD_KEY = "@command" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
48 CMD_TYPES = ('group', 'one2one', 'all') |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
49 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
50 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
51 class TextCommands(object): |
517
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
52 #FIXME: doc strings for commands have to be translatable |
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
53 # plugins need a dynamic translation system (translation |
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
54 # should be downloadable independently) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
56 HELP_SUGGESTION = _("Type '/help' to get a list of the available commands. If you didn't want to use a command, please start your message with '//' to escape the slash.") |
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
57 |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
59 log.info(_("Text commands initialization")) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 self.host = host |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
61 host.trigger.add("messageSend", self.messageSendTrigger) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
62 self._commands = {} |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
63 self._whois = [] |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
64 self.registerTextCommands(self) |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
65 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
66 def _parseDocString(self, cmd, cmd_name): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
67 """Parse a docstring to get text command data |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
68 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
69 @param cmd: function or method callback for the command, |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
70 its docstring will be used for self documentation in the following way: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
71 - first line is the command short documentation, shown with /help |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
72 - @command keyword can be used, see http://wiki.goffi.org/wiki/Coding_style/en for documentation |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
73 @return (dict): dictionary with parsed data where key can be: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
74 - "doc_short_help" (default: ""): the untranslated short documentation |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
75 - "type" (default "all"): the command type as specified in documentation |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
76 - "args" (default: ""): the arguments available, using syntax specified in documentation. |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
77 - "doc_arg_[name]": the doc of [name] argument |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
78 """ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
79 data = OrderedDict([('doc_short_help', ""), |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
80 ('type', 'all'), |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
81 ('args', '')]) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
82 docstring = cmd.__doc__ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
83 if docstring is None: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
84 log.warning(u"Not docstring found for command {}".format(cmd_name)) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
85 docstring = "" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
86 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
87 doc_data = docstring.split("\n") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
88 data["doc_short_help"] = doc_data[0] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
89 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
90 try: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
91 cmd_indent = 0 # >0 when @command is found are we are parsing it |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
92 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
93 for line in doc_data: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
94 stripped = line.strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
95 if cmd_indent and line[cmd_indent:cmd_indent+5] == " -": |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
96 colon_idx = line.find(":") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
97 if colon_idx == -1: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
98 raise InvalidCommandSyntax("No colon found in argument description") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
99 arg_name = line[cmd_indent+6:colon_idx].strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
100 if not arg_name: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
101 raise InvalidCommandSyntax("No name found in argument description") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
102 arg_help = line[colon_idx+1:].strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
103 data["doc_arg_{}".format(arg_name)] = arg_help |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
104 elif cmd_indent: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
105 # we are parsing command and indent level is not good, it's finished |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
106 break |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
107 elif stripped.startswith(CMD_KEY): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
108 cmd_indent = line.find(CMD_KEY) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
109 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
110 # type |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
111 colon_idx = stripped.find(":") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
112 if colon_idx == -1: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
113 raise InvalidCommandSyntax("missing colon") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
114 type_data = stripped[len(CMD_KEY):colon_idx].strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
115 if len(type_data) == 0: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
116 type_data="(all)" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
117 elif len(type_data) <= 2 or type_data[0] != '(' or type_data[-1] != ')': |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
118 raise InvalidCommandSyntax("Bad type data syntax") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
119 type_ = type_data[1:-1] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
120 if type_ not in CMD_TYPES: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
121 raise InvalidCommandSyntax("Unknown type {}".format(type_)) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
122 data["type"] = type_ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
123 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
124 #args |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
125 data["args"] = stripped[colon_idx+1:].strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
126 except InvalidCommandSyntax as e: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
127 log.warning(u"Invalid command syntax for command {command}: {message}".format(command=cmd_name, message=e.message)) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
128 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
129 return data |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
130 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
131 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
132 def registerTextCommands(self, instance): |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
133 """ Add a text command |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
134 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
135 @param instance: instance of a class containing text commands |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
136 """ |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
137 for attr in dir(instance): |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
138 if attr.startswith('cmd_'): |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
139 cmd = getattr(instance, attr) |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
140 if not callable(cmd): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
141 log.warning(_(u"Skipping not callable [%s] attribute") % attr) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
142 continue |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
143 cmd_name = attr[4:] |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
144 if not cmd_name: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
145 log.warning(_("Skipping cmd_ method")) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
146 if cmd_name in self._commands: |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
147 suff=2 |
927
cd150dd947e3
plugin text-commands: fixed name conflicts management + plugin parrot: removed now done TODO
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
148 while (cmd_name + str(suff)) in self._commands: |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
149 suff+=1 |
927
cd150dd947e3
plugin text-commands: fixed name conflicts management + plugin parrot: removed now done TODO
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
150 new_name = cmd_name + str(suff) |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
151 log.warning(_(u"Conflict for command [%(old_name)s], renaming it to [%(new_name)s]") % {'old_name': cmd_name, 'new_name': new_name}) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
152 cmd_name = new_name |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
153 self._commands[cmd_name] = cmd_data = OrderedDict({'callback':cmd}) # We use an Ordered dict to keep documenation order |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
154 cmd_data.update(self._parseDocString(cmd, cmd_name)) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
155 log.info(_("Registered text command [%s]") % cmd_name) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
156 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
157 def addWhoIsCb(self, callback, priority=0): |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
158 """Add a callback which give information to the /whois command |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
159 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
160 @param callback: a callback which will be called with the following arguments |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
161 - whois_msg: list of information strings to display, callback need to append its own strings to it |
1199 | 162 - target_jid: full jid from whom we want information |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
163 - profile: %(doc_profile)s |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
164 @param priority: priority of the information to show (the highest priority will be displayed first) |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
165 """ |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
166 self._whois.append((priority, callback)) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
167 self._whois.sort(key=lambda item: item[0], reverse=True) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
169 def messageSendTrigger(self, client, mess_data, pre_xml_treatments, post_xml_treatments): |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
170 """Install SendMessage command hook """ |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
171 pre_xml_treatments.addCallback(self._messageSendCmdHook, client) |
921 | 172 return True |
173 | |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
174 def _messageSendCmdHook(self, mess_data, client): |
921 | 175 """ Check text commands in message, and react consequently |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
176 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
177 msg starting with / are potential command. If a command is found, it is executed, else and help message is sent |
921 | 178 msg starting with // are escaped: they are sent with a single / |
179 commands can abord message sending (if they return anything evaluating to False), or continue it (if they return True), eventually after modifying the message | |
180 an "unparsed" key is added to message, containing part of the message not yet parsed | |
181 commands can be deferred or not | |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
182 @param mess_data(dict): data comming from messageSend trigger |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
183 @param profile: %(doc_profile)s |
921 | 184 """ |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
185 profile = client.profile |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
186 try: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
187 msg = mess_data["message"][''] |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
188 msg_lang = '' |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
189 except KeyError: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
190 try: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
191 # we have not default message, we try to take the first found |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
192 msg_lang, msg = mess_data["message"].iteritems().next() |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
193 except StopIteration: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
194 log.debug(u"No message found, skipping text commands") |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
195 return mess_data |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
196 |
921 | 197 try: |
198 if msg[:2] == '//': | |
199 # we have a double '/', it's the escape sequence | |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
200 mess_data["message"][msg_lang] = msg[1:] |
921 | 201 return mess_data |
202 if msg[0] != '/': | |
203 return mess_data | |
204 except IndexError: | |
205 return mess_data | |
206 | |
207 # we have a command | |
208 d = None | |
209 command = msg[1:].partition(' ')[0].lower() | |
210 if command.isalpha(): | |
211 # looks like an actual command, we try to call the corresponding method | |
212 def retHandling(ret): | |
213 """ Handle command return value: | |
214 if ret is True, normally send message (possibly modified by command) | |
215 else, abord message sending | |
216 """ | |
217 if ret: | |
218 return mess_data | |
219 else: | |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
220 log.debug("text commands took over") |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
221 raise failure.Failure(exceptions.CancelError()) |
921 | 222 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1052
diff
changeset
|
223 def genericErrback(failure): |
1889
be61c5c5e474
plugin text commands: fixed log in genericErrback which was raising an exception when something than StanzaError was received
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
224 try: |
be61c5c5e474
plugin text commands: fixed log in genericErrback which was raising an exception when something than StanzaError was received
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
225 msg = u"with condition {}".format(failure.value.condition) |
be61c5c5e474
plugin text commands: fixed log in genericErrback which was raising an exception when something than StanzaError was received
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
226 except AttributeError: |
be61c5c5e474
plugin text commands: fixed log in genericErrback which was raising an exception when something than StanzaError was received
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
227 msg = u"with error {}".format(failure.value) |
be61c5c5e474
plugin text commands: fixed log in genericErrback which was raising an exception when something than StanzaError was received
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
228 self.feedBack(u"Command failed {}".format(msg), mess_data, profile) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1052
diff
changeset
|
229 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1052
diff
changeset
|
230 |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
231 mess_data["unparsed"] = msg[1 + len(command):] # part not yet parsed of the message |
921 | 232 try: |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
233 cmd_data = self._commands[command] |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
234 except KeyError: |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
235 self.feedBack(_("Unknown command /%s. ") % command + self.HELP_SUGGESTION, mess_data, profile) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1052
diff
changeset
|
236 log.debug("text commands took over") |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
237 raise failure.Failure(exceptions.CancelError()) |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
238 else: |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
239 if not self._contextValid(mess_data, cmd_data): |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
240 # The command is not launched in the right context, we throw a message with help instructions |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
241 context_txt = _("group discussions") if cmd_data["type"] == "group" else _("one to one discussions") |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
242 feedback = _("/{command} command only applies in {context}.").format(command=command, context=context_txt) |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
243 self.feedBack(u"{} {}".format(feedback, self.HELP_SUGGESTION), mess_data, profile) |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
244 log.debug("text commands took over") |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
245 raise failure.Failure(exceptions.CancelError()) |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
246 else: |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
247 d = defer.maybeDeferred(cmd_data["callback"], mess_data, profile) |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
248 d.addErrback(genericErrback) |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
249 d.addCallback(retHandling) |
921 | 250 |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
251 return d or mess_data # if a command is detected, we should have a deferred, else we send the message normally |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
253 def _contextValid(self, mess_data, cmd_data): |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
254 """Tell if a command can be used in the given context |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
255 |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
256 @param mess_data(dict): message data as given in messageSend trigger |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
257 @param cmd_data(dict): command data as returned by self._parseDocString |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
258 @return (bool): True if command can be used in this context |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
259 """ |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
260 if ((cmd_data['type'] == "group" and mess_data["type"] != "groupchat") or |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
261 (cmd_data['type'] == 'one2one' and mess_data["type"] == "groupchat")): |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
262 return False |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
263 return True |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
264 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
265 def getRoomJID(self, arg, service_jid): |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
266 """Return a room jid with a shortcut |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
267 |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
268 @param arg: argument: can be a full room jid (e.g.: sat@chat.jabberfr.org) |
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
269 or a shortcut (e.g.: sat or sat@ for sat on current service) |
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
270 @param service_jid: jid of the current service (e.g.: chat.jabberfr.org) |
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
271 """ |
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
272 nb_arobas = arg.count('@') |
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
273 if nb_arobas == 1: |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
274 if arg[-1] != '@': |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
275 return jid.JID(arg) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
276 return jid.JID(arg + service_jid) |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
277 return jid.JID(u"%s@%s" % (arg, service_jid)) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
279 def feedBack(self, message, mess_data, profile): |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
280 """Give a message back to the user""" |
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
281 if mess_data["type"] == 'groupchat': |
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
282 _from = mess_data["to"].userhostJID() |
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
283 else: |
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
284 _from = self.host.getJidNStream(profile)[0] |
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
285 |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
286 self.host.bridge.messageNew(unicode(mess_data["to"]), {'': message}, {}, C.MESS_TYPE_INFO, unicode(_from), {}, profile=profile) |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
287 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
288 def cmd_whois(self, mess_data, profile): |
1372
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
289 """show informations on entity |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
290 |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
291 @command: [JID|ROOM_NICK] |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
292 - JID: entity to request |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
293 - ROOM_NICK: nick of the room to request |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
294 """ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
295 log.debug("Catched whois command") |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
296 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
297 entity = mess_data["unparsed"].strip() |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
298 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
299 if mess_data['type'] == "groupchat": |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
300 room = mess_data["to"].userhostJID() |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
301 try: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
302 if self.host.plugins["XEP-0045"].isNickInRoom(room, entity, profile): |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
303 entity = u"%s/%s" % (room, entity) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
304 except KeyError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
305 log.warning("plugin XEP-0045 is not present") |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
306 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
307 if not entity: |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
308 target_jid = mess_data["to"] |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
309 else: |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
310 try: |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
311 target_jid = jid.JID(entity) |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
312 if not target_jid.user or not target_jid.host: |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
313 raise jid.InvalidFormat |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
314 except (RuntimeError, jid.InvalidFormat, AttributeError): |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
315 self.feedBack(_("Invalid jid, can't whois"), mess_data, profile) |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
316 return False |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
317 |
921 | 318 if not target_jid.resource: |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1199
diff
changeset
|
319 target_jid.resource = self.host.memory.getMainResource(target_jid, profile) |
921 | 320 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
321 whois_msg = [_(u"whois for %(jid)s") % {'jid': target_jid}] |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
322 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
323 d = defer.succeed(None) |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
324 for ignore, callback in self._whois: |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
325 d.addCallback(lambda ignore: callback(whois_msg, mess_data, target_jid, profile)) |
921 | 326 |
327 def feedBack(ignore): | |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
328 self.feedBack(u"\n".join(whois_msg), mess_data, profile) |
921 | 329 return False |
330 | |
331 d.addCallback(feedBack) | |
332 return d | |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
333 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
334 def _getArgsHelp(self, cmd_data): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
335 """Return help string for args of cmd_name, according to docstring data |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
336 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
337 @param cmd_data: command data |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
338 @return (list[unicode]): help strings |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
339 """ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
340 strings = [] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
341 for doc_name, doc_help in cmd_data.iteritems(): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
342 if doc_name.startswith("doc_arg_"): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
343 arg_name = doc_name[8:] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
344 strings.append(u"- {name}: {doc_help}".format(name=arg_name, doc_help=_(doc_help))) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
345 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
346 return strings |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
347 |
517
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
348 def cmd_help(self, mess_data, profile): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
349 """show help on available commands |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
350 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
351 @command: [cmd_name] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
352 - cmd_name: name of the command for detailed help |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
353 """ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
354 cmd_name = mess_data["unparsed"].strip() |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
355 if cmd_name and cmd_name[0] == "/": |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
356 cmd_name = cmd_name[1:] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
357 if cmd_name and cmd_name not in self._commands: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
358 self.feedBack(_(u"Invalid command name [{}]\n".format(cmd_name)), mess_data, profile) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
359 cmd_name = "" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
360 if not cmd_name: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
361 # we show the global help |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
362 longuest = max([len(command) for command in self._commands]) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
363 help_cmds = [] |
517
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
364 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
365 for command in sorted(self._commands): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
366 cmd_data = self._commands[command] |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
367 if not self._contextValid(mess_data, cmd_data): |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
368 continue |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
369 spaces = (longuest - len(command)) * ' ' |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
370 help_cmds.append(" /{command}: {spaces} {short_help}".format( |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
371 command=command, |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
372 spaces=spaces, |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
373 short_help=cmd_data["doc_short_help"] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
374 )) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
375 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
376 help_mess = _(u"Text commands available:\n%s") % (u'\n'.join(help_cmds), ) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
377 else: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
378 # we show detailled help for a command |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
379 cmd_data = self._commands[cmd_name] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
380 syntax = cmd_data["args"] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
381 help_mess = _(u"/{name}: {short_help}\n{syntax}{args_help}").format( |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
382 name=cmd_name, |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
383 short_help=cmd_data['doc_short_help'], |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
384 syntax=_(" "*4+"syntax: {}\n").format(syntax) if syntax else "", |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
385 args_help=u'\n'.join([u" "*8+"{}".format(line) for line in self._getArgsHelp(cmd_data)])) |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
386 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
387 self.feedBack(help_mess, mess_data, profile) |
1025
24fe24cfb363
plugin text commands: added /me command to avoid the need to escape the /
Goffi <goffi@goffi.org>
parents:
1002
diff
changeset
|
388 |
24fe24cfb363
plugin text commands: added /me command to avoid the need to escape the /
Goffi <goffi@goffi.org>
parents:
1002
diff
changeset
|
389 def cmd_me(self, mess_data, profile): |
1372
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
390 """Display a message at third person |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
391 |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
392 @command: message |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
393 - message: message to display at the third person |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
394 """ |
1025
24fe24cfb363
plugin text commands: added /me command to avoid the need to escape the /
Goffi <goffi@goffi.org>
parents:
1002
diff
changeset
|
395 # We just catch the method and continue it as the frontends should manage /me display |
24fe24cfb363
plugin text commands: added /me command to avoid the need to escape the /
Goffi <goffi@goffi.org>
parents:
1002
diff
changeset
|
396 return True |