Discord js ve discord-buttons kullanılarak yazılmış bir sesli konuş komutu. Böylece sunucu üyeleriniz ile bu komutu kullanarak keyifli vakit geçirebilirsiniz.
Kurulum için aşağıdaki adımları izleyin;
- Bu kod projenizdeki komutlar ya da commands adındaki klasöre atılmalıdır. Eğer eklemeyi bilmiyorsanız buraya tıklayın.
- Komut içerisindeki gerekli yerleri kendinize göre düzenleyebilirsiniz.
- Gerekli modüller; Discord.js ve discord-buttons. Ayrıca modülü kurmak için
npm install discord-buttons
// Komutlar klasörüne atılmalıdır.
// Bu komut Staup tarafından hazırlanmıştır.
const { MessageActionRow, MessageButton } = require('discord.js');
// Oyun için gerekli değişkenler
const board = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
let currentPlayer = "X";
let isGameActive = true;
module.exports = {
name: 'xox',
aliases: ['tictactoe'],
usage: "xox <sayı (1-9)>",
description: 'XOX (Tic Tac Toe) oyunu başlatır.',
execute(client, message, args) {
if (args.length !== 1) {
return message.reply('Lütfen 1 ile 9 arasında bir sayı seçin.');
}
if (!isGameActive) {
return message.reply('Oyun zaten bitmiş durumda. Yeniden başlamak için `xox` komutunu kullanabilirsiniz.');
}
const position = parseInt(args[0]);
if (isNaN(position) || position < 1 || position > 9) {
return message.reply('Lütfen geçerli bir pozisyon seçin (1-9).');
}
if (board[position - 1] === "X" || board[position - 1] === "O") {
return message.reply('Bu pozisyon zaten dolu. Başka bir pozisyon seçin.');
}
board[position - 1] = currentPlayer;
// Oyun tahtasını güncelle ve kontrol et
const result = checkGameResult();
renderBoard(message);
if (result) {
isGameActive = false;
if (result === "draw") {
message.channel.send('Oyun berabere bitti!');
} else {
message.channel.send(`${result} oyuncusu kazandı!`);
}
} else {
currentPlayer = (currentPlayer === "X") ? "O" : "X";
}
},
};
function checkGameResult() {
// Kazanma kombinasyonları
const winPatterns = [
[0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6]
];
for (const pattern of winPatterns) {
const [a, b, c] = pattern;
if (board[a] && board[a] === board[b] && board[a] === board[c]) {
return board[a];
}
}
if (board.every((cell) => cell === "X" || cell === "O")) {
return "draw";
}
return null;
}
function renderBoard(message) {
const rows = [];
for (let i = 0; i < 9; i += 3) {
const row = board.slice(i, i + 3).join(" | ");
rows.push(row);
}
const boardMessage = rows.join('\n---------\n');
const currentPlayerMessage = `Şimdi sıra: ${currentPlayer}`;
const components = [
new MessageActionRow()
.addComponents(
new MessageButton()
.setCustomId('1')
.setLabel('1')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('2')
.setLabel('2')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('3')
.setLabel('3')
.setStyle('PRIMARY')
),
new MessageActionRow()
.addComponents(
new MessageButton()
.setCustomId('4')
.setLabel('4')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('5')
.setLabel('5')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('6')
.setLabel('6')
.setStyle('PRIMARY')
),
new MessageActionRow()
.addComponents(
new MessageButton()
.setCustomId('7')
.setLabel('7')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('8')
.setLabel('8')
.setStyle('PRIMARY'),
new MessageButton()
.setCustomId('9')
.setLabel('9')
.setStyle('PRIMARY')
)
];
message.channel.send({ content: boardMessage, components: components });
}