wynham-games 1.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +270 -0
  2. package/dist/games/Connect4.d.ts +37 -0
  3. package/dist/games/Connect4.d.ts.map +1 -0
  4. package/dist/games/Connect4.js +279 -0
  5. package/dist/games/Connect4.js.map +1 -0
  6. package/dist/games/Hangman.d.ts +30 -0
  7. package/dist/games/Hangman.d.ts.map +1 -0
  8. package/dist/games/Hangman.js +259 -0
  9. package/dist/games/Hangman.js.map +1 -0
  10. package/dist/games/RPS.d.ts +25 -0
  11. package/dist/games/RPS.d.ts.map +1 -0
  12. package/dist/games/RPS.js +187 -0
  13. package/dist/games/RPS.js.map +1 -0
  14. package/dist/games/Snake.d.ts +33 -0
  15. package/dist/games/Snake.d.ts.map +1 -0
  16. package/dist/games/Snake.js +222 -0
  17. package/dist/games/Snake.js.map +1 -0
  18. package/dist/games/TicTacToe.d.ts +32 -0
  19. package/dist/games/TicTacToe.d.ts.map +1 -0
  20. package/dist/games/TicTacToe.js +293 -0
  21. package/dist/games/TicTacToe.js.map +1 -0
  22. package/dist/games/index.d.ts +6 -0
  23. package/dist/games/index.d.ts.map +1 -0
  24. package/dist/games/index.js +17 -0
  25. package/dist/games/index.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +19 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/locales/en-US.d.ts +103 -0
  31. package/dist/locales/en-US.d.ts.map +1 -0
  32. package/dist/locales/en-US.js +169 -0
  33. package/dist/locales/en-US.js.map +1 -0
  34. package/dist/locales/es.d.ts +103 -0
  35. package/dist/locales/es.d.ts.map +1 -0
  36. package/dist/locales/es.js +169 -0
  37. package/dist/locales/es.js.map +1 -0
  38. package/dist/locales/fr.d.ts +103 -0
  39. package/dist/locales/fr.d.ts.map +1 -0
  40. package/dist/locales/fr.js +169 -0
  41. package/dist/locales/fr.js.map +1 -0
  42. package/dist/locales/index.d.ts +522 -0
  43. package/dist/locales/index.d.ts.map +1 -0
  44. package/dist/locales/index.js +29 -0
  45. package/dist/locales/index.js.map +1 -0
  46. package/dist/locales/it.d.ts +103 -0
  47. package/dist/locales/it.d.ts.map +1 -0
  48. package/dist/locales/it.js +169 -0
  49. package/dist/locales/it.js.map +1 -0
  50. package/dist/structures/GameManager.d.ts +32 -0
  51. package/dist/structures/GameManager.d.ts.map +1 -0
  52. package/dist/structures/GameManager.js +183 -0
  53. package/dist/structures/GameManager.js.map +1 -0
  54. package/dist/structures/Types.d.ts +241 -0
  55. package/dist/structures/Types.d.ts.map +1 -0
  56. package/dist/structures/Types.js +51 -0
  57. package/dist/structures/Types.js.map +1 -0
  58. package/dist/structures/Utils.d.ts +49 -0
  59. package/dist/structures/Utils.d.ts.map +1 -0
  60. package/dist/structures/Utils.js +197 -0
  61. package/dist/structures/Utils.js.map +1 -0
  62. package/dist/variables/Game.d.ts +5 -0
  63. package/dist/variables/Game.d.ts.map +1 -0
  64. package/dist/variables/Game.js +84 -0
  65. package/dist/variables/Game.js.map +1 -0
  66. package/dist/variables/index.d.ts +2 -0
  67. package/dist/variables/index.d.ts.map +1 -0
  68. package/dist/variables/index.js +18 -0
  69. package/dist/variables/index.js.map +1 -0
  70. package/package.json +36 -0
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const Types_1 = require("../structures/Types");
37
+ const varHang = __importStar(require("../variables"));
38
+ const discord_js_1 = require("discord.js");
39
+ class Hangman {
40
+ gameName = Types_1.GameNameType.Hangman;
41
+ manager;
42
+ interaction;
43
+ players;
44
+ colors;
45
+ title;
46
+ lifeCount;
47
+ loc;
48
+ currentPlayer = 0;
49
+ word;
50
+ wordLetters;
51
+ // Letters and full words already tried (correct or not).
52
+ guessed = new Set();
53
+ wrongCount = 0;
54
+ isModal = false;
55
+ collector = null;
56
+ turnTimeout;
57
+ cooldownKey;
58
+ constructor(manager, interaction, options, gameLocale) {
59
+ this.manager = manager;
60
+ this.interaction = interaction;
61
+ this.players = options.players;
62
+ this.cooldownKey = `${this.players[0].id}-${this.players[1].id}-${this.gameName}`;
63
+ this.turnTimeout = (options.turnTimeout ?? 30) * 1000;
64
+ this.loc = gameLocale.hangman;
65
+ const theme = options.theme ?? {};
66
+ this.colors = {
67
+ play: theme.colors?.play ?? 0x5865f2,
68
+ win: theme.colors?.win ?? 0xffd700,
69
+ lose: theme.colors?.lose ?? 0x808080,
70
+ };
71
+ this.lifeCount = options?.lifeCount ?? 6;
72
+ if (this.lifeCount >= 10)
73
+ throw new Error(`The parameter "lifeCount" must be lower than 10 (received: ${this.lifeCount})`);
74
+ this.title = options.lang?.title ?? this.loc.title;
75
+ this.word = this.loc.words[Math.floor(Math.random() * this.loc.words.length)];
76
+ this.wordLetters = this.word.split("");
77
+ }
78
+ // Stage offset by lifeCount so shorter games start closer to the end of the art.
79
+ getStage() {
80
+ const startStage = Math.max(0, 9 - this.lifeCount);
81
+ const index = startStage + this.wrongCount;
82
+ return varHang.HANGMAN_STAGES[Math.min(index, 9)];
83
+ }
84
+ async handleComponents(components) {
85
+ const player = this.players[this.currentPlayer];
86
+ if (components.user.id !== player.id) {
87
+ return void (await components.reply({
88
+ embeds: [{ description: this.loc.notYourTurn, color: discord_js_1.Colors.Red }],
89
+ flags: discord_js_1.MessageFlags.Ephemeral,
90
+ }));
91
+ }
92
+ if (components.isStringSelectMenu()) {
93
+ await components.deferUpdate();
94
+ this.interaction = components;
95
+ const letter = components.values[0].toUpperCase();
96
+ if (this.guessed.has(letter)) {
97
+ return void (await components.followUp({
98
+ embeds: [{ description: this.loc.alreadyGuessed(letter), color: discord_js_1.Colors.Red }],
99
+ flags: discord_js_1.MessageFlags.Ephemeral,
100
+ }));
101
+ }
102
+ this.guessed.add(letter);
103
+ if (!this.word.includes(letter))
104
+ this.wrongCount++;
105
+ const wordKnown = this.wordLetters.every(l => this.guessed.has(l));
106
+ if (wordKnown) {
107
+ this.cleanup();
108
+ return void (await this.interaction.editReply({
109
+ components: [this.buildContainer(this.loc.win(player.username, this.word), this.colors.win, true)],
110
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
111
+ }));
112
+ }
113
+ if (this.wrongCount >= this.lifeCount) {
114
+ this.cleanup();
115
+ return void (await this.interaction.editReply({
116
+ components: [this.buildContainer(this.loc.lose(this.word), this.colors.lose, true)],
117
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
118
+ }));
119
+ }
120
+ this.manager.cooldowns.reset(this.cooldownKey, 300_000);
121
+ this.collector?.resetTimer();
122
+ this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
123
+ const next = this.players[this.currentPlayer];
124
+ await this.interaction.editReply({
125
+ components: [this.buildContainer(this.loc.turn(next.username))],
126
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
127
+ });
128
+ }
129
+ else if (components.isButton()) {
130
+ await components.showModal(this.buildModalWord());
131
+ if (this.isModal)
132
+ return;
133
+ this.isModal = true;
134
+ const modalSubmit = await components.awaitModalSubmit({ time: 60_000 }).catch(() => null);
135
+ if (!modalSubmit)
136
+ return;
137
+ this.isModal = false;
138
+ await modalSubmit.deferUpdate();
139
+ const guess = modalSubmit.fields.getTextInputValue("value").toUpperCase().trim();
140
+ if (guess === this.word) {
141
+ this.cleanup();
142
+ return void (await this.interaction.editReply({
143
+ components: [this.buildContainer(this.loc.win(player.username, this.word), this.colors.win, true)],
144
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
145
+ }));
146
+ }
147
+ else {
148
+ if (this.guessed.has(guess)) {
149
+ return void (await modalSubmit.followUp({
150
+ embeds: [{ description: this.loc.alreadyGuessedWord(guess), color: discord_js_1.Colors.Red }],
151
+ flags: discord_js_1.MessageFlags.Ephemeral,
152
+ }));
153
+ }
154
+ // A wrong full-word guess costs two lives.
155
+ this.wrongCount += 2;
156
+ this.wrongCount = Math.min(this.wrongCount, this.lifeCount);
157
+ this.guessed.add(guess);
158
+ if (this.wrongCount >= this.lifeCount) {
159
+ this.cleanup();
160
+ return void (await this.interaction.editReply({
161
+ components: [this.buildContainer(this.loc.lose(this.word), this.colors.lose, true)],
162
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
163
+ }));
164
+ }
165
+ this.manager.cooldowns.reset(this.cooldownKey, 300_000);
166
+ this.collector?.resetTimer();
167
+ this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
168
+ const next = this.players[this.currentPlayer];
169
+ await this.interaction.editReply({
170
+ components: [this.buildContainer(this.loc.turn(next.username))],
171
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
172
+ });
173
+ }
174
+ }
175
+ }
176
+ buildContainer(status, color, disabled = false) {
177
+ const livesLeft = this.lifeCount - this.wrongCount;
178
+ const lives = "❤️".repeat(livesLeft) + "🖤".repeat(this.wrongCount);
179
+ const wordLine = `\`${this.wordLetters.map(l => (this.guessed.has(l) ? l : "_")).join(" ")}\``;
180
+ const wrong = [...this.guessed].filter(l => !this.word.includes(l));
181
+ const wrongLine = wrong.length ? this.loc.wrongLetters(wrong.join(", ")) : this.loc.noWrongLetters;
182
+ const base = new discord_js_1.ContainerBuilder()
183
+ .setAccentColor(color ?? this.colors.play)
184
+ .addTextDisplayComponents(text => text.setContent(`## ${this.title}`))
185
+ .addTextDisplayComponents(text => text.setContent(this.getStage()))
186
+ .addTextDisplayComponents(text => text.setContent(`${lives}\n\n${wordLine}`))
187
+ .addSeparatorComponents(sep => sep.setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
188
+ .addTextDisplayComponents(text => text.setContent(wrongLine))
189
+ .addSeparatorComponents(sep => sep.setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
190
+ .addTextDisplayComponents(text => text.setContent(status));
191
+ if (!disabled) {
192
+ const menuAM = this.buildLetterMenu("hangman_am", this.loc.menuLettersAM, varHang.LETTERS_AM);
193
+ const menuNZ = this.buildLetterMenu("hangman_nz", this.loc.menuLettersNZ, varHang.LETTERS_NZ);
194
+ if (menuAM)
195
+ base.addActionRowComponents(menuAM);
196
+ if (menuNZ)
197
+ base.addActionRowComponents(menuNZ);
198
+ base.addActionRowComponents(new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder().setCustomId("hangman_guess").setLabel(this.loc.guessButton).setStyle(discord_js_1.ButtonStyle.Primary)));
199
+ }
200
+ return base;
201
+ }
202
+ // Returns null when every letter in the subset has already been guessed (empty menu).
203
+ buildLetterMenu(id, placeholder, letters) {
204
+ const available = letters.split("").filter(l => !this.guessed.has(l));
205
+ if (available.length === 0)
206
+ return null;
207
+ const menu = new discord_js_1.StringSelectMenuBuilder()
208
+ .setCustomId(id)
209
+ .setPlaceholder(placeholder)
210
+ .addOptions(available.map(l => new discord_js_1.StringSelectMenuOptionBuilder().setLabel(l).setValue(l)));
211
+ return new discord_js_1.ActionRowBuilder().addComponents(menu);
212
+ }
213
+ buildModalWord() {
214
+ const textInputWord = new discord_js_1.TextInputBuilder().setCustomId("value").setStyle(discord_js_1.TextInputStyle.Paragraph).setMaxLength(50).setMinLength(1);
215
+ const labelWord = new discord_js_1.LabelBuilder().setLabel(this.loc.modalLabel).setTextInputComponent(textInputWord);
216
+ const modal = new discord_js_1.ModalBuilder().setTitle(this.loc.modalTitle).setCustomId("hangman_mdl").setLabelComponents(labelWord);
217
+ return modal;
218
+ }
219
+ async launch() {
220
+ this.manager.cooldowns.replace(this.cooldownKey, 300_000);
221
+ const message = await this.interaction.editReply({
222
+ components: [this.buildContainer(this.loc.firstTurn(this.players[this.currentPlayer].username))],
223
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
224
+ });
225
+ this.collector = message.createMessageComponentCollector({
226
+ time: 300_000,
227
+ idle: this.turnTimeout,
228
+ filter: i => {
229
+ if (this.players.some(p => p.id === i.user.id))
230
+ return true;
231
+ i.reply({
232
+ embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
233
+ flags: discord_js_1.MessageFlags.Ephemeral,
234
+ });
235
+ return false;
236
+ },
237
+ });
238
+ this.collector.on("collect", (i) => this.handleComponents(i));
239
+ this.collector.on("end", async (_, reason) => {
240
+ if (reason === "time" || reason === "idle") {
241
+ await this.interaction
242
+ .editReply({
243
+ components: [this.buildContainer(this.loc.timeout(this.word), this.colors.lose, true)],
244
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
245
+ })
246
+ .catch(() => { });
247
+ }
248
+ });
249
+ }
250
+ cleanup() {
251
+ if (this.collector) {
252
+ this.collector.stop("cleanup");
253
+ this.collector = null;
254
+ }
255
+ this.manager.cooldowns.delete(this.cooldownKey);
256
+ }
257
+ }
258
+ exports.default = Hangman;
259
+ //# sourceMappingURL=Hangman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hangman.js","sourceRoot":"","sources":["../../src/games/Hangman.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { GameNameType, type RPSOptions, type IGame, type GameLocale, type GameManagerType } from "../structures/Types";
2
+ import { RepliableInteraction } from "discord.js";
3
+ export default class RPS implements IGame {
4
+ readonly gameName = GameNameType.RPS;
5
+ private readonly manager;
6
+ private interaction;
7
+ private readonly players;
8
+ private readonly colors;
9
+ private readonly emojis;
10
+ private readonly title;
11
+ private readonly loc;
12
+ private readonly labels;
13
+ private collector;
14
+ private choices;
15
+ private readonly turnTimeout;
16
+ private readonly cooldownKey;
17
+ constructor(manager: GameManagerType, interaction: RepliableInteraction, options: RPSOptions, gameLocale: GameLocale);
18
+ launch(): Promise<void>;
19
+ private handleButton;
20
+ private resolve;
21
+ private handleEnd;
22
+ private buildContainer;
23
+ private cleanup;
24
+ }
25
+ //# sourceMappingURL=RPS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RPS.d.ts","sourceRoot":"","sources":["../../src/games/RPS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAkB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE9I,OAAO,EAYH,oBAAoB,EAGvB,MAAM,YAAY,CAAC;AAWpB,MAAM,CAAC,OAAO,OAAO,GAAI,YAAW,KAAK;IACrC,SAAgB,QAAQ,oBAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,SAAS,CAAwD;IAEzE,OAAO,CAAC,OAAO,CAAgD;IAC/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IA8B9G,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Bf,YAAY;YA+CZ,OAAO;YA6BP,SAAS;IA0BvB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,OAAO;CAOlB"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Types_1 = require("../structures/Types");
4
+ const discord_js_1 = require("discord.js");
5
+ // Maps each choice to the one it beats.
6
+ const BEATS = {
7
+ [Types_1.Choice.Rock]: Types_1.Choice.Scissors,
8
+ [Types_1.Choice.Paper]: Types_1.Choice.Rock,
9
+ [Types_1.Choice.Scissors]: Types_1.Choice.Paper,
10
+ };
11
+ const CHOICES = [Types_1.Choice.Rock, Types_1.Choice.Paper, Types_1.Choice.Scissors];
12
+ class RPS {
13
+ gameName = Types_1.GameNameType.RPS;
14
+ manager;
15
+ interaction;
16
+ players;
17
+ colors;
18
+ emojis;
19
+ title;
20
+ loc;
21
+ labels;
22
+ collector = null;
23
+ // Choice per player (index matches players); null until they pick.
24
+ choices = [null, null];
25
+ turnTimeout;
26
+ cooldownKey;
27
+ constructor(manager, interaction, options, gameLocale) {
28
+ this.manager = manager;
29
+ this.interaction = interaction;
30
+ this.players = options.players;
31
+ this.cooldownKey = `${this.players[0].id}-${this.players[1].id}-${this.gameName}`;
32
+ this.turnTimeout = (options.turnTimeout ?? 30) * 1000;
33
+ this.loc = gameLocale.rps;
34
+ this.labels = {
35
+ [Types_1.Choice.Rock]: this.loc.rock,
36
+ [Types_1.Choice.Paper]: this.loc.paper,
37
+ [Types_1.Choice.Scissors]: this.loc.scissors,
38
+ };
39
+ const lang = options.lang ?? {};
40
+ const theme = options.theme ?? {};
41
+ this.colors = {
42
+ play: theme.colors?.play ?? 0x5865f2,
43
+ win: theme.colors?.win ?? 0xffd700,
44
+ draw: theme.colors?.draw ?? 0x808080,
45
+ };
46
+ this.emojis = {
47
+ rock: theme.emojis?.rock ?? "✊",
48
+ paper: theme.emojis?.paper ?? "🤚",
49
+ scissors: theme.emojis?.scissors ?? "✌️",
50
+ };
51
+ this.title = lang.title ?? this.loc.title;
52
+ }
53
+ async launch() {
54
+ this.manager.cooldowns.replace(this.cooldownKey, 300_000);
55
+ const status = this.loc.makeChoice;
56
+ const message = await this.interaction.editReply({
57
+ components: [this.buildContainer(status, this.colors.play)],
58
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
59
+ });
60
+ this.collector = message.createMessageComponentCollector({
61
+ componentType: discord_js_1.ComponentType.Button,
62
+ time: 300_000,
63
+ idle: this.turnTimeout,
64
+ filter: btn => {
65
+ if (this.players.some(p => p.id === btn.user.id))
66
+ return true;
67
+ btn.reply({
68
+ embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
69
+ flags: discord_js_1.MessageFlags.Ephemeral,
70
+ });
71
+ return false;
72
+ },
73
+ });
74
+ this.collector.on("collect", (btn) => this.handleButton(btn));
75
+ this.collector.on("end", async (_, reason) => {
76
+ if (reason === "time" || reason === "idle")
77
+ return void (await this.handleEnd());
78
+ });
79
+ }
80
+ async handleButton(components) {
81
+ await components.deferUpdate();
82
+ this.interaction = components;
83
+ const idx = this.players.findIndex(p => p.id === components.user.id);
84
+ if (this.choices[idx] !== null) {
85
+ return void (await components.followUp({
86
+ embeds: [{ description: this.loc.alreadyChose, color: discord_js_1.Colors.Red }],
87
+ flags: discord_js_1.MessageFlags.Ephemeral,
88
+ }));
89
+ }
90
+ const choice = components.customId.split("_")[1];
91
+ this.choices[idx] = choice;
92
+ // Auto-pick for bot opponents before confirming, so a bot game resolves
93
+ // instantly without sending a pointless "waiting for opponent" message.
94
+ const otherIdx = idx === 0 ? 1 : 0;
95
+ if (this.players[otherIdx].bot && this.choices[otherIdx] === null) {
96
+ this.choices[otherIdx] = CHOICES[Math.floor(Math.random() * CHOICES.length)];
97
+ }
98
+ if (this.choices[0] !== null && this.choices[1] !== null) {
99
+ return void (await this.resolve());
100
+ }
101
+ // Opponent is human and hasn't chosen yet — confirm the choice and wait.
102
+ await components.followUp({
103
+ embeds: [
104
+ {
105
+ description: this.loc.chose(this.emojis[choice], this.labels[choice]),
106
+ color: this.colors.play,
107
+ },
108
+ ],
109
+ flags: discord_js_1.MessageFlags.Ephemeral,
110
+ });
111
+ this.collector?.resetTimer();
112
+ this.manager.cooldowns.reset(this.cooldownKey, 300_000);
113
+ return void (await this.interaction.editReply({
114
+ components: [this.buildContainer(this.loc.waiting(this.players[idx].username), this.colors.play)],
115
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
116
+ }));
117
+ }
118
+ async resolve() {
119
+ const [c1, c2] = this.choices;
120
+ const [p1, p2] = this.players;
121
+ const reveal = `**${p1.username}** → **${this.emojis[c1]} ${this.labels[c1]}**\n**${p2.username}** → **${this.emojis[c2]} ${this.labels[c2]}**`;
122
+ let status;
123
+ let color;
124
+ if (c1 === c2) {
125
+ status = this.loc.tie(reveal);
126
+ color = this.colors.draw;
127
+ }
128
+ else if (BEATS[c1] === c2) {
129
+ status = this.loc.win(p1.username, reveal);
130
+ color = this.colors.win;
131
+ }
132
+ else {
133
+ status = this.loc.win(p2.username, reveal);
134
+ color = this.colors.win;
135
+ }
136
+ await this.interaction.editReply({
137
+ components: [this.buildContainer(status, color, true)],
138
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
139
+ });
140
+ this.cleanup();
141
+ }
142
+ // On timeout: a player who already chose wins by default, otherwise it's a draw.
143
+ async handleEnd() {
144
+ const [c1, c2] = this.choices;
145
+ let status;
146
+ let color;
147
+ if (c1 && !c2) {
148
+ status = this.loc.defaultWin(this.players[0].username);
149
+ color = this.colors.win;
150
+ }
151
+ else if (!c1 && c2) {
152
+ status = this.loc.defaultWin(this.players[1].username);
153
+ color = this.colors.win;
154
+ }
155
+ else {
156
+ status = this.loc.timeout;
157
+ color = this.colors.draw;
158
+ }
159
+ await this.interaction
160
+ .editReply({
161
+ components: [this.buildContainer(status, color, true)],
162
+ flags: discord_js_1.MessageFlags.IsComponentsV2,
163
+ })
164
+ .catch(() => { });
165
+ this.cleanup();
166
+ }
167
+ buildContainer(status, color, disabled = false) {
168
+ const [p1, p2] = this.players;
169
+ const row = new discord_js_1.ActionRowBuilder().addComponents(...CHOICES.map(c => new discord_js_1.ButtonBuilder().setCustomId(`rps_${c}`).setLabel(this.labels[c]).setEmoji(this.emojis[c]).setStyle(discord_js_1.ButtonStyle.Secondary).setDisabled(disabled)));
170
+ return new discord_js_1.ContainerBuilder()
171
+ .setAccentColor(color)
172
+ .addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`## ${this.title}`))
173
+ .addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(`**${p1.username}** vs **${p2.username}**`))
174
+ .addSeparatorComponents(new discord_js_1.SeparatorBuilder().setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
175
+ .addTextDisplayComponents(new discord_js_1.TextDisplayBuilder().setContent(status))
176
+ .addActionRowComponents(row);
177
+ }
178
+ cleanup() {
179
+ if (this.collector) {
180
+ this.collector.stop("cleanup");
181
+ this.collector = null;
182
+ }
183
+ this.manager.cooldowns.delete(this.cooldownKey);
184
+ }
185
+ }
186
+ exports.default = RPS;
187
+ //# sourceMappingURL=RPS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RPS.js","sourceRoot":"","sources":["../../src/games/RPS.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { GameNameType, type SnakeOptions, type IGame, type GameLocale, type GameManagerType } from "../structures/Types";
2
+ import { RepliableInteraction } from "discord.js";
3
+ export default class Snake implements IGame {
4
+ readonly gameName = GameNameType.Snake;
5
+ private readonly manager;
6
+ private interaction;
7
+ private readonly player;
8
+ private readonly colors;
9
+ private readonly emojis;
10
+ private readonly title;
11
+ private readonly loc;
12
+ private readonly width;
13
+ private readonly height;
14
+ private readonly turnTimeout;
15
+ private readonly cooldownKey;
16
+ private collector;
17
+ private snake;
18
+ private direction;
19
+ private food;
20
+ private score;
21
+ private over;
22
+ private won;
23
+ constructor(manager: GameManagerType, interaction: RepliableInteraction, options: SnakeOptions, gameLocale: GameLocale);
24
+ launch(): Promise<void>;
25
+ private handleButton;
26
+ private step;
27
+ private spawnFood;
28
+ private buildBoard;
29
+ private buildControls;
30
+ private buildContainer;
31
+ private cleanup;
32
+ }
33
+ //# sourceMappingURL=Snake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Snake.d.ts","sourceRoot":"","sources":["../../src/games/Snake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAoB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1I,OAAO,EAYH,oBAAoB,EAGvB,MAAM,YAAY,CAAC;AAqBpB,MAAM,CAAC,OAAO,OAAO,KAAM,YAAW,KAAK;IACvC,SAAgB,QAAQ,sBAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;IACrE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8D;IACrF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,SAAS,CAAwD;IAGzE,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAS;gBAER,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU;IAgChH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAmCf,YAAY;IA+C1B,OAAO,CAAC,IAAI;IAmCZ,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,OAAO;CAOlB"}