Mercurial > irccd
annotate plugins/joke/joke.js @ 890:73cbd6760978 stable-3
misc: merge from release-3.0
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 01 Sep 2019 17:23:22 +0200 |
parents | a23b7b574ed2 |
children | 5e25439fe98d |
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 * |
824
06cc2f95f479
misc: happy new year!
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
4 * Copyright (c) 2013-2019 David Demelier <markand@malikania.fr> |
617
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 = { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
21 name: "joke", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
22 author: "David Demelier <markand@malikania.fr>", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
23 license: "ISC", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
24 summary: "display some jokes", |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
25 version: "@IRCCD_VERSION@" |
617
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 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 // Modules. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
29 var File = Irccd.File; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
30 var Logger = Irccd.Logger; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
31 var Plugin = Irccd.Plugin; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
32 var Util = Irccd.Util; |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 Plugin.config["max-list-lines"] = 5; |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
35 Plugin.templates["error"] = "#{nickname}: no jokes available"; |
617
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 /** |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 * Map of server/channel to list of jokes. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 * 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
|
41 * on the desired server/channel. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * 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
|
44 * the same joke over and over. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * It is implemented like this: |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * ```json |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 * { |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 * "channel1@server1": [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * "line 1 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * "line 2 of joke 1" |
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 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * "line 1 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * "line 2 of joke 2" |
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 * }, |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * "channel2@server2": [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * "line 1 of joke 1" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * "line 2 of joke 1" |
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 * [ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * "line 1 of joke 2" |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * "line 2 of joke 2" |
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 */ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 var table = {}; |
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 /** |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * Load the jokes for this server and channel. |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * 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
|
79 * |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * \param server the server object |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 * \param channel the channel string |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 * \return a ready to use array of jokes |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 * \throw Error if |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 */ |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 function load(server, channel) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
87 var path = Plugin.config.file |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
88 ? Plugin.config.file |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
89 : Plugin.paths.data + "/jokes.json"; |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
91 // Allow formatting to select different jokes per server/channel. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
92 path = Util.format(path, { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
93 server: server.toString(), |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
94 channel: channel |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
95 }); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
97 try { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
98 var file = new File(path, "r"); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
99 var data = JSON.parse(file.read()); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
100 } catch (e) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
101 throw Error(path + ": " + e.message); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
102 } |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
104 if (!data || !data.length) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
105 throw Error(path + ": no jokes found"); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
107 // Ensure that jokes only contain strings. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
108 var jokes = data.filter(function (joke) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
109 if (!joke || joke.length == 0 || joke.length > parseInt(Plugin.config["max-list-lines"])) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
110 return false; |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
111 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
112 for (var i = 0; i < joke.length; ++i) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
113 if (typeof (joke[i]) !== "string") |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
114 return false; |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
115 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
116 return true; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
117 }); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
119 if (!jokes || jokes.length === 0) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
120 throw Error(path + ": empty jokes"); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
122 return jokes; |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
125 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
126 * 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
|
127 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
128 * \return channel@server |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
129 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 function id(server, channel) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
132 return channel + "@" + server.toString(); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
135 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
136 * 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
|
137 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
138 * \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
|
139 * \param server the server object |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
140 * \param channel the channel string |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
141 * \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
|
142 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 function show(server, channel, joke) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
145 for (var l = 0; l < joke.length; ++l) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
146 server.message(channel, joke[l]); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 } |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
149 /** |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
150 * Remove the joke from the table. |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
151 * |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
152 * \param i the server/channel identifier |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
153 * \param index the joke index |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
154 */ |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 function remove(i, index) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
157 table[i].splice(index, 1); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
159 if (table[i].length == 0) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
160 delete table[i]; |
617
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 |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 function onCommand(server, origin, channel, message) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
165 var i = id(server, channel); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
167 if (!table[i]) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
168 Logger.debug("reloading for " + i); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
170 try { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
171 table[i] = load(server, channel); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
172 } catch (e) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
173 Logger.warning(e.message); |
847
a23b7b574ed2
irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
174 server.message(channel, Util.format(Plugin.templates.error, { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
175 server: server.toString(), |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
176 channel: channel, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
177 origin: origin, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
178 nickname: Util.splituser(origin) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
179 })); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
181 return; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
182 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
183 } |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
185 var index = Math.floor(Math.random() * table[i].length); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
187 show(server, channel, table[i][index]); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
188 remove(i, index); |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 } |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
190 |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
191 function onReload() |
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
192 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
193 // This will force reload of jokes on next onCommand. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
722
diff
changeset
|
194 table = {}; |
618
5afc0b3a9ad8
Plugin joke: brand new plugin, closes #609 @2h
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
195 } |