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