annotate plugins/hangman/hangman.js @ 1004:3ea3361f0fc7

irccd: now track modes
author David Demelier <markand@malikania.fr>
date Tue, 16 Feb 2021 18:37:22 +0100
parents 0d71bfa6c97a
children 637a98de3910
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * hangman.js -- hangman game for IRC
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
913
5e25439fe98d misc: update years
David Demelier <markand@malikania.fr>
parents: 847
diff changeset
4 * Copyright (c) 2013-2020 David Demelier <markand@malikania.fr>
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
154
f554d1314208 Plugin hangman: fix formats and invalid number of tries
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
19 // Plugin information.
f554d1314208 Plugin hangman: fix formats and invalid number of tries
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
20 info = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
21 name: "hangman",
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: "A hangman game for IRC",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
25 version: "@IRCCD_VERSION@"
154
f554d1314208 Plugin hangman: fix formats and invalid number of tries
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
26 };
f554d1314208 Plugin hangman: fix formats and invalid number of tries
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
27
141
2ce88e3a4759 Plugin hangman: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
28 // Modules.
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 var Logger = Irccd.Logger;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 var File = Irccd.File;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 var Plugin = Irccd.Plugin;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 var Server = Irccd.Server;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 var Unicode = Irccd.Unicode
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 var Util = Irccd.Util;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
141
2ce88e3a4759 Plugin hangman: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
36 // Default options.
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 Plugin.config["collaborative"] = "true";
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
141
2ce88e3a4759 Plugin hangman: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
39 // Formats.
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
40 Plugin.templates = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
41 "asked": "#{nickname}, '#{letter}' was already asked.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
42 "dead": "#{nickname}, fail the word was: #{word}.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
43 "found": "#{nickname}, nice! the word is now #{word}",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
44 "running": "#{nickname}, the game is already running and the word is: #{word}",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
45 "start": "#{nickname}, the game is started, the word to find is: #{word}",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
46 "win": "#{nickname}, congratulations, the word is #{word}.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
47 "wrong-word": "#{nickname}, this is not the word.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
48 "wrong-player": "#{nickname}, please wait until someone else proposes.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
49 "wrong-letter": "#{nickname}, there is no '#{letter}'."
141
2ce88e3a4759 Plugin hangman: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
50 };
2ce88e3a4759 Plugin hangman: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
51
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 function Hangman(server, channel)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
54 this.server = server;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
55 this.channel = channel;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
56 this.tries = 10;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
57 this.select();
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 * Map of games.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 Hangman.map = {};
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 /**
456
c81b38ec7bd2 Fix #644: fix word list and selection
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
66 * List of words.
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 */
456
c81b38ec7bd2 Fix #644: fix word list and selection
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
68 Hangman.words = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
69 all: [], //!< All words,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
70 registry: {} //!< Words list per server/channel.
456
c81b38ec7bd2 Fix #644: fix word list and selection
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
71 };
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * Search for an existing game.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 * @param server the server object
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * @param channel the channel name
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * @return the hangman instance or undefined if no one exists
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 Hangman.find = function (server, channel)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
82 return Hangman.map[server.toString() + '@' + channel];
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 * Create a new game, store it in the map and return it.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * @param server the server object
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * @param channel the channel name
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @return the hangman object
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 Hangman.create = function (server, channel)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
94 return Hangman.map[server.toString() + "@" + channel] = new Hangman(server, channel);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * Remove the specified game from the map.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 * @param game the game to remove
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 Hangman.remove = function (game)
1158cffe5a5e Initial import
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 delete Hangman.map[game.server + "@" + game.channel];
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * Check if the text is a valid word.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 * @param word the word to check
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 * @return true if a word
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 Hangman.isWord = function (word)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
115 if (word.length === 0)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
116 return false;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
118 for (var i = 0; i < word.length; ++i)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
119 if (!Unicode.isLetter(word.charCodeAt(i)))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
120 return false;
0
1158cffe5a5e Initial import
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 true;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 * Load all words.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 Hangman.loadWords = function ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
130 var path;
0
1158cffe5a5e Initial import
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 // User specified file?
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
133 if (Plugin.config["file"])
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
134 path = Plugin.config["file"];
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
135 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
136 path = Plugin.paths.config + "/words.conf";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
138 try {
995
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
139 Logger.info("loading words from " + path);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
141 var file = new File(path, "r");
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
142 var line;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
995
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
144 Hangman.words.all = [];
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
145
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
146 while ((line = file.readline()) !== undefined)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
147 if (Hangman.isWord(line))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
148 Hangman.words.all.push(line);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
149 } catch (e) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
150 throw new Error("could not open '" + path + "'");
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
151 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
153 if (Hangman.words.all.length === 0)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
154 throw new Error("empty word database");
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
156 Logger.info("number of words in database: " + Hangman.words.all.length);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 * Select the next word for the game.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 Hangman.prototype.select = function ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
164 var id = this.server.toString() + "@" + this.channel;
456
c81b38ec7bd2 Fix #644: fix word list and selection
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
165
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
166 // Reload the words if empty.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
167 if (!Hangman.words.registry[id] || Hangman.words.registry[id].length === 0)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
168 Hangman.words.registry[id] = Hangman.words.all.slice(0);
0
1158cffe5a5e Initial import
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 var i = Math.floor(Math.random() * Hangman.words.registry[id].length);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
172 this.word = Hangman.words.registry[id][i];
456
c81b38ec7bd2 Fix #644: fix word list and selection
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
173
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
174 // Erase words from the registry.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
175 Hangman.words.registry[id].splice(i, 1);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
177 // Fill table.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
178 this.table = {};
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
179
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
180 for (var j = 0; j < this.word.length; ++j)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
181 this.table[this.word.charCodeAt(j)] = false;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 * Format the word with underscore and letters.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 * @return the secret
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 Hangman.prototype.formatWord = function ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
191 var str = "";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
193 for (var i = 0; i < this.word.length; ++i) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
194 var ch = this.word.charCodeAt(i);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
195
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
196 if (!this.table[ch])
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
197 str += "_";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
198 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
199 str += String.fromCharCode(ch);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
200
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
201 if (i + 1 < this.word.length)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
202 str += " ";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
203 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
204
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
205 return str;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
207
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 * Propose a word or a letter.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 * @param ch the code point or the unique word
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 * @param nickname the user trying
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 * @return the status of the game
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 Hangman.prototype.propose = function (ch, nickname)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
217 var status = "found";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
218
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
219 // Check for collaborative mode.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
220 if (Plugin.config["collaborative"] === "true" && !this.query) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
221 if (this.last !== undefined && this.last === nickname)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
222 return "wrong-player";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
223
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
224 this.last = nickname;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
225 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
226
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
227 if (typeof(ch) == "number") {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
228 if (this.table[ch] === undefined) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
229 this.tries -= 1;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
230 status = "wrong-letter";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
231 } else {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
232 if (this.table[ch]) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
233 this.tries -= 1;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
234 status = "asked";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
235 } else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
236 this.table[ch] = true;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
237 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
238 } else {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
239 if (this.word != ch) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
240 this.tries -= 1;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
241 status = "wrong-word";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
242 } else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
243 status = "win";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
244 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
245
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
246 // Check if dead.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
247 if (this.tries <= 0)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
248 status = "dead";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
250 // Check if win.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
251 var win = true;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
252
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
253 for (var i = 0; i < this.word.length; ++i) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
254 if (!this.table[this.word.charCodeAt(i)]) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
255 win = false;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
256 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
257 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
258 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
259
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
260 if (win)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
261 status = "win";
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
262
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
263 return status;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
265
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 function onLoad()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
268 Hangman.loadWords();
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
270
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 onReload = onLoad;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
272
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 function propose(server, channel, origin, game, proposition)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
275 var kw = {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
276 channel: channel,
995
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
277 command: server.info().prefix + Plugin.info().name,
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
278 nickname: Util.splituser(origin),
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
279 origin: origin,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
280 plugin: Plugin.info().name,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
281 server: server.toString()
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
282 };
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
283
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
284 var st = game.propose(proposition, kw.nickname);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
285
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
286 switch (st) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
287 case "found":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
288 kw.word = game.formatWord();
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
289 server.message(channel, Util.format(Plugin.templates["found"], kw));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
290 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
291 case "wrong-letter":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
292 case "wrong-player":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
293 case "wrong-word":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
294 kw.word = proposition;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
295 case "asked":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
296 kw.letter = String.fromCharCode(proposition);
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
297 server.message(channel, Util.format(Plugin.templates[st], kw));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
298 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
299 case "dead":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
300 case "win":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
301 kw.word = game.word;
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
302 server.message(channel, Util.format(Plugin.templates[st], kw));
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
303
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
304 // Remove the game.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
305 Hangman.remove(game);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
306 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
307 default:
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
308 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
309 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 function onCommand(server, origin, channel, message)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
314 var isquery = server.isSelf(channel);
577
3d0dbc0bee7d Irccd: update references to onChannel(Mode|Notice), onMode
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
315
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
316 if (isquery)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
317 channel = origin;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
318 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
319 channel = channel.toLowerCase();
436
a2ed6bc6e42c Fix #642: fix case sensitivity in hangman, roulette
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
320
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
321 var game = Hangman.find(server, channel);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
322 var kw = {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
323 channel: channel,
995
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
324 command: server.info().prefix + Plugin.info().name,
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
325 nickname: Util.splituser(origin),
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
326 origin: origin,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
327 plugin: Plugin.info().name,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
328 server: server.toString()
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
329 };
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
330
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
331 if (game) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
332 var list = message.split(" \t");
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
333
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
334 if (list.length === 0 || String(list[0]).length === 0) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
335 kw.word = game.formatWord();
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
336 server.message(channel, Util.format(Plugin.templates["running"], kw));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
337 } else {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
338 var word = String(list[0]);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
339
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
340 if (Hangman.isWord(word))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
341 propose(server, channel, origin, game, word);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
342 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
343 } else {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
344 game = Hangman.create(server, channel);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
345 game.query = isquery;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
346 kw.word = game.formatWord();
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
347 server.message(channel, Util.format(Plugin.templates["start"], kw));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
348 }
272
8fb6bd57878c Plugin hangman: allow usage in query, closes #424
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
349
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
350 return game;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
352
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 function onMessage(server, origin, channel, message)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
355 if (server.isSelf(channel))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
356 channel = origin;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
357 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
358 channel = channel.toLowerCase();
436
a2ed6bc6e42c Fix #642: fix case sensitivity in hangman, roulette
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
359
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
360 var game = Hangman.find(server, channel);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
361
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
362 if (!game)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
363 return;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
364
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
365 if (message.length === 1 && Unicode.isLetter(message.charCodeAt(0)))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
366 propose(server, channel, origin, game, message.charCodeAt(0));
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 }