Mercurial > irccd
annotate plugins/plugin/plugin.js @ 394:c6fbb6e0e06d
Happy new year!
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 01 Jan 2017 15:29:41 +0100 |
parents | 6635b9187d71 |
children | da240b179e8b |
rev | line source |
---|---|
0 | 1 /* |
2 * plugin.js -- plugin inspector | |
3 * | |
394 | 4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
0 | 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 | |
145
410f71eb9237
Plugin plugin: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
64
diff
changeset
|
19 // Plugin information. |
0 | 20 info = { |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
21 author: "David Demelier <markand@malikania.fr>", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
22 license: "ISC", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
23 summary: "A plugin to inspect plugins", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
24 version: "@IRCCD_VERSION@" |
0 | 25 }; |
26 | |
166
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
27 // Modules. |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
28 var Util = Irccd.Util; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
29 var Plugin = Irccd.Plugin; |
2380d476f987
Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
30 |
145
410f71eb9237
Plugin plugin: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
64
diff
changeset
|
31 Plugin.format = { |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
32 "usage": "#{nickname}, usage: #{command} list | info plugin", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
33 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
34 "not-found": "#{nickname}, plugin #{name} does not exist.", |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
35 "too-long": "#{nickname}, plugin list too long, ask in query for more details." |
0 | 36 } |
37 | |
38 var commands = { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
39 loadFormats: function () |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
40 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
41 // --- DEPRECATED ----------------------------------- |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
42 // |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
43 // This code will be removed. |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
44 // |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
45 // Since: 2.1.0 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
46 // Until: 3.0.0 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
47 // Reason: new [format] section replaces it. |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
48 // |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
49 // -------------------------------------------------- |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
50 for (var key in Plugin.format) { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
51 var optname = "format-" + key; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
52 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
53 if (typeof (Plugin.config[optname]) !== "string") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
54 continue; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
55 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
56 if (Plugin.config[optname].length === 0) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
57 Logger.warning("skipping empty '" + optname + "' format"); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
58 else |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
59 Plugin.format[key] = Plugin.config[optname]; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
60 } |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
61 }, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
62 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
63 keywords: function (server, channel, origin) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
64 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
65 return { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
66 channel: channel, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
67 command: server.info().commandChar + Plugin.info().name, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
68 nickname: Util.splituser(origin), |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
69 origin: origin, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
70 plugin: Plugin.info().name, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
71 server: server.toString() |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
72 } |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
73 }, |
0 | 74 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
75 list: function (server, origin, target, query) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
76 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
77 var kw = commands.keywords(server, target, origin); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
78 var list = Plugin.list(); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
79 var str; |
0 | 80 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
81 if (!query && list.length >= 16) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
82 str = Util.format(Plugin.format["too-long"], kw); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
83 else |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
84 str = list.join(" "); |
0 | 85 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
86 server.message(target, str); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
87 }, |
0 | 88 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
89 info: function (server, origin, target, name) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
90 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
91 var kw = commands.keywords(server, target, origin); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
92 var info = Plugin.info(name); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
93 var str; |
0 | 94 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
95 kw.name = name; |
0 | 96 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
97 if (info) { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
98 kw.author = info.author; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
99 kw.license = info.license; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
100 kw.summary = info.summary; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
101 kw.version = info.version; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
102 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
103 str = Util.format(Plugin.format["info"], kw); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
104 } else |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
105 str = Util.format(Plugin.format["not-found"], kw); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
106 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
107 server.message(target, str); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
108 }, |
0 | 109 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
110 usage: function (server, origin, target) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
111 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
112 server.message(target, Util.format(Plugin.format["usage"], commands.keywords(server, target, origin))); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
113 }, |
0 | 114 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
115 execute: function (server, origin, target, message, query) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
116 { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
117 if (message.length === 0) { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
118 commands.usage(server, origin, target); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
119 return; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
120 } |
0 | 121 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
122 var list = message.split(" "); |
0 | 123 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
124 switch (list[0]) { |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
125 case "info": |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
126 if (list.length === 2) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
127 commands.info(server, origin, target, list[1]); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
128 else |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
129 commands.usage(server, origin, target); |
0 | 130 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
131 break; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
132 case "list": |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
133 commands.list(server, origin, target, query); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
134 break; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
135 default: |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
136 commands.usage(server, origin, target); |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
137 break; |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
138 } |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
139 } |
0 | 140 }; |
141 | |
142 function onCommand(server, origin, channel, message) | |
143 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
144 commands.execute(server, origin, channel, message, false) |
0 | 145 } |
146 | |
147 function onLoad() | |
148 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
149 commands.loadFormats(); |
0 | 150 } |
151 | |
152 function onQueryCommand(server, origin, message) | |
153 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
154 commands.execute(server, origin, origin, message, true) |
0 | 155 } |
156 | |
157 function onReload() | |
158 { | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
166
diff
changeset
|
159 commands.loadFormats(); |
0 | 160 } |