wynham-games 1.0.0-beta.13 â 1.0.0-beta.14
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 +93 -18
- package/dist/games/Connect4.d.ts +6 -0
- package/dist/games/Connect4.d.ts.map +1 -1
- package/dist/games/Connect4.js +45 -21
- package/dist/games/Connect4.js.map +1 -1
- package/dist/games/Hangman.d.ts +7 -1
- package/dist/games/Hangman.d.ts.map +1 -1
- package/dist/games/Hangman.js +50 -24
- package/dist/games/Hangman.js.map +1 -1
- package/dist/games/RPS.d.ts +13 -102
- package/dist/games/RPS.d.ts.map +1 -1
- package/dist/games/RPS.js +68 -154
- package/dist/games/RPS.js.map +1 -1
- package/dist/games/Snake.d.ts +4 -0
- package/dist/games/Snake.d.ts.map +1 -1
- package/dist/games/Snake.js +33 -20
- package/dist/games/Snake.js.map +1 -1
- package/dist/games/TicTacToe.d.ts +6 -0
- package/dist/games/TicTacToe.d.ts.map +1 -1
- package/dist/games/TicTacToe.js +40 -18
- package/dist/games/TicTacToe.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/structures/Errors.d.ts +96 -0
- package/dist/structures/Errors.d.ts.map +1 -0
- package/dist/structures/Errors.js +263 -0
- package/dist/structures/Errors.js.map +1 -0
- package/dist/structures/GameManager.d.ts +4 -2
- package/dist/structures/GameManager.d.ts.map +1 -1
- package/dist/structures/GameManager.js +44 -68
- package/dist/structures/GameManager.js.map +1 -1
- package/dist/structures/Types.d.ts +66 -0
- package/dist/structures/Types.d.ts.map +1 -1
- package/dist/structures/Types.js +39 -1
- package/dist/structures/Types.js.map +1 -1
- package/dist/structures/Utils.d.ts +3 -2
- package/dist/structures/Utils.d.ts.map +1 -1
- package/dist/structures/Utils.js +20 -18
- package/dist/structures/Utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -123,13 +123,13 @@ Every option object shares the `players` field and most share `turnTimeout`, `lo
|
|
|
123
123
|
|
|
124
124
|
### `GameNameType.Connect4` â `Connect4Options`
|
|
125
125
|
|
|
126
|
-
| Option | Type
|
|
127
|
-
| ---------------------- |
|
|
128
|
-
| `theme.emojis.player1` | `string`
|
|
129
|
-
| `theme.emojis.player2` | `string`
|
|
130
|
-
| `theme.emojis.empty` | `string`
|
|
131
|
-
| `theme.emojis.win` | `string`
|
|
132
|
-
| `theme.inputType` | `InputType`
|
|
126
|
+
| Option | Type | Default | Description |
|
|
127
|
+
| ---------------------- | ------------- | --------- | ---------------------------------------------------------------------------------- |
|
|
128
|
+
| `theme.emojis.player1` | `string` | `đ´` | Player 1 pieces. |
|
|
129
|
+
| `theme.emojis.player2` | `string` | `đĄ` | Player 2 pieces. |
|
|
130
|
+
| `theme.emojis.empty` | `string` | `âŦ` | Empty cells. |
|
|
131
|
+
| `theme.emojis.win` | `string` | `âĒ` | Winning pieces. |
|
|
132
|
+
| `theme.inputType` | `InputType` | `Buttons` | Column input mode: `Buttons` or `SelectMenu`. |
|
|
133
133
|
| `theme.buttonStyle` | `ButtonStyle` | `Primary` | Style of the column input buttons: `Primary`, `Secondary`, `Success`, or `Danger`. |
|
|
134
134
|
|
|
135
135
|
```ts
|
|
@@ -185,18 +185,18 @@ The bot opponent behaves differently per difficulty:
|
|
|
185
185
|
|
|
186
186
|
> **Single-player.** Snake does **not** use the shared `players` / `lang.inviteTitle` fields. It takes a single `player` and starts immediately â no invite is sent.
|
|
187
187
|
|
|
188
|
-
| Option | Type | Default
|
|
189
|
-
| -------------------- | -------- |
|
|
190
|
-
| `player` | `User` | â
|
|
191
|
-
| `turnTimeout` | `number` | `30`
|
|
192
|
-
| `boardWidth` | `number` | `10`
|
|
193
|
-
| `boardHeight` | `number` | `10`
|
|
188
|
+
| Option | Type | Default | Description |
|
|
189
|
+
| -------------------- | -------- | ---------- | ---------------------------------------------------------------- |
|
|
190
|
+
| `player` | `User` | â | **Required.** The player (must not be a bot). |
|
|
191
|
+
| `turnTimeout` | `number` | `30` | Max seconds the player can stay idle between two moves (15â360). |
|
|
192
|
+
| `boardWidth` | `number` | `10` | Board width in cells (clamped 5â12). |
|
|
193
|
+
| `boardHeight` | `number` | `10` | Board height in cells (clamped 5â12). |
|
|
194
194
|
| `theme.colors.lose` | `number` | `0x808080` | Color on game over / timeout (replaces the shared `draw` color). |
|
|
195
|
-
| `theme.emojis.head` | `string` | `đĸ`
|
|
196
|
-
| `theme.emojis.body` | `string` | `đŠ`
|
|
197
|
-
| `theme.emojis.food` | `string` | `đ`
|
|
198
|
-
| `theme.emojis.empty` | `string` | `âŦ`
|
|
199
|
-
| `lang.title` | `string` | `"Snake"`
|
|
195
|
+
| `theme.emojis.head` | `string` | `đĸ` | Snake head. |
|
|
196
|
+
| `theme.emojis.body` | `string` | `đŠ` | Snake body. |
|
|
197
|
+
| `theme.emojis.food` | `string` | `đ` | Food. |
|
|
198
|
+
| `theme.emojis.empty` | `string` | `âŦ` | Empty cells. |
|
|
199
|
+
| `lang.title` | `string` | `"Snake"` | Title shown on the game board. |
|
|
200
200
|
|
|
201
201
|
The player moves the snake one cell per button press (âŦ
ī¸ âŦī¸ âŦī¸ âĄī¸) and can quit with âšī¸. Eating the đ grows the snake and increases the score; hitting a wall or the snake's own body ends the game.
|
|
202
202
|
|
|
@@ -231,6 +231,48 @@ const locale = locales[interaction.locale] ?? locales[Locale.EnglishUS];
|
|
|
231
231
|
|
|
232
232
|
Or simply pass `interaction.locale` (or `interaction.guildLocale`) as the `locale` option when creating a game.
|
|
233
233
|
|
|
234
|
+
## Error handling
|
|
235
|
+
|
|
236
|
+
Every Discord call the library makes (`editReply`, `followUp`, `reply`, `update`, `deferUpdate`) goes through `safeDiscordCall`, which turns a raw `DiscordAPIError` into a `WynhamGamesError` carrying a stable `code` â no need to compare Discord numbers by hand.
|
|
237
|
+
|
|
238
|
+
Two behaviours, depending on the failure:
|
|
239
|
+
|
|
240
|
+
- **Recoverable** (`10008` message deleted, `10062` unknown interaction, `50027` expired token, `10003` unknown channel, `40060` already acknowledged, `50083` archived thread): the call resolves to `null` and the game stops cleanly. Nothing is thrown.
|
|
241
|
+
- **Everything else** (`50013` missing permissions, `50001` missing access, `50035` invalid payload, rate limits, network errors): a `WynhamGamesError` is thrown, so `createGame()` rejects and your command handler sees it.
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
import { GameManager, GameNameType, WynhamGamesError, WynhamErrorCode } from "wynham-games";
|
|
245
|
+
|
|
246
|
+
try {
|
|
247
|
+
await manager.createGame(GameNameType.Snake, interaction, { player: interaction.user });
|
|
248
|
+
} catch (error) {
|
|
249
|
+
if (error instanceof WynhamGamesError) {
|
|
250
|
+
console.error(error.code); // "MissingPermissions"
|
|
251
|
+
console.error(error.discordCode); // 50013
|
|
252
|
+
console.error(error.status); // 403
|
|
253
|
+
console.error(error.action); // "editReply"
|
|
254
|
+
console.error(error.game); // "Snake"
|
|
255
|
+
console.error(error.cause); // the original DiscordAPIError
|
|
256
|
+
|
|
257
|
+
if (error.code === WynhamErrorCode.MissingPermissions) {
|
|
258
|
+
await interaction.followUp({ content: "I need permission to edit my messages here.", flags: MessageFlags.Ephemeral });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Errors raised **after** `createGame()` resolved â from a component collector or a turn timer â cannot be awaited by your code, so they are reported instead of crashing the process. They go to `console.error` by default; route them to your own logger with `setErrorHandler`:
|
|
265
|
+
|
|
266
|
+
```ts
|
|
267
|
+
import { setErrorHandler } from "wynham-games";
|
|
268
|
+
|
|
269
|
+
setErrorHandler(error => logger.error({ code: error.code, discordCode: error.discordCode, game: error.game }, error.message));
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Configuration mistakes use the same error type, before any request is sent: `ClientMissing`, `LocaleNotSupported`, `InvalidAntiSpamTime`, `InvalidTurnTimeout`, `InvalidLifeCount`, `InteractionNotRepliable`.
|
|
273
|
+
|
|
274
|
+
The guarded helpers are exported too, if you want the same behaviour in your own code: `safeDiscordCall`, `safeEdit`, `safeFollowUp`, `safeReply`, `safeNotify`, `safeUpdate`, `safeDeferUpdate`, `safeMessageEdit`, plus `toWynhamError` and `isWynhamGamesError`.
|
|
275
|
+
|
|
234
276
|
## Enums reference
|
|
235
277
|
|
|
236
278
|
```ts
|
|
@@ -261,6 +303,39 @@ enum InviteResult {
|
|
|
261
303
|
Declined,
|
|
262
304
|
Timeout,
|
|
263
305
|
}
|
|
306
|
+
enum WynhamErrorCode {
|
|
307
|
+
// configuration
|
|
308
|
+
ClientMissing,
|
|
309
|
+
LocaleNotSupported,
|
|
310
|
+
InvalidAntiSpamTime,
|
|
311
|
+
InvalidTurnTimeout,
|
|
312
|
+
InvalidLifeCount,
|
|
313
|
+
InteractionNotRepliable,
|
|
314
|
+
// Discord REST
|
|
315
|
+
UnknownChannel,
|
|
316
|
+
UnknownMessage,
|
|
317
|
+
UnknownWebhook,
|
|
318
|
+
UnknownInteraction,
|
|
319
|
+
InteractionAlreadyAcknowledged,
|
|
320
|
+
InvalidWebhookToken,
|
|
321
|
+
ArchivedThread,
|
|
322
|
+
MissingAccess,
|
|
323
|
+
MissingPermissions,
|
|
324
|
+
CannotSendEmptyMessage,
|
|
325
|
+
InvalidFormBody,
|
|
326
|
+
RateLimited,
|
|
327
|
+
NetworkError,
|
|
328
|
+
UnexpectedError,
|
|
329
|
+
UnknownDiscordError,
|
|
330
|
+
}
|
|
331
|
+
enum DiscordAction {
|
|
332
|
+
EditReply,
|
|
333
|
+
FollowUp,
|
|
334
|
+
Reply,
|
|
335
|
+
Update,
|
|
336
|
+
DeferUpdate,
|
|
337
|
+
EditMessage,
|
|
338
|
+
}
|
|
264
339
|
```
|
|
265
340
|
|
|
266
341
|
## Building from source
|
package/dist/games/Connect4.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export default class Connect4 implements IGame {
|
|
|
33
33
|
private handleTurnTimeout;
|
|
34
34
|
launch(): Promise<void>;
|
|
35
35
|
private playMove;
|
|
36
|
+
/** `editReply` on the game message, guarded by the library error handler. Resolves to `null` when the message is gone. */
|
|
37
|
+
private edit;
|
|
38
|
+
/** `followUp` guarded by the library error handler. */
|
|
39
|
+
private followUp;
|
|
40
|
+
/** Reports an error raised from a collector or a turn timer â nothing can `await` those. */
|
|
41
|
+
private report;
|
|
36
42
|
private cleanup;
|
|
37
43
|
}
|
|
38
44
|
//# sourceMappingURL=Connect4.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Connect4.d.ts","sourceRoot":"","sources":["../../src/games/Connect4.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Connect4.d.ts","sourceRoot":"","sources":["../../src/games/Connect4.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAa,KAAK,eAAe,EAAE,KAAK,KAAK,EAAE,KAAK,eAAe,EAAuB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3J,OAAO,EAcH,oBAAoB,EAEvB,MAAM,YAAY,CAAC;AAYpB,MAAM,CAAC,OAAO,OAAO,QAAS,YAAW,KAAK;IAC1C,SAAgB,QAAQ,yBAAyB;IACjD,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,CAAyD;IAChF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YAAY,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EA0BxH;IAED,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;YAKR,iBAAiB;IAwBzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAgD5B;YAEa,QAAQ;IAqDtB,0HAA0H;IAC1H,OAAO,CAAC,IAAI;IAIZ,uDAAuD;IACvD,OAAO,CAAC,QAAQ;IAIhB,4FAA4F;IAC5F,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,OAAO;CAalB"}
|
package/dist/games/Connect4.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Errors_1 = require("../structures/Errors");
|
|
3
4
|
const Types_1 = require("../structures/Types");
|
|
4
5
|
const discord_js_1 = require("discord.js");
|
|
5
6
|
const DIRECTIONS = [
|
|
@@ -158,18 +159,18 @@ class Connect4 {
|
|
|
158
159
|
.addTextDisplayComponents(text => text.setContent(this.renderBoard()))
|
|
159
160
|
.addSeparatorComponents(sep => sep.setDivider(true).setSpacing(discord_js_1.SeparatorSpacingSize.Small))
|
|
160
161
|
.addTextDisplayComponents(text => text.setContent(status));
|
|
161
|
-
return this.inputType ===
|
|
162
|
+
return this.inputType === Types_1.InputType.SelectMenu ? base.addActionRowComponents(...this.createSelectMenu(disabled)) : base.addActionRowComponents(...this.createButtons(disabled));
|
|
162
163
|
}
|
|
163
164
|
startTurnTimer() {
|
|
164
165
|
if (this.turnTimer)
|
|
165
166
|
clearTimeout(this.turnTimer);
|
|
166
|
-
this.turnTimer = setTimeout(() => this.handleTurnTimeout(), this.turnTimeout);
|
|
167
|
+
this.turnTimer = setTimeout(() => void this.handleTurnTimeout().catch(error => this.report(error)), this.turnTimeout);
|
|
167
168
|
}
|
|
168
169
|
async handleTurnTimeout() {
|
|
169
170
|
this.consecutiveMisses++;
|
|
170
171
|
if (this.consecutiveMisses >= 2) {
|
|
171
172
|
this.cleanup();
|
|
172
|
-
await this.
|
|
173
|
+
await this.edit({
|
|
173
174
|
components: [this.buildContainer(this.loc.cancelledBothMissed, this.colors.draw, true)],
|
|
174
175
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
175
176
|
});
|
|
@@ -178,7 +179,7 @@ class Connect4 {
|
|
|
178
179
|
this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
|
|
179
180
|
const next = this.players[this.currentPlayer];
|
|
180
181
|
const timestamp = String(Math.floor((Date.now() + this.turnTimeout) / 1000));
|
|
181
|
-
await this.
|
|
182
|
+
await this.edit({
|
|
182
183
|
components: [this.buildContainer(this.loc.turnTimeout(this.cellEmoji(this.currentPlayer + 1), next.username, timestamp), this.colors.play)],
|
|
183
184
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
184
185
|
});
|
|
@@ -189,17 +190,19 @@ class Connect4 {
|
|
|
189
190
|
const firstPlayer = this.players[this.currentPlayer];
|
|
190
191
|
const firstTimestamp = String(Math.floor((Date.now() + this.turnTimeout) / 1000));
|
|
191
192
|
const firstStatus = this.loc.firstTurn(this.cellEmoji(this.currentPlayer + 1), firstPlayer.username, firstTimestamp);
|
|
192
|
-
const message = await this.
|
|
193
|
+
const message = await this.edit({
|
|
193
194
|
components: [this.buildContainer(firstStatus, this.colors.play)],
|
|
194
195
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
195
196
|
});
|
|
197
|
+
if (!message)
|
|
198
|
+
return void this.cleanup();
|
|
196
199
|
this.collector = message.createMessageComponentCollector({
|
|
197
|
-
componentType: this.inputType ===
|
|
200
|
+
componentType: this.inputType === Types_1.InputType.SelectMenu ? discord_js_1.ComponentType.StringSelect : discord_js_1.ComponentType.Button,
|
|
198
201
|
time: 300_000,
|
|
199
202
|
filter: i => {
|
|
200
203
|
if (this.players.some(p => p.id === i.user.id))
|
|
201
204
|
return true;
|
|
202
|
-
|
|
205
|
+
(0, Errors_1.safeNotify)(i, {
|
|
203
206
|
embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
|
|
204
207
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
205
208
|
});
|
|
@@ -207,33 +210,42 @@ class Connect4 {
|
|
|
207
210
|
},
|
|
208
211
|
});
|
|
209
212
|
this.collector.on("collect", async (interactionButton) => {
|
|
210
|
-
const col = this.inputType ===
|
|
211
|
-
await this.playMove(col, interactionButton);
|
|
213
|
+
const col = this.inputType === Types_1.InputType.SelectMenu ? Number(interactionButton.values[0]) : Number(interactionButton.customId.split("_")[1]);
|
|
214
|
+
await this.playMove(col, interactionButton).catch(error => this.report(error));
|
|
212
215
|
});
|
|
213
216
|
this.collector.on("end", async (_, reason) => {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
if (reason === "time" || reason === "idle") {
|
|
218
|
+
try {
|
|
219
|
+
await this.edit({
|
|
220
|
+
components: [this.buildContainer(this.loc.timeout, this.colors.draw, true)],
|
|
221
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
this.report(error);
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
this.cleanup();
|
|
229
|
+
}
|
|
220
230
|
}
|
|
221
231
|
});
|
|
222
232
|
this.startTurnTimer();
|
|
223
233
|
}
|
|
224
234
|
async playMove(col, component) {
|
|
225
|
-
|
|
235
|
+
// A dead interaction token cannot be acknowledged: skip this move.
|
|
236
|
+
if (!(await (0, Errors_1.safeDeferUpdate)(component, { game: this.gameName })))
|
|
237
|
+
return;
|
|
226
238
|
this.interaction = component;
|
|
227
239
|
const player = this.players[this.currentPlayer];
|
|
228
240
|
if (component.user.id !== player.id) {
|
|
229
|
-
return void (await
|
|
241
|
+
return void (await this.followUp(component, {
|
|
230
242
|
embeds: [{ description: this.loc.notYourTurn, color: discord_js_1.Colors.Red }],
|
|
231
243
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
232
244
|
}));
|
|
233
245
|
}
|
|
234
246
|
const row = this.drop(col);
|
|
235
247
|
if (row === -1) {
|
|
236
|
-
return void (await
|
|
248
|
+
return void (await this.followUp(component, {
|
|
237
249
|
embeds: [{ description: this.loc.columnFull, color: discord_js_1.Colors.Red }],
|
|
238
250
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
239
251
|
}));
|
|
@@ -242,14 +254,14 @@ class Connect4 {
|
|
|
242
254
|
this.consecutiveMisses = 0;
|
|
243
255
|
if (this.checkWin(row, col)) {
|
|
244
256
|
this.cleanup();
|
|
245
|
-
return void (await this.
|
|
257
|
+
return void (await this.edit({
|
|
246
258
|
components: [this.buildContainer(this.loc.win(this.cellEmoji(this.currentPlayer + 1), player.username), this.colors.win, true)],
|
|
247
259
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
248
260
|
}));
|
|
249
261
|
}
|
|
250
262
|
if (this.isDraw()) {
|
|
251
263
|
this.cleanup();
|
|
252
|
-
return void (await this.
|
|
264
|
+
return void (await this.edit({
|
|
253
265
|
components: [this.buildContainer(this.loc.draw, this.colors.draw, true)],
|
|
254
266
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
255
267
|
}));
|
|
@@ -259,12 +271,24 @@ class Connect4 {
|
|
|
259
271
|
const timestamp = String(Math.floor((Date.now() + this.turnTimeout) / 1000));
|
|
260
272
|
this.manager.cooldowns.reset(this.cooldownKey, 300_000);
|
|
261
273
|
this.collector?.resetTimer();
|
|
262
|
-
await this.
|
|
274
|
+
await this.edit({
|
|
263
275
|
components: [this.buildContainer(this.loc.turn(this.cellEmoji(this.currentPlayer + 1), next.username, timestamp), this.colors.play)],
|
|
264
276
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
265
277
|
});
|
|
266
278
|
this.startTurnTimer();
|
|
267
279
|
}
|
|
280
|
+
/** `editReply` on the game message, guarded by the library error handler. Resolves to `null` when the message is gone. */
|
|
281
|
+
edit(options) {
|
|
282
|
+
return (0, Errors_1.safeEdit)(this.interaction, options, { game: this.gameName });
|
|
283
|
+
}
|
|
284
|
+
/** `followUp` guarded by the library error handler. */
|
|
285
|
+
followUp(interaction, options) {
|
|
286
|
+
return (0, Errors_1.safeFollowUp)(interaction, options, { game: this.gameName });
|
|
287
|
+
}
|
|
288
|
+
/** Reports an error raised from a collector or a turn timer â nothing can `await` those. */
|
|
289
|
+
report(error) {
|
|
290
|
+
(0, Errors_1.reportError)(error, { game: this.gameName });
|
|
291
|
+
}
|
|
268
292
|
cleanup() {
|
|
269
293
|
if (this.turnTimer) {
|
|
270
294
|
clearTimeout(this.turnTimer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Connect4.js","sourceRoot":"","sources":["../../src/games/Connect4.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Connect4.js","sourceRoot":"","sources":["../../src/games/Connect4.ts"],"names":[],"mappings":"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"}
|
package/dist/games/Hangman.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GameNameType, type
|
|
1
|
+
import { GameNameType, type GameLocale, type GameManagerType, type HangmanOptions, type IGame } from "../structures/Types";
|
|
2
2
|
import { RepliableInteraction } from "discord.js";
|
|
3
3
|
export default class Hangman implements IGame {
|
|
4
4
|
readonly gameName = GameNameType.Hangman;
|
|
@@ -25,6 +25,12 @@ export default class Hangman implements IGame {
|
|
|
25
25
|
private buildLetterMenu;
|
|
26
26
|
private buildModalWord;
|
|
27
27
|
launch(): Promise<void>;
|
|
28
|
+
/** `editReply` on the game message, guarded by the library error handler. Resolves to `null` when the message is gone. */
|
|
29
|
+
private edit;
|
|
30
|
+
/** `followUp` guarded by the library error handler. */
|
|
31
|
+
private followUp;
|
|
32
|
+
/** Reports an error raised from a collector â nothing can `await` it. */
|
|
33
|
+
private report;
|
|
28
34
|
private cleanup;
|
|
29
35
|
}
|
|
30
36
|
//# sourceMappingURL=Hangman.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hangman.d.ts","sourceRoot":"","sources":["../../src/games/Hangman.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Hangman.d.ts","sourceRoot":"","sources":["../../src/games/Hangman.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,YAAY,EAAmB,KAAK,UAAU,EAAE,KAAK,eAAe,EAAsB,KAAK,cAAc,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9K,OAAO,EASH,oBAAoB,EAWvB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,KAAK;IACzC,SAAgB,QAAQ,wBAAwB;IAChD,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,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YAAY,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAsBvH;IAGD,OAAO,CAAC,QAAQ;YAMF,gBAAgB;IA8G9B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,cAAc;IAMhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAsC5B;IAED,0HAA0H;IAC1H,OAAO,CAAC,IAAI;IAIZ,uDAAuD;IACvD,OAAO,CAAC,QAAQ;IAIhB,yEAAyE;IACzE,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,OAAO;CAQlB"}
|
package/dist/games/Hangman.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const Errors_1 = require("../structures/Errors");
|
|
36
37
|
const Types_1 = require("../structures/Types");
|
|
37
38
|
const varHang = __importStar(require("../variables"));
|
|
38
39
|
const discord_js_1 = require("discord.js");
|
|
@@ -70,7 +71,7 @@ class Hangman {
|
|
|
70
71
|
};
|
|
71
72
|
this.lifeCount = options?.lifeCount ?? 6;
|
|
72
73
|
if (this.lifeCount >= 10)
|
|
73
|
-
throw new
|
|
74
|
+
throw new Errors_1.WynhamGamesError(Types_1.WynhamErrorCode.InvalidLifeCount, { detail: `(received: ${this.lifeCount})`, game: this.gameName });
|
|
74
75
|
this.title = options.lang?.title ?? this.loc.title;
|
|
75
76
|
this.word = this.loc.words[Math.floor(Math.random() * this.loc.words.length)];
|
|
76
77
|
this.wordLetters = this.word.split("");
|
|
@@ -84,17 +85,19 @@ class Hangman {
|
|
|
84
85
|
async handleComponents(components) {
|
|
85
86
|
const player = this.players[this.currentPlayer];
|
|
86
87
|
if (components.user.id !== player.id) {
|
|
87
|
-
return void (await
|
|
88
|
+
return void (await (0, Errors_1.safeReply)(components, {
|
|
88
89
|
embeds: [{ description: this.loc.notYourTurn, color: discord_js_1.Colors.Red }],
|
|
89
90
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
90
91
|
}));
|
|
91
92
|
}
|
|
92
93
|
if (components.isStringSelectMenu()) {
|
|
93
|
-
|
|
94
|
+
// A dead interaction token cannot be acknowledged: skip this guess.
|
|
95
|
+
if (!(await (0, Errors_1.safeDeferUpdate)(components, { game: this.gameName })))
|
|
96
|
+
return;
|
|
94
97
|
this.interaction = components;
|
|
95
98
|
const letter = components.values[0].toUpperCase();
|
|
96
99
|
if (this.guessed.has(letter)) {
|
|
97
|
-
return void (await
|
|
100
|
+
return void (await this.followUp(components, {
|
|
98
101
|
embeds: [{ description: this.loc.alreadyGuessed(letter), color: discord_js_1.Colors.Red }],
|
|
99
102
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
100
103
|
}));
|
|
@@ -105,14 +108,14 @@ class Hangman {
|
|
|
105
108
|
const wordKnown = this.wordLetters.every(l => this.guessed.has(l));
|
|
106
109
|
if (wordKnown) {
|
|
107
110
|
this.cleanup();
|
|
108
|
-
return void (await this.
|
|
111
|
+
return void (await this.edit({
|
|
109
112
|
components: [this.buildContainer(this.loc.win(player.username, this.word), this.colors.win, true)],
|
|
110
113
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
111
114
|
}));
|
|
112
115
|
}
|
|
113
116
|
if (this.wrongCount >= this.lifeCount) {
|
|
114
117
|
this.cleanup();
|
|
115
|
-
return void (await this.
|
|
118
|
+
return void (await this.edit({
|
|
116
119
|
components: [this.buildContainer(this.loc.lose(this.word), this.colors.lose, true)],
|
|
117
120
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
118
121
|
}));
|
|
@@ -121,13 +124,16 @@ class Hangman {
|
|
|
121
124
|
this.collector?.resetTimer();
|
|
122
125
|
this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
|
|
123
126
|
const next = this.players[this.currentPlayer];
|
|
124
|
-
await this.
|
|
127
|
+
await this.edit({
|
|
125
128
|
components: [this.buildContainer(this.loc.turn(next.username))],
|
|
126
129
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
127
130
|
});
|
|
128
131
|
}
|
|
129
132
|
else if (components.isButton()) {
|
|
130
|
-
|
|
133
|
+
// `showModal` acknowledges the interaction: if that token is dead, there is no modal to wait for.
|
|
134
|
+
const shown = await (0, Errors_1.safeDiscordCall)(() => components.showModal(this.buildModalWord()), { action: Types_1.DiscordAction.Reply, game: this.gameName });
|
|
135
|
+
if (shown === null)
|
|
136
|
+
return;
|
|
131
137
|
if (this.isModal)
|
|
132
138
|
return;
|
|
133
139
|
this.isModal = true;
|
|
@@ -135,18 +141,19 @@ class Hangman {
|
|
|
135
141
|
if (!modalSubmit)
|
|
136
142
|
return;
|
|
137
143
|
this.isModal = false;
|
|
138
|
-
await modalSubmit.
|
|
144
|
+
if (!(await (0, Errors_1.safeDeferUpdate)(modalSubmit, { game: this.gameName })))
|
|
145
|
+
return;
|
|
139
146
|
const guess = modalSubmit.fields.getTextInputValue("value").toUpperCase().trim();
|
|
140
147
|
if (guess === this.word) {
|
|
141
148
|
this.cleanup();
|
|
142
|
-
return void (await this.
|
|
149
|
+
return void (await this.edit({
|
|
143
150
|
components: [this.buildContainer(this.loc.win(player.username, this.word), this.colors.win, true)],
|
|
144
151
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
145
152
|
}));
|
|
146
153
|
}
|
|
147
154
|
else {
|
|
148
155
|
if (this.guessed.has(guess)) {
|
|
149
|
-
return void (await
|
|
156
|
+
return void (await this.followUp(modalSubmit, {
|
|
150
157
|
embeds: [{ description: this.loc.alreadyGuessedWord(guess), color: discord_js_1.Colors.Red }],
|
|
151
158
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
152
159
|
}));
|
|
@@ -157,7 +164,7 @@ class Hangman {
|
|
|
157
164
|
this.guessed.add(guess);
|
|
158
165
|
if (this.wrongCount >= this.lifeCount) {
|
|
159
166
|
this.cleanup();
|
|
160
|
-
return void (await this.
|
|
167
|
+
return void (await this.edit({
|
|
161
168
|
components: [this.buildContainer(this.loc.lose(this.word), this.colors.lose, true)],
|
|
162
169
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
163
170
|
}));
|
|
@@ -166,7 +173,7 @@ class Hangman {
|
|
|
166
173
|
this.collector?.resetTimer();
|
|
167
174
|
this.currentPlayer = this.currentPlayer === 0 ? 1 : 0;
|
|
168
175
|
const next = this.players[this.currentPlayer];
|
|
169
|
-
await this.
|
|
176
|
+
await this.edit({
|
|
170
177
|
components: [this.buildContainer(this.loc.turn(next.username))],
|
|
171
178
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
172
179
|
});
|
|
@@ -213,40 +220,59 @@ class Hangman {
|
|
|
213
220
|
buildModalWord() {
|
|
214
221
|
const textInputWord = new discord_js_1.TextInputBuilder().setCustomId("value").setStyle(discord_js_1.TextInputStyle.Paragraph).setMaxLength(50).setMinLength(1);
|
|
215
222
|
const labelWord = new discord_js_1.LabelBuilder().setLabel(this.loc.modalLabel).setTextInputComponent(textInputWord);
|
|
216
|
-
|
|
217
|
-
return modal;
|
|
223
|
+
return new discord_js_1.ModalBuilder().setTitle(this.loc.modalTitle).setCustomId("hangman_mdl").setLabelComponents(labelWord);
|
|
218
224
|
}
|
|
219
225
|
async launch() {
|
|
220
226
|
this.manager.cooldowns.replace(this.cooldownKey, 300_000);
|
|
221
|
-
const message = await this.
|
|
227
|
+
const message = await this.edit({
|
|
222
228
|
components: [this.buildContainer(this.loc.firstTurn(this.players[this.currentPlayer].username))],
|
|
223
229
|
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
224
230
|
});
|
|
231
|
+
if (!message)
|
|
232
|
+
return void this.cleanup();
|
|
225
233
|
this.collector = message.createMessageComponentCollector({
|
|
226
234
|
time: 300_000,
|
|
227
235
|
idle: this.turnTimeout,
|
|
228
236
|
filter: i => {
|
|
229
237
|
if (this.players.some(p => p.id === i.user.id))
|
|
230
238
|
return true;
|
|
231
|
-
|
|
239
|
+
(0, Errors_1.safeNotify)(i, {
|
|
232
240
|
embeds: [{ description: this.loc.notYourGame, color: discord_js_1.Colors.Red }],
|
|
233
241
|
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
234
242
|
});
|
|
235
243
|
return false;
|
|
236
244
|
},
|
|
237
245
|
});
|
|
238
|
-
this.collector.on("collect", (i) => this.handleComponents(i));
|
|
246
|
+
this.collector.on("collect", (i) => void this.handleComponents(i).catch(error => this.report(error)));
|
|
239
247
|
this.collector.on("end", async (_, reason) => {
|
|
240
248
|
if (reason === "time" || reason === "idle") {
|
|
241
|
-
|
|
242
|
-
.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
249
|
+
try {
|
|
250
|
+
await this.edit({
|
|
251
|
+
components: [this.buildContainer(this.loc.timeout(this.word), this.colors.lose, true)],
|
|
252
|
+
flags: discord_js_1.MessageFlags.IsComponentsV2,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
this.report(error);
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
this.cleanup();
|
|
260
|
+
}
|
|
247
261
|
}
|
|
248
262
|
});
|
|
249
263
|
}
|
|
264
|
+
/** `editReply` on the game message, guarded by the library error handler. Resolves to `null` when the message is gone. */
|
|
265
|
+
edit(options) {
|
|
266
|
+
return (0, Errors_1.safeEdit)(this.interaction, options, { game: this.gameName });
|
|
267
|
+
}
|
|
268
|
+
/** `followUp` guarded by the library error handler. */
|
|
269
|
+
followUp(interaction, options) {
|
|
270
|
+
return (0, Errors_1.safeFollowUp)(interaction, options, { game: this.gameName });
|
|
271
|
+
}
|
|
272
|
+
/** Reports an error raised from a collector â nothing can `await` it. */
|
|
273
|
+
report(error) {
|
|
274
|
+
(0, Errors_1.reportError)(error, { game: this.gameName });
|
|
275
|
+
}
|
|
250
276
|
cleanup() {
|
|
251
277
|
if (this.collector) {
|
|
252
278
|
this.collector.stop("cleanup");
|