Mercurial > irccd
annotate plugins/joke/joke.js @ 618:5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
The new joke plugin offers a convenient registry of jokes that are displayed in
a random and unique order.
It keeps track of displayed jokes per channel/server pairs.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 19 Dec 2017 22:02:12 +0100 |
parents | 241583937af0 |
children | 27587ff92a64 |
rev | line source |
---|---|
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * joke.js -- display some jokes |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 // Plugin information. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 info = { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 author: "David Demelier <markand@malikania.fr>", |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 license: "ISC", |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 summary: "display some jokes", |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 version: "@IRCCD_VERSION@" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 }; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 // Modules. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 var File = Irccd.File; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 var Logger = Irccd.Logger; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 var Plugin = Irccd.Plugin; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 var Util = Irccd.Util; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 Plugin.config["max-list-lines"] = 5; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 Plugin.format["error"] = "#{nickname}: no jokes available"; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 /** |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 * Map of server/channel to list of jokes. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 * Jokes consists of array of array of strings, they are printed line-per-line |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 * on the desired server/channel. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * This registry keeps track of jokes that were already printed to avoid sending |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * the same joke over and over. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * It is implemented like this: |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * ```json |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 * "channel1@server1": [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * "line 1 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * "line 2 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * ], |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 * "line 1 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * "line 2 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * ] |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * }, |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * "channel2@server2": [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * "line 1 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * "line 2 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * ], |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * "line 1 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * "line 2 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * ] |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * }, |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * }; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 * ``` |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 */ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 var table = {}; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 /** |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * Load the jokes for this server and channel. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * Jokes that are to big to fit into the max-list-lines parameter are discarded. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 * \param server the server object |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * \param channel the channel string |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 * \return a ready to use array of jokes |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 * \throw Error if |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 */ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 function load(server, channel) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 var path = Plugin.config.file |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 ? Plugin.config.file |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 : Plugin.paths.data + "/jokes.json"; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 // Allow formatting to select different jokes per server/channel. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 path = Util.format(path, { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 server: server.toString(), |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 channel: channel |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 }); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 try { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 var file = new File(path, "r"); |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
98 var data = JSON.parse(file.read()); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } catch (e) { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 throw Error(path + ": " + e.message); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 if (!data || !data.length) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 throw Error(path + ": no jokes found"); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
106 // Ensure that jokes only contain strings. |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 var jokes = data.filter(function (joke) { |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
108 if (!joke || joke.length == 0 || joke.length > parseInt(Plugin.config["max-list-lines"])) |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
109 return false; |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
110 |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
111 for (var i = 0; i < joke.length; ++i) |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
112 if (typeof (joke[i]) !== "string") |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
113 return false; |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
114 |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
115 return true; |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 }); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
118 if (!jokes || jokes.length === 0) |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 throw Error(path + ": empty jokes"); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 return jokes; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
124 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
125 * Convert a pair server/channel into a unique identifier. |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
126 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
127 * \return channel@server |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
128 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 function id(server, channel) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 return channel + "@" + server.toString(); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
134 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
135 * Show the joke in the specified channel. |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
136 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
137 * \warning this function does not check for max-list-lines parameter |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
138 * \param server the server object |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
139 * \param channel the channel string |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
140 * \param joke the joke array (array of strings) |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
141 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 function show(server, channel, joke) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 for (var l = 0; l < joke.length; ++l) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 server.message(channel, joke[l]); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
148 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
149 * Remove the joke from the table. |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
150 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
151 * \param i the server/channel identifier |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
152 * \param index the joke index |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
153 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 function remove(i, index) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 table[i].splice(index, 1); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 if (table[i].length == 0) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 delete table[i]; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 function onCommand(server, origin, channel, message) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 var i = id(server, channel); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 if (!table[i]) { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 Logger.debug("reloading for " + i); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 try { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 table[i] = load(server, channel); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 } catch (e) { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 Logger.warning(e.message); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 server.message(channel, Util.format(Plugin.format.error, { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 server: server.toString(), |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 channel: channel, |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 origin: origin, |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 nickname: Util.splituser(origin) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 })); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 return; |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 var index = Math.floor(Math.random() * table[i].length); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 show(server, channel, table[i][index]); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 remove(i, index); |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 } |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
189 |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
190 function onReload() |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
191 { |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
192 // This will force reload of jokes on next onCommand. |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
193 table = {}; |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
194 } |