Mercurial > irccd
annotate plugins/plugin/plugin.js @ 47:798093d4c176
Plugin plugin: add missing channel keyword and document plugin, #392
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 29 Feb 2016 13:13:33 +0100 |
parents | 1158cffe5a5e |
children | 5a42be98e9a8 |
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 { | |
103 server.message(target, Util.format(formats["usage"], commands.keywords(server, origin))); | |
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: | |
127 break; | |
128 } | |
129 } | |
130 }; | |
131 | |
132 function onCommand(server, origin, channel, message) | |
133 { | |
134 commands.execute(server, origin, channel, message, false) | |
135 } | |
136 | |
137 function onLoad() | |
138 { | |
139 commands.loadFormats(); | |
140 } | |
141 | |
142 function onQueryCommand(server, origin, message) | |
143 { | |
144 commands.execute(server, origin, origin, message, true) | |
145 } | |
146 | |
147 function onReload() | |
148 { | |
149 commands.loadFormats(); | |
150 } |