Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_misc_text_commands.py @ 4118:07370d2a9bde
plugin XEP-0167: keep media order when starting a call:
media content order is relevant when building Jingle contents/SDP notably for bundling.
This patch fixes the previous behaviour of always using the same order by keeping the
order of the data (i.e. order of original SDP offer). Previous behaviour could lead to
call failure.
rel 424
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 03 Oct 2023 15:15:24 +0200 |
parents | 4b842c1fb686 |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
506
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 |
3479 | 5 # Copyright (C) 2009-2021 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 |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
20 from twisted.words.protocols.jabber import jid |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
21 from twisted.internet import defer |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
22 from twisted.python import failure |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
23 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
24 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
25 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
26 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
27 from libervia.backend.tools import utils |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
28 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
29 |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
30 log = getLogger(__name__) |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
33 C.PI_NAME: "Text commands", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
34 C.PI_IMPORT_NAME: C.TEXT_CMDS, |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
35 C.PI_TYPE: "Misc", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
36 C.PI_PROTOCOLS: ["XEP-0245"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
37 C.PI_DEPENDENCIES: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
38 C.PI_MAIN: "TextCommands", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
39 C.PI_HANDLER: "no", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
40 C.PI_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
|
41 } |
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
43 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
44 class InvalidCommandSyntax(Exception): |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
45 """Throwed while parsing @command in docstring if syntax is invalid""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
46 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
47 pass |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
48 |
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 CMD_KEY = "@command" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
51 CMD_TYPES = ("group", "one2one", "all") |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
52 FEEDBACK_INFO_TYPE = "TEXT_CMD" |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
53 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
54 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
55 class TextCommands(object): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
56 # FIXME: doc strings for commands have to be translatable |
517
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
57 # plugins need a dynamic translation system (translation |
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
58 # 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
|
59 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
60 HELP_SUGGESTION = _( |
3028 | 61 "Type '/help' to get a list of the available commands. If you didn't want to " |
62 "use a command, please start your message with '//' to escape the slash." | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 ) |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
64 |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
66 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
|
67 self.host = host |
2128 | 68 # this is internal command, so we set high priority |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
69 host.trigger.add("sendMessage", self.send_message_trigger, priority=1000000) |
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
|
70 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
|
71 self._whois = [] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
72 self.register_text_commands(self) |
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
|
73 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
74 def _parse_doc_string(self, cmd, cmd_name): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
75 """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
|
76 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
77 @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
|
78 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
|
79 - first line is the command short documentation, shown with /help |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
80 - @command keyword can be used, |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
81 see http://wiki.goffi.org/wiki/Coding_style/en for documentation |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
82 @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
|
83 - "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
|
84 - "type" (default "all"): the command type as specified in documentation |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
85 - "args" (default: ""): the arguments available, using syntax specified in |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
86 documentation. |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
87 - "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
|
88 """ |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
89 data = { |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
90 "doc_short_help": "", |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
91 "type": "all", |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
92 "args": "", |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
93 } |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
94 docstring = cmd.__doc__ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
95 if docstring is None: |
3028 | 96 log.warning("No docstring found for command {}".format(cmd_name)) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
97 docstring = "" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
98 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
99 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
|
100 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
|
101 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
102 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
103 cmd_indent = 0 # >0 when @command is found are we are parsing it |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
104 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
105 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
|
106 stripped = line.strip() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
107 if cmd_indent and line[cmd_indent : cmd_indent + 5] == " -": |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
108 colon_idx = line.find(":") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
109 if colon_idx == -1: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
110 raise InvalidCommandSyntax( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
111 "No colon found in argument description" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
112 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
113 arg_name = line[cmd_indent + 6 : colon_idx].strip() |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
114 if not arg_name: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
115 raise InvalidCommandSyntax( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
116 "No name found in argument description" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
117 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
118 arg_help = line[colon_idx + 1 :].strip() |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
119 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
|
120 elif cmd_indent: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
121 # 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
|
122 break |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
123 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
|
124 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
|
125 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
126 # type |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
127 colon_idx = stripped.find(":") |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
128 if colon_idx == -1: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
129 raise InvalidCommandSyntax("missing colon") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
130 type_data = stripped[len(CMD_KEY) : colon_idx].strip() |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
131 if len(type_data) == 0: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
132 type_data = "(all)" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
133 elif ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
134 len(type_data) <= 2 or type_data[0] != "(" or type_data[-1] != ")" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
135 ): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
136 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
|
137 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
|
138 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
|
139 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
|
140 data["type"] = type_ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
141 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
142 # args |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
143 data["args"] = stripped[colon_idx + 1 :].strip() |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
144 except InvalidCommandSyntax as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
145 log.warning( |
3028 | 146 "Invalid command syntax for command {command}: {message}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
147 command=cmd_name, message=e.message |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
148 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
149 ) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
150 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
151 return data |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
152 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
153 def register_text_commands(self, instance): |
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
|
154 """ 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
|
155 |
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 @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
|
157 """ |
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 for attr in dir(instance): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
159 if attr.startswith("cmd_"): |
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 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
|
161 if not callable(cmd): |
3028 | 162 log.warning(_("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
|
163 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
|
164 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
|
165 if not cmd_name: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
166 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
|
167 if cmd_name in self._commands: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
168 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
|
169 while (cmd_name + str(suff)) in self._commands: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
170 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
|
171 new_name = cmd_name + str(suff) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
172 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
173 _( |
3028 | 174 "Conflict for command [{old_name}], renaming it to [{new_name}]" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
175 ).format(old_name=cmd_name, new_name=new_name) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
176 ) |
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
|
177 cmd_name = new_name |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
178 self._commands[cmd_name] = cmd_data = {"callback": cmd} |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
179 cmd_data.update(self._parse_doc_string(cmd, cmd_name)) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
180 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
|
181 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
182 def add_who_is_cb(self, callback, priority=0): |
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
|
183 """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
|
184 |
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
|
185 @param callback: a callback which will be called with the following arguments |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
186 - whois_msg: list of information strings to display, callback need to append |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
187 its own strings to it |
1199 | 188 - 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
|
189 - profile: %(doc_profile)s |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
190 @param priority: priority of the information to show (the highest priority will |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
191 be displayed first) |
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
|
192 """ |
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
|
193 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
|
194 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
|
195 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
196 def send_message_trigger( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
197 self, client, mess_data, pre_xml_treatments, post_xml_treatments |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
198 ): |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
199 """Install SendMessage command hook """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
200 pre_xml_treatments.addCallback(self._send_message_cmd_hook, client) |
921 | 201 return True |
202 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
203 def _send_message_cmd_hook(self, mess_data, client): |
921 | 204 """ 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
|
205 |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
206 msg starting with / are potential command. If a command is found, it is executed, |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
207 else an help message is sent. |
921 | 208 msg starting with // are escaped: they are sent with a single / |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
209 commands can abord message sending (if they return anything evaluating to False), |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
210 or continue it (if they return True), eventually after modifying the message |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
211 an "unparsed" key is added to message, containing part of the message not yet |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
212 parsed. |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
213 Commands can be deferred or not |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2128
diff
changeset
|
214 @param mess_data(dict): data comming from sendMessage trigger |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
215 @param profile: %(doc_profile)s |
921 | 216 """ |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
217 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
218 msg = mess_data["message"][""] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
219 msg_lang = "" |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
220 except KeyError: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
221 try: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
222 # we have not default message, we try to take the first found |
3028 | 223 msg_lang, msg = next(iter(mess_data["message"].items())) |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
224 except StopIteration: |
3028 | 225 log.debug("No message found, skipping text commands") |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
226 return mess_data |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
227 |
921 | 228 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
229 if msg[:2] == "//": |
921 | 230 # 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
|
231 mess_data["message"][msg_lang] = msg[1:] |
921 | 232 return mess_data |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
233 if msg[0] != "/": |
921 | 234 return mess_data |
235 except IndexError: | |
236 return mess_data | |
237 | |
238 # we have a command | |
239 d = None | |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
240 command = msg[1:].partition(" ")[0].lower().strip() |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
241 if not command.isidentifier(): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
242 self.feed_back( |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
243 client, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
244 _("Invalid command /%s. ") % command + self.HELP_SUGGESTION, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
245 mess_data, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
246 ) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
247 raise failure.Failure(exceptions.CancelError()) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
248 |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
249 # looks like an actual command, we try to call the corresponding method |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
250 def ret_handling(ret): |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
251 """ Handle command return value: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
252 if ret is True, normally send message (possibly modified by command) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
253 else, abord message sending |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
254 """ |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
255 if ret: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
256 return mess_data |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
257 else: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
258 log.debug("text command detected ({})".format(command)) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
259 raise failure.Failure(exceptions.CancelError()) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
260 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
261 def generic_errback(failure): |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
262 try: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
263 msg = "with condition {}".format(failure.value.condition) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
264 except AttributeError: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
265 msg = "with error {}".format(failure.value) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
266 self.feed_back(client, "Command failed {}".format(msg), mess_data) |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
267 return False |
921 | 268 |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
269 mess_data["unparsed"] = msg[ |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
270 1 + len(command) : |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
271 ] # part not yet parsed of the message |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
272 try: |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
273 cmd_data = self._commands[command] |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
274 except KeyError: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
275 self.feed_back( |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
276 client, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
277 _("Unknown command /%s. ") % command + self.HELP_SUGGESTION, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
278 mess_data, |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
279 ) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
280 log.debug("text command help message") |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
281 raise failure.Failure(exceptions.CancelError()) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
282 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
283 if not self._context_valid(mess_data, cmd_data): |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
284 # The command is not launched in the right context, we throw a message with help instructions |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
285 context_txt = ( |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
286 _("group discussions") |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
287 if cmd_data["type"] == "group" |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
288 else _("one to one discussions") |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
289 ) |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
290 feedback = _("/{command} command only applies in {context}.").format( |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
291 command=command, context=context_txt |
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
292 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
293 self.feed_back( |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
294 client, "{} {}".format(feedback, self.HELP_SUGGESTION), mess_data |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
295 ) |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
296 log.debug("text command invalid message") |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1025
diff
changeset
|
297 raise failure.Failure(exceptions.CancelError()) |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
298 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
299 d = utils.as_deferred(cmd_data["callback"], client, mess_data) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
300 d.addErrback(generic_errback) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
301 d.addCallback(ret_handling) |
921 | 302 |
3216
8418e0c83ed7
plugin text commands: handles coroutines + better command parsing:
Goffi <goffi@goffi.org>
parents:
3156
diff
changeset
|
303 return d |
506
2e43c74815ad
plugin text commands: Text commands is a new plugin that bring IRC-like commands
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
304 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
305 def _context_valid(self, mess_data, cmd_data): |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
306 """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
|
307 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2128
diff
changeset
|
308 @param mess_data(dict): message data as given in sendMessage trigger |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
309 @param cmd_data(dict): command data as returned by self._parse_doc_string |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
310 @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
|
311 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
312 if (cmd_data["type"] == "group" and mess_data["type"] != "groupchat") or ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
313 cmd_data["type"] == "one2one" and mess_data["type"] == "groupchat" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
314 ): |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
315 return False |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
316 return True |
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
317 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
318 def get_room_jid(self, arg, service_jid): |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
319 """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
|
320 |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
321 @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
|
322 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
|
323 @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
|
324 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
325 nb_arobas = arg.count("@") |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
326 if nb_arobas == 1: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
327 if arg[-1] != "@": |
508
7c6609dddb2c
plugin text commands: /leave management:
Goffi <goffi@goffi.org>
parents:
506
diff
changeset
|
328 return jid.JID(arg) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
329 return jid.JID(arg + service_jid) |
3544
ae5f63e5ed2c
plugin XEP-0045: fix `/join` text command
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
330 return jid.JID(f"{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
|
331 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
332 def feed_back(self, client, message, mess_data, info_type=FEEDBACK_INFO_TYPE): |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
333 """Give a message back to the user""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
334 if mess_data["type"] == "groupchat": |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
335 to_ = mess_data["to"].userhostJID() |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
336 else: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
337 to_ = client.jid |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
338 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
339 # we need to invert send message back, so sender need to original destinee |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
340 mess_data["from"] = mess_data["to"] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
341 mess_data["to"] = to_ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
342 mess_data["type"] = C.MESS_TYPE_INFO |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
343 mess_data["message"] = {"": message} |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
344 mess_data["extra"]["info_type"] = info_type |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
345 client.message_send_to_bridge(mess_data) |
523
24c0d51449e7
plugin text commands: added _feedback method to send an answer to user
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
346 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
347 def cmd_whois(self, client, mess_data): |
1372
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
348 """show informations on entity |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
349 |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
350 @command: [JID|ROOM_NICK] |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
351 - JID: entity to request |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
352 - ROOM_NICK: nick of the room to request |
85caf0a3abb3
plugin text commands: minor docstrings improvments
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
353 """ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
354 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
|
355 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
356 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
|
357 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
358 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
|
359 room = mess_data["to"].userhostJID() |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
360 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
361 if self.host.plugins["XEP-0045"].is_nick_in_room(client, room, entity): |
3028 | 362 entity = "%s/%s" % (room, entity) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
927
diff
changeset
|
363 except KeyError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
929
diff
changeset
|
364 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
|
365 |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
366 if not entity: |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
367 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
|
368 else: |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
369 try: |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
370 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
|
371 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
|
372 raise jid.InvalidFormat |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
373 except (RuntimeError, jid.InvalidFormat, AttributeError): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
374 self.feed_back(client, _("Invalid jid, can't whois"), mess_data) |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
375 return False |
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
376 |
921 | 377 if not target_jid.resource: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
378 target_jid.resource = self.host.memory.main_resource_get(client, target_jid) |
921 | 379 |
3028 | 380 whois_msg = [_("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
|
381 |
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
|
382 d = defer.succeed(None) |
3156
0318802dfe28
core (memory/disco): fixed checkFeature return Failure:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
383 for __, callback in self._whois: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
384 d.addCallback( |
3156
0318802dfe28
core (memory/disco): fixed checkFeature return Failure:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
385 lambda __: callback(client, whois_msg, mess_data, target_jid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
386 ) |
921 | 387 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
388 def feed_back(__): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
389 self.feed_back(client, "\n".join(whois_msg), mess_data) |
921 | 390 return False |
391 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
392 d.addCallback(feed_back) |
921 | 393 return d |
600
c5451501465b
plugin text commands: basic /whois command (just show jid so far)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
394 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
395 def _get_args_help(self, cmd_data): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
396 """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
|
397 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
398 @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
|
399 @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
|
400 """ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
401 strings = [] |
3028 | 402 for doc_name, doc_help in cmd_data.items(): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
403 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
|
404 arg_name = doc_name[8:] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
405 strings.append( |
3028 | 406 "- {name}: {doc_help}".format(name=arg_name, doc_help=_(doc_help)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
407 ) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
408 |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
409 return strings |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
410 |
2055
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
411 def cmd_me(self, client, mess_data): |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
412 """display a message at third person |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
413 |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
414 @command (all): message |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
415 - message: message to show at third person |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
416 e.g.: "/me clenches his fist" will give "[YOUR_NICK] clenches his fist" |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
417 """ |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
418 # We just ignore the command as the match is done on receiption by clients |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
419 return True |
ed33cd382bf9
plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
420 |
2111
98672e35d2f5
plugin text commands: added /whoami command which return current full jid
Goffi <goffi@goffi.org>
parents:
2055
diff
changeset
|
421 def cmd_whoami(self, client, mess_data): |
98672e35d2f5
plugin text commands: added /whoami command which return current full jid
Goffi <goffi@goffi.org>
parents:
2055
diff
changeset
|
422 """give your own jid""" |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
423 self.feed_back(client, client.jid.full(), mess_data) |
2111
98672e35d2f5
plugin text commands: added /whoami command which return current full jid
Goffi <goffi@goffi.org>
parents:
2055
diff
changeset
|
424 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
425 def cmd_help(self, client, mess_data): |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
426 """show help on available commands |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
427 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
428 @command: [cmd_name] |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
429 - 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
|
430 """ |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
431 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
|
432 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
|
433 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
|
434 if cmd_name and cmd_name not in self._commands: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
435 self.feed_back( |
3028 | 436 client, _("Invalid command name [{}]\n".format(cmd_name)), mess_data |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
437 ) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
438 cmd_name = "" |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
439 if not cmd_name: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
440 # 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
|
441 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
|
442 help_cmds = [] |
517
59b32c04e105
plugin text commands: added /help command
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
443 |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
444 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
|
445 cmd_data = self._commands[command] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
446 if not self._context_valid(mess_data, cmd_data): |
1370
53c7678c27a6
plugin text commands: added _contextValid method:
Goffi <goffi@goffi.org>
parents:
1369
diff
changeset
|
447 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
448 spaces = (longuest - len(command)) * " " |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
449 help_cmds.append( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
450 " /{command}: {spaces} {short_help}".format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
451 command=command, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
452 spaces=spaces, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
453 short_help=cmd_data["doc_short_help"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
454 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
455 ) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
456 |
3028 | 457 help_mess = _("Text commands available:\n%s") % ("\n".join(help_cmds),) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
458 else: |
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
459 # 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
|
460 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
|
461 syntax = cmd_data["args"] |
3028 | 462 help_mess = _("/{name}: {short_help}\n{syntax}{args_help}").format( |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
463 name=cmd_name, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
464 short_help=cmd_data["doc_short_help"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
465 syntax=_(" " * 4 + "syntax: {}\n").format(syntax) if syntax else "", |
3028 | 466 args_help="\n".join( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
467 [" " * 8 + "{}".format(line) for line in self._get_args_help(cmd_data)] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
468 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
469 ) |
1369
dd1a148bd3d8
plugin text commands: docstring parsing for commands, and better /help command:
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
470 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3544
diff
changeset
|
471 self.feed_back(client, help_mess, mess_data) |