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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }