Mercurial > irccd
annotate plugins/plugin/plugin.js @ 64:5a42be98e9a8 release-2.0
Fix #430: invalid info in plugin
- Fix invalid conditional in Irccd.Plugin.info (js-plugin.cpp) which always
returns the current plugin information,
- Add usage warning when running `!plugin` with no arguments.
Task: #430
Errata: 20160307
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 07 Mar 2016 19:08:11 +0100 |
parents | 798093d4c176 |
children | 410f71eb9237 |
rev | line source |
---|---|
0 | 1 /* |
2 * plugin.js -- plugin inspector | |
3 * | |
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 var Util = Irccd.Util; | |
20 var Plugin = Irccd.Plugin; | |
21 | |
22 /* Plugin information */ | |
23 info = { | |
24 author: "David Demelier <markand@malikania.fr>", | |
25 license: "ISC", | |
26 summary: "A plugin to inspect plugins", | |
27 version: "@IRCCD_VERSION@" | |
28 }; | |
29 | |
30 var formats = { | |
31 "usage": "#{nickname}, usage: #{command} list | info plugin", | |
32 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).", | |
33 "not-found": "#{nickname}, plugin #{name} does not exist.", | |
34 "too-long": "#{nickname}, plugin list too long, ask in query for more details." | |
35 } | |
36 | |
37 var commands = { | |
38 loadFormats: function () | |
39 { | |
40 for (var key in formats) { | |
41 var optname = "format-" + key; | |
42 | |
43 if (typeof (Plugin.config[optname]) !== "string") | |
44 continue; | |
45 | |
46 if (Plugin.config[optname].length === 0) | |
47 Logger.warning("skipping empty '" + optname + "' format"); | |
48 else | |
49 formats[key] = Plugin.config[optname]; | |
50 } | |
51 }, | |
52 | |
47
798093d4c176
Plugin plugin: add missing channel keyword and document plugin, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
53 keywords: function (server, channel, origin) |
0 | 54 { |
55 return { | |
47
798093d4c176
Plugin plugin: add missing channel keyword and document plugin, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
56 channel: channel, |
0 | 57 command: server.info().commandChar + Plugin.info().name, |
58 nickname: Util.splituser(origin), | |
59 origin: origin, | |
60 plugin: Plugin.info().name, | |
61 server: server.toString() | |
62 } | |
63 }, | |
64 | |
65 list: function (server, origin, target, query) | |
66 { | |
47
798093d4c176
Plugin plugin: add missing channel keyword and document plugin, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
67 var kw = commands.keywords(server, target, origin); |
0 | 68 var list = Plugin.list(); |
69 var str; | |
70 | |
71 if (!query && list.length >= 16) | |
72 str = Util.format(formats["too-long"], kw); | |
73 else | |
74 str = list.join(" "); | |
75 | |
76 server.message(target, str); | |
77 }, | |
78 | |
79 info: function (server, origin, target, name) | |
80 { | |
47
798093d4c176
Plugin plugin: add missing channel keyword and document plugin, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
81 var kw = commands.keywords(server, target, origin); |
0 | 82 var info = Plugin.info(name); |
83 var str; | |
84 | |
85 kw.name = name; | |
86 | |
87 if (info) { | |
88 kw.author = info.author; | |
89 kw.license = info.license; | |
90 kw.summary = info.summary; | |
91 kw.version = info.version; | |
92 | |
93 str = Util.format(formats["info"], kw); | |
94 } else { | |
95 str = Util.format(formats["not-found"], kw); | |
96 } | |
97 | |
98 server.message(target, str); | |
99 }, | |
100 | |
101 usage: function (server, origin, target) | |
102 { | |
64
5a42be98e9a8
Fix #430: invalid info in plugin
David Demelier <markand@malikania.fr>
parents:
47
diff
changeset
|
103 server.message(target, Util.format(formats["usage"], commands.keywords(server, target, origin))); |
0 | 104 }, |
105 | |
106 execute: function (server, origin, target, message, query) | |
107 { | |
108 if (message.length === 0) { | |
109 commands.usage(server, origin, target); | |
110 return; | |
111 } | |
112 | |
113 var list = message.split(" "); | |
114 | |
115 switch (list[0]) { | |
116 case "info": | |
117 if (list.length === 2) | |
118 commands.info(server, origin, target, list[1]); | |
119 else | |
120 commands.usage(server, origin, target); | |
121 | |
122 break; | |
123 case "list": | |
124 commands.list(server, origin, target, query); | |
125 break; | |
126 default: | |
64
5a42be98e9a8
Fix #430: invalid info in plugin
David Demelier <markand@malikania.fr>
parents:
47
diff
changeset
|
127 commands.usage(server, origin, target); |
0 | 128 break; |
129 } | |
130 } | |
131 }; | |
132 | |
133 function onCommand(server, origin, channel, message) | |
134 { | |
135 commands.execute(server, origin, channel, message, false) | |
136 } | |
137 | |
138 function onLoad() | |
139 { | |
140 commands.loadFormats(); | |
141 } | |
142 | |
143 function onQueryCommand(server, origin, message) | |
144 { | |
145 commands.execute(server, origin, origin, message, true) | |
146 } | |
147 | |
148 function onReload() | |
149 { | |
150 commands.loadFormats(); | |
151 } |