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.
- package/README.md +270 -0
- package/dist/games/Connect4.d.ts +37 -0
- package/dist/games/Connect4.d.ts.map +1 -0
- package/dist/games/Connect4.js +279 -0
- package/dist/games/Connect4.js.map +1 -0
- package/dist/games/Hangman.d.ts +30 -0
- package/dist/games/Hangman.d.ts.map +1 -0
- package/dist/games/Hangman.js +259 -0
- package/dist/games/Hangman.js.map +1 -0
- package/dist/games/RPS.d.ts +25 -0
- package/dist/games/RPS.d.ts.map +1 -0
- package/dist/games/RPS.js +187 -0
- package/dist/games/RPS.js.map +1 -0
- package/dist/games/Snake.d.ts +33 -0
- package/dist/games/Snake.d.ts.map +1 -0
- package/dist/games/Snake.js +222 -0
- package/dist/games/Snake.js.map +1 -0
- package/dist/games/TicTacToe.d.ts +32 -0
- package/dist/games/TicTacToe.d.ts.map +1 -0
- package/dist/games/TicTacToe.js +293 -0
- package/dist/games/TicTacToe.js.map +1 -0
- package/dist/games/index.d.ts +6 -0
- package/dist/games/index.d.ts.map +1 -0
- package/dist/games/index.js +17 -0
- package/dist/games/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/en-US.d.ts +103 -0
- package/dist/locales/en-US.d.ts.map +1 -0
- package/dist/locales/en-US.js +169 -0
- package/dist/locales/en-US.js.map +1 -0
- package/dist/locales/es.d.ts +103 -0
- package/dist/locales/es.d.ts.map +1 -0
- package/dist/locales/es.js +169 -0
- package/dist/locales/es.js.map +1 -0
- package/dist/locales/fr.d.ts +103 -0
- package/dist/locales/fr.d.ts.map +1 -0
- package/dist/locales/fr.js +169 -0
- package/dist/locales/fr.js.map +1 -0
- package/dist/locales/index.d.ts +522 -0
- package/dist/locales/index.d.ts.map +1 -0
- package/dist/locales/index.js +29 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/it.d.ts +103 -0
- package/dist/locales/it.d.ts.map +1 -0
- package/dist/locales/it.js +169 -0
- package/dist/locales/it.js.map +1 -0
- package/dist/structures/GameManager.d.ts +32 -0
- package/dist/structures/GameManager.d.ts.map +1 -0
- package/dist/structures/GameManager.js +183 -0
- package/dist/structures/GameManager.js.map +1 -0
- package/dist/structures/Types.d.ts +241 -0
- package/dist/structures/Types.d.ts.map +1 -0
- package/dist/structures/Types.js +51 -0
- package/dist/structures/Types.js.map +1 -0
- package/dist/structures/Utils.d.ts +49 -0
- package/dist/structures/Utils.d.ts.map +1 -0
- package/dist/structures/Utils.js +197 -0
- package/dist/structures/Utils.js.map +1 -0
- package/dist/variables/Game.d.ts +5 -0
- package/dist/variables/Game.d.ts.map +1 -0
- package/dist/variables/Game.js +84 -0
- package/dist/variables/Game.js.map +1 -0
- package/dist/variables/index.d.ts +2 -0
- package/dist/variables/index.d.ts.map +1 -0
- package/dist/variables/index.js +18 -0
- package/dist/variables/index.js.map +1 -0
- 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"}
|