Mercurial > irccd
annotate plugins/plugin/plugin.js @ 1201:67fa43998a91 default tip @
misc: update copyright years
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 04 Jan 2024 10:39:43 +0100 |
parents | 1845a0509a93 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * plugin.js -- plugin inspector | |
3 * | |
1201
67fa43998a91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
1183
diff
changeset
|
4 * Copyright (c) 2013-2024 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 = { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
21 author: "David Demelier <markand@malikania.fr>", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
22 license: "ISC", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
23 summary: "A plugin to inspect plugins", |
1149
d0e522ff5143
plugins: substitute version, closes #2533
David Demelier <markand@malikania.fr>
parents:
1136
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 |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
31 Plugin.templates = { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
32 "usage": "#{nickname}, usage: #{command} list | info plugin", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
33 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
34 "not-found": "#{nickname}, plugin #{name} does not exist.", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
35 "too-long": "#{nickname}, plugin list too long, ask in query for more details." |
0 | 36 } |
37 | |
420
f1414576ceaa
Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents:
397
diff
changeset
|
38 Plugin.config = { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
39 "max-list-lines": 3, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
40 "max-list-columns": 80 |
420
f1414576ceaa
Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents:
397
diff
changeset
|
41 } |
f1414576ceaa
Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents:
397
diff
changeset
|
42 |
0 | 43 var commands = { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
44 keywords: function (server, channel, origin) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
45 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
46 return { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
47 channel: channel, |
995
0d71bfa6c97a
tests: add plugin tests
David Demelier <markand@malikania.fr>
parents:
913
diff
changeset
|
48 command: server.info().prefix + Plugin.info().name, |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
49 nickname: Util.splituser(origin), |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
50 origin: origin, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
51 plugin: Plugin.info().name, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
52 server: server.toString() |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
53 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
54 }, |
397
da240b179e8b
Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
55 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
56 list: function (server, origin, target, query) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
57 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
58 var kw = commands.keywords(server, target, origin); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
59 var plugins = Plugin.list(); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
60 var lines = [ "" ]; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
61 var maxl = parseInt(Plugin.config["max-list-lines"]); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
62 var maxc = parseInt(Plugin.config["max-list-columns"]); |
397
da240b179e8b
Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
63 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
64 if (isNaN(maxc)) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
65 maxc = 80; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
66 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
67 if (isNaN(maxl)) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
68 maxl = 3; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
69 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
70 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
71 for (var p = 0; p < plugins.length; ++p) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
72 var l = lines.length - 1; |
0 | 73 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
74 if (plugins[p].length + 1 + lines[l].length > maxc) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
75 lines.push(""); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
76 l++; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
77 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
78 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
79 lines[l] += plugins[p] + " "; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
80 } |
420
f1414576ceaa
Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents:
397
diff
changeset
|
81 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
82 if (!query && maxl > 0 && lines.length > maxl) { |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
83 server.message(target, Util.format(Plugin.templates["too-long"], kw)); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
84 } else { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
85 for (var i = 0; i < lines.length; ++i) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
86 server.message(target, lines[i]); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
87 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
88 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
89 }, |
420
f1414576ceaa
Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents:
397
diff
changeset
|
90 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
91 info: function (server, origin, target, name) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
92 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
93 var kw = commands.keywords(server, target, origin); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
94 var info = Plugin.info(name); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
95 var str; |
0 | 96 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
97 kw.name = name; |
0 | 98 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
99 if (info) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
100 kw.author = info.author; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
101 kw.license = info.license; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
102 kw.summary = info.summary; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
103 kw.version = info.version; |
0 | 104 |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
105 str = Util.format(Plugin.templates["info"], kw); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
106 } else |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
107 str = Util.format(Plugin.templates["not-found"], kw); |
397
da240b179e8b
Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
108 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
109 server.message(target, str); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
110 }, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
111 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
112 usage: function (server, origin, target) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
113 { |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
114 server.message(target, Util.format(Plugin.templates["usage"], commands.keywords(server, target, origin))); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
115 }, |
397
da240b179e8b
Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
116 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
117 execute: function (server, origin, target, message, query) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
118 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
119 if (message.length === 0) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
120 commands.usage(server, origin, target); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
121 return; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
122 } |
0 | 123 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
124 var list = message.split(" "); |
0 | 125 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
126 switch (list[0]) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
127 case "info": |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
128 if (list.length === 2) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
129 commands.info(server, origin, target, list[1]); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
130 else |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
131 commands.usage(server, origin, target); |
0 | 132 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
133 break; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
134 case "list": |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
135 commands.list(server, origin, target, query); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
136 break; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
137 default: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
138 commands.usage(server, origin, target); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
139 break; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
140 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
141 } |
0 | 142 }; |
143 | |
144 function onCommand(server, origin, channel, message) | |
145 { | |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
146 commands.execute(server, origin, channel, message, false) |
0 | 147 } |
148 | |
149 function onQueryCommand(server, origin, message) | |
150 { | |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
151 commands.execute(server, origin, origin, message, true) |
0 | 152 } |