mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-25 06:42:51 +02:00
Add support for custom chess game length
This commit is contained in:
@@ -36,6 +36,13 @@ module.exports = class ChessCommand extends Command {
|
|||||||
key: 'opponent',
|
key: 'opponent',
|
||||||
prompt: 'What user would you like to challenge? To play against AI, choose me.',
|
prompt: 'What user would you like to challenge? To play against AI, choose me.',
|
||||||
type: 'user'
|
type: 'user'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'time',
|
||||||
|
prompt: 'How long should the chess timers be set for (in minutes)?',
|
||||||
|
type: 'integer',
|
||||||
|
max: 60,
|
||||||
|
min: 5
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@@ -43,7 +50,7 @@ module.exports = class ChessCommand extends Command {
|
|||||||
this.images = null;
|
this.images = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async run(msg, { opponent }) {
|
async run(msg, { opponent, time }) {
|
||||||
if (opponent.id === msg.author.id) return msg.reply('You may not play against yourself.');
|
if (opponent.id === msg.author.id) return msg.reply('You may not play against yourself.');
|
||||||
const current = this.client.games.get(msg.channel.id);
|
const current = this.client.games.get(msg.channel.id);
|
||||||
if (current) return msg.reply(`Please wait until the current game of \`${current.name}\` is finished.`);
|
if (current) return msg.reply(`Please wait until the current game of \`${current.name}\` is finished.`);
|
||||||
@@ -60,8 +67,8 @@ module.exports = class ChessCommand extends Command {
|
|||||||
}
|
}
|
||||||
const resumeGame = await this.client.redis.get(`chess-${msg.author.id}`);
|
const resumeGame = await this.client.redis.get(`chess-${msg.author.id}`);
|
||||||
let game;
|
let game;
|
||||||
let whiteTime = 900000;
|
let whiteTime = time * 60000;
|
||||||
let blackTime = 900000;
|
let blackTime = time * 60000;
|
||||||
let whitePlayer = msg.author;
|
let whitePlayer = msg.author;
|
||||||
let blackPlayer = opponent;
|
let blackPlayer = opponent;
|
||||||
if (resumeGame) {
|
if (resumeGame) {
|
||||||
@@ -86,7 +93,7 @@ module.exports = class ChessCommand extends Command {
|
|||||||
while (!game.exportJson().checkMate) {
|
while (!game.exportJson().checkMate) {
|
||||||
const gameState = game.exportJson();
|
const gameState = game.exportJson();
|
||||||
const user = gameState.turn === 'black' ? blackPlayer : whitePlayer;
|
const user = gameState.turn === 'black' ? blackPlayer : whitePlayer;
|
||||||
const time = gameState.turn === 'black' ? blackTime : whiteTime;
|
const userTime = gameState.turn === 'black' ? blackTime : whiteTime;
|
||||||
if (user.bot) {
|
if (user.bot) {
|
||||||
prevPieces = Object.assign({}, game.exportJson().pieces);
|
prevPieces = Object.assign({}, game.exportJson().pieces);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
@@ -100,7 +107,7 @@ module.exports = class ChessCommand extends Command {
|
|||||||
You can save your game by typing \`save\`.
|
You can save your game by typing \`save\`.
|
||||||
_You are ${gameState.check ? '**in check!**' : 'not in check.'}_
|
_You are ${gameState.check ? '**in check!**' : 'not in check.'}_
|
||||||
|
|
||||||
**Time Remaining: ${moment.duration(time).format()}**
|
**Time Remaining: ${moment.duration(time).format()}** (Max 10min per turn)
|
||||||
`, { files: [{ attachment: this.displayBoard(gameState, prevPieces), name: 'chess.png' }] });
|
`, { files: [{ attachment: this.displayBoard(gameState, prevPieces), name: 'chess.png' }] });
|
||||||
prevPieces = Object.assign({}, game.exportJson().pieces);
|
prevPieces = Object.assign({}, game.exportJson().pieces);
|
||||||
const moves = game.moves();
|
const moves = game.moves();
|
||||||
@@ -121,11 +128,16 @@ module.exports = class ChessCommand extends Command {
|
|||||||
const now = new Date();
|
const now = new Date();
|
||||||
const turn = await msg.channel.awaitMessages(pickFilter, {
|
const turn = await msg.channel.awaitMessages(pickFilter, {
|
||||||
max: 1,
|
max: 1,
|
||||||
time
|
time: Math.min(userTime, 600000)
|
||||||
});
|
});
|
||||||
if (!turn.size) {
|
if (!turn.size) {
|
||||||
|
const timeTaken = new Date() - now;
|
||||||
this.client.games.delete(msg.channel.id);
|
this.client.games.delete(msg.channel.id);
|
||||||
return msg.say(`${user.id === msg.author.id ? opponent : msg.author} wins from timeout!`);
|
if (userTime - timeTaken <= 0) {
|
||||||
|
return msg.say(`${user.id === msg.author.id ? opponent : msg.author} wins from timeout!`);
|
||||||
|
} else {
|
||||||
|
return msg.say(`${user}, the game has been ended. You cannot take more than 10 minutes.`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (turn.first().content.toLowerCase() === 'end') break;
|
if (turn.first().content.toLowerCase() === 'end') break;
|
||||||
if (turn.first().content.toLowerCase() === 'save') {
|
if (turn.first().content.toLowerCase() === 'save') {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "xiao",
|
"name": "xiao",
|
||||||
"version": "128.0.1",
|
"version": "128.0.2",
|
||||||
"description": "Your personal server companion.",
|
"description": "Your personal server companion.",
|
||||||
"main": "Xiao.js",
|
"main": "Xiao.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
Reference in New Issue
Block a user