From c3c886ad38592b008a22f74c10cae44c65f889e6 Mon Sep 17 00:00:00 2001 From: JonnyBro Date: Wed, 2 Feb 2022 23:54:06 +0500 Subject: [PATCH] =?UTF-8?q?v3.3.5=20=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D1=91=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20tictactoe=20=D1=81=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82,=20=D1=81=D0=BF=D0=B0=D1=81=D0=B8=D0=B1=D0=BE=20simply-d?= =?UTF-8?q?js=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/Economy/tictactoe.js | 60 +- commands/Owner/eval.js | 2 +- dashboard/public/docs/updates.md | 4 + helpers/tictactoe.js | 861 ++++++++++++++++++ .../ru-RU/{fun => economy}/findwords.json | 0 .../ru-RU/{fun => economy}/horserace.json | 0 languages/ru-RU/{fun => economy}/number.json | 0 .../ru-RU/{fun => economy}/tictactoe.json | 0 languages/ru-RU/fun/fml.json | 6 - .../uk-UA/{fun => economy}/findwords.json | 0 .../uk-UA/{fun => economy}/horserace.json | 0 languages/uk-UA/{fun => economy}/number.json | 0 .../uk-UA/{fun => economy}/tictactoe.json | 0 languages/uk-UA/fun/fml.json | 6 - package.json | 2 +- 15 files changed, 910 insertions(+), 31 deletions(-) create mode 100644 helpers/tictactoe.js rename languages/ru-RU/{fun => economy}/findwords.json (100%) rename languages/ru-RU/{fun => economy}/horserace.json (100%) rename languages/ru-RU/{fun => economy}/number.json (100%) rename languages/ru-RU/{fun => economy}/tictactoe.json (100%) delete mode 100644 languages/ru-RU/fun/fml.json rename languages/uk-UA/{fun => economy}/findwords.json (100%) rename languages/uk-UA/{fun => economy}/horserace.json (100%) rename languages/uk-UA/{fun => economy}/number.json (100%) rename languages/uk-UA/{fun => economy}/tictactoe.json (100%) delete mode 100644 languages/uk-UA/fun/fml.json diff --git a/commands/Economy/tictactoe.js b/commands/Economy/tictactoe.js index db7fb18c..aa0e201e 100644 --- a/commands/Economy/tictactoe.js +++ b/commands/Economy/tictactoe.js @@ -1,12 +1,12 @@ const Command = require("../../base/Command"), - TTT = require("discord-tictactoe"); + tictactoe = require("../../helpers/tictactoe"); class TicTacToe extends Command { constructor(client) { super(client, { name: "tictactoe", dirname: __dirname, - enabled: false, + enabled: true, guildOnly: false, aliases: ["ttt"], memberPermissions: [], @@ -17,19 +17,17 @@ class TicTacToe extends Command { }); } - async run(message) { - const game = new TTT({ language: "ru" }); - game.handleMessage(message); - - game.on("win", async (data) => { - if (data.winner.id === "AI") return; - - message.sendT("fun/number:WON", { - winner: data.winner.displayName + async run(message, args, data) { + tictactoe(message, { + embedColor: data.config.embed.color, + embedFoot: data.config.embed.footer + }).then(async (winner) => { + message.sendT("economy/number:WON", { + winner: winner.username }); - const userdata = await this.client.findOrCreateMember({ - id: data.winner.id, + const memberData = await this.client.findOrCreateMember({ + id: winner.id, guildID: message.guild.id }); @@ -40,12 +38,40 @@ class TicTacToe extends Command { type: "got" }; - data.memberData.transactions.push(info); + memberData.transactions.push(info); - userdata.money = userdata.money + 100; - userdata.save(); + memberData.money = memberData.money + 100; + memberData.save(); }); } } -module.exports = TicTacToe; \ No newline at end of file +module.exports = TicTacToe; + +// const game = new TTT({ language: "ru" }); +// game.handleMessage(message); + +// game.on("win", async (data) => { +// if (data.winner.id === "AI") return; + +// message.sendT("fun/number:WON", { +// winner: data.winner.displayName +// }); + +// const userdata = await this.client.findOrCreateMember({ +// id: data.winner.id, +// guildID: message.guild.id +// }); + +// const info = { +// user: message.translate("economy/tictactoe:DESCRIPTION"), +// amount: 100, +// date: Date.now(), +// type: "got" +// }; + +// data.memberData.transactions.push(info); + +// userdata.money = userdata.money + 100; +// userdata.save(); +// }); \ No newline at end of file diff --git a/commands/Owner/eval.js b/commands/Owner/eval.js index 4fc8d174..7f71915f 100644 --- a/commands/Owner/eval.js +++ b/commands/Owner/eval.js @@ -17,7 +17,7 @@ class Eval extends Command { }); } - async run(message, data) { + async run(message, args, data) { const content = message.content.split(" ").slice(1).join(" "); const result = new Promise((resolve) => resolve(eval(content))); diff --git a/dashboard/public/docs/updates.md b/dashboard/public/docs/updates.md index 63991446..eaec7fce 100644 --- a/dashboard/public/docs/updates.md +++ b/dashboard/public/docs/updates.md @@ -1,3 +1,7 @@ +### JaBa v3.3.5 +* Исправления + * Команда *tictactoe* снова работает. + ### JaBa v3.3.4 * Добавлено * Команда *stealemoji (steale)* - Украсть эмодзи с другого сервера (для администрации с подпиской Nitro). diff --git a/helpers/tictactoe.js b/helpers/tictactoe.js new file mode 100644 index 00000000..2441d416 --- /dev/null +++ b/helpers/tictactoe.js @@ -0,0 +1,861 @@ +// Thanks to simply-djs for this =) + +const Discord = require("discord.js"); + +/** + * @param message Discord Message + * @param options Array of Options + */ +/** + slash => Boolean + + userSlash => String + + resultBtn => Boolean + + embedFoot => String + embedColor => HexColor + timeoutEmbedColor => HexColor + + xEmoji => (Emoji ID) String + + oEmoji => (Emoji ID) String + + idleEmoji => (Emoji ID) String + */ + +async function tictactoe(message, options = []) { + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve) => { + try { + const { client } = message; + let opponent; + + if (message.commandId) { + opponent = message.options.getUser(options.userSlash || "user"); + + if (!opponent) + return message.followUp({ + content: "Укажите пользователя!", + ephemeral: true + }); + + if (opponent.bot) + return message.followUp({ + content: "Вы не можете играть против ботов!", + ephemeral: true + }); + + if (opponent.id == (message.user ? message.user : message.author).id) + return message.followUp({ + content: "Вы не можете играть с самим собой!", + ephemeral: true + }); + } else if (!message.commandId) { + opponent = message.mentions.members.first()?.user; + + if (!opponent) + return message.channel.send({ + content: "Укажите пользователя!" + }); + + if (opponent.bot) + return message.followUp({ + content: "Вы не можете играть против ботов!", + ephemeral: true + }); + + if (opponent.id === message.member.id) + return message.channel.send({ + content: + "Вы не можете играть с самим собой!" + }); + } + + const foot = { text: options.embedFoot } || { text: "Удачи =)" }; + + const acceptEmbed = new Discord.MessageEmbed() + .setTitle(`Ожидаю ответа ${opponent.tag}!`) + .setAuthor({ + name: (message.user ? message.user : message.author).tag, + iconURL: (message.user ? message.user : message.author).displayAvatarURL() + }) + .setColor(options.embedColor || "#075FFF") + .setFooter(foot); + + const accept = new Discord.MessageButton() + .setLabel("Принять") + .setStyle("SUCCESS") + .setCustomId("acceptttt"); + + const decline = new Discord.MessageButton() + .setLabel("Отказаться") + .setStyle("DANGER") + .setCustomId("declinettt"); + + const accep = new Discord.MessageActionRow().addComponents([ + accept, + decline + ]); + + let m; + + if (message.commandId) { + m = await message.followUp({ + content: "Хей, <@" + opponent.id + ">, вам предложили сыграть в крестики-нолики", + embeds: [acceptEmbed], + components: [accep] + }); + } else if (!message.commandId) { + m = await message.reply({ + content: "Хей, <@" + opponent.id + ">, вам предложили сыграть в крестики-нолики", + embeds: [acceptEmbed], + components: [accep] + }); + } + const collector = m.createMessageComponentCollector({ + type: "BUTTON", + time: 30000 + }); + collector.on("collect", async (button) => { + if (button.user.id !== opponent.id) + return button.reply({ + content: `Запрос отправлен <@${opponent.id}>.`, + ephemeral: true + }); + + if (button.customId == "declinettt") { + button.deferUpdate(); + return collector.stop("decline"); + } else if (button.customId == "acceptttt") { + collector.stop(); + if (message.commandId) { + button.message.delete(); + } + + const fighters = [ + (message.user ? message.user : message.author).id, + opponent.id + ].sort(() => (Math.random() > 0.5 ? 1 : -1)); + + const x_emoji = options.xEmoji || "❌"; + const o_emoji = options.oEmoji || "⭕"; + + const dashmoji = options.idleEmoji || "➖"; + + const Args = { + user: 0, + a1: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + a2: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + a3: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + b1: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + b2: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + b3: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + c1: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + c2: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + }, + c3: { + style: "SECONDARY", + emoji: dashmoji, + disabled: false + } + }; + const { MessageActionRow, MessageButton } = require("discord.js"); + + const epm = new Discord.MessageEmbed() + .setTitle("Крестики-нолики") + .setColor(options.embedColor || "#075FFF") + .setFooter(foot) + .setTimestamp(); + + let msg; + if (message.commandId) { + msg = await message.followUp({ + embeds: [ + epm.setDescription( + `Ожидаю ход | <@!${Args.userid}>, Ваш эмодзи: ${ + client.emojis.cache.get(o_emoji) || "⭕" + }` + ) + ] + }); + } else if (!message.commandId) { + msg = await button.message.edit({ + embeds: [ + epm.setDescription( + `Ожидаю ход | <@!${Args.userid}>, Ваш эмодзи: ${ + client.emojis.cache.get(o_emoji) || "⭕" + }` + ) + ] + }); + } + + await ttt(msg); + + // eslint-disable-next-line no-inner-declarations + async function ttt(m) { + Args.userid = fighters[Args.user]; + const won = { + "<:O_:863314110560993340>": false, + "<:X_:863314044781723668>": false + }; + + const a1 = new MessageButton() + .setStyle(Args.a1.style) + .setEmoji(Args.a1.emoji) + .setCustomId("a1") + .setDisabled(Args.a1.disabled); + const a2 = new MessageButton() + .setStyle(Args.a2.style) + .setEmoji(Args.a2.emoji) + .setCustomId("a2") + .setDisabled(Args.a2.disabled); + const a3 = new MessageButton() + .setStyle(Args.a3.style) + .setEmoji(Args.a3.emoji) + .setCustomId("a3") + .setDisabled(Args.a3.disabled); + const b1 = new MessageButton() + .setStyle(Args.b1.style) + .setEmoji(Args.b1.emoji) + .setCustomId("b1") + .setDisabled(Args.b1.disabled); + const b2 = new MessageButton() + .setStyle(Args.b2.style) + .setEmoji(Args.b2.emoji) + .setCustomId("b2") + .setDisabled(Args.b2.disabled); + const b3 = new MessageButton() + .setStyle(Args.b3.style) + .setEmoji(Args.b3.emoji) + .setCustomId("b3") + .setDisabled(Args.b3.disabled); + const c1 = new MessageButton() + .setStyle(Args.c1.style) + .setEmoji(Args.c1.emoji) + .setCustomId("c1") + .setDisabled(Args.c1.disabled); + const c2 = new MessageButton() + .setStyle(Args.c2.style) + .setEmoji(Args.c2.emoji) + .setCustomId("c2") + .setDisabled(Args.c2.disabled); + const c3 = new MessageButton() + .setStyle(Args.c3.style) + .setEmoji(Args.c3.emoji) + .setCustomId("c3") + .setDisabled(Args.c3.disabled); + const a = new MessageActionRow().addComponents([a1, a2, a3]); + const b = new MessageActionRow().addComponents([b1, b2, b3]); + const c = new MessageActionRow().addComponents([c1, c2, c3]); + const buttons = [a, b, c]; + + if ( + Args.a1.emoji == o_emoji && + Args.b1.emoji == o_emoji && + Args.c1.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a2.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c2.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a3.emoji == o_emoji && + Args.b3.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a1.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a3.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c1.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a1.emoji == o_emoji && + Args.a2.emoji == o_emoji && + Args.a3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.b1.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.b3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.c1.emoji == o_emoji && + Args.c2.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if (won["<:O_:863314110560993340>"] != false) { + if (Args.user == 0) { + const wonner = await client.users + .fetch(fighters[1]) + .catch(console.error); + resolve(wonner); + + if (options.resultBtn === true) + return m + .edit({ + content: `<@${fighters[1]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл`, + components: buttons, + + embeds: [ + epm.setDescription( + `<@!${fighters[1]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл.` + ) + ] + }) + .then((m) => { + m.react("⭕"); + }); + else if (!options.resultBtn || options.resultBtn === false) + return m + .edit({ + content: `<@${fighters[1]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл`, + + embeds: [ + epm.setDescription( + `<@!${fighters[1]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл\n\`\`\`\n${Args.a1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.b1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.c1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n\`\`\``.replaceAll( + dashmoji, + "➖" + ) + ) + ], + components: [] + }) + .then((m) => { + m.react("⭕"); + }); + } else if (Args.user == 1) { + const wonner = await client.users + .fetch(fighters[0]) + .catch(console.error); + resolve(wonner); + + if (options.resultBtn === true) + return m + .edit({ + content: `<@${fighters[0]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл`, + components: buttons, + embeds: [ + epm.setDescription( + `<@!${fighters[0]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл` + ) + ] + }) + .then((m) => { + m.react("⭕"); + }); + else if (!options.resultBtn || options.resultBtn === false) + return m + .edit({ + content: `<@${fighters[0]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл`, + + embeds: [ + epm.setDescription( + `<@!${fighters[0]}> (${ + client.emojis.cache.get(o_emoji) || "⭕" + }) выиграл\n\`\`\`\n${Args.a1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.b1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.c1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n\`\`\``.replaceAll( + dashmoji, + "➖" + ) + ) + ], + components: [] + }) + .then((m) => { + m.react("⭕"); + }); + } + } + if ( + Args.a1.emoji == x_emoji && + Args.b1.emoji == x_emoji && + Args.c1.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.a2.emoji == x_emoji && + Args.b2.emoji == x_emoji && + Args.c2.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.a3.emoji == x_emoji && + Args.b3.emoji == x_emoji && + Args.c3.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.a1.emoji == x_emoji && + Args.b2.emoji == x_emoji && + Args.c3.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.a3.emoji == x_emoji && + Args.b2.emoji == x_emoji && + Args.c1.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.a1.emoji == x_emoji && + Args.a2.emoji == x_emoji && + Args.a3.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.b1.emoji == x_emoji && + Args.b2.emoji == x_emoji && + Args.b3.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if ( + Args.c1.emoji == x_emoji && + Args.c2.emoji == x_emoji && + Args.c3.emoji == x_emoji + ) + won["<:X_:863314044781723668>"] = true; + if (won["<:X_:863314044781723668>"] != false) { + if (Args.user == 0) { + const wonner = await client.users + .fetch(fighters[1]) + .catch(console.error); + resolve(wonner); + + if (options.resultBtn === true) + return m + .edit({ + content: `<@${fighters[1]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл`, + components: buttons, + embeds: [ + epm.setDescription( + `<@!${fighters[1]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл` + ) + ] + }) + .then((m) => { + m.react("❌"); + }); + else if (!options.resultBtn || options.resultBtn === false) + return m + .edit({ + content: `<@${fighters[1]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл`, + embeds: [ + epm.setDescription( + `<@!${fighters[1]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл\n\`\`\`\n${Args.a1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.b1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.c1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n\`\`\``.replaceAll( + dashmoji, + "➖" + ) + ) + ], + components: [] + }) + .then((m) => { + m.react("❌"); + }); + } else if (Args.user == 1) { + const wonner = await client.users + .fetch(fighters[0]) + .catch(console.error); + resolve(wonner); + + if (options.resultBtn === true) + return m + .edit({ + content: `<@${fighters[0]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл`, + components: buttons, + embeds: [ + epm.setDescription( + `<@!${fighters[0]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл` + ) + ] + }) + .then((m) => { + m.react("❌"); + }); + else + return m + .edit({ + content: `<@${fighters[0]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл`, + embeds: [ + epm.setDescription( + `<@!${fighters[0]}> (${ + client.emojis.cache.get(x_emoji) || "❌" + }) выиграл\n\`\`\`\n${Args.a1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.b1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.c1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n\`\`\``.replaceAll( + dashmoji, + "➖" + ) + ) + ], + components: [] + }) + .then((m) => { + m.react("❌"); + }); + } + } + + m.edit({ + content: `<@${Args.userid}>`, + embeds: [ + epm.setDescription( + `Ожидаю ход | <@!${Args.userid}> | Ваш эмодзи: ${ + Args.user == 0 + ? `${client.emojis.cache.get(o_emoji) || "⭕"}` + : `${client.emojis.cache.get(x_emoji) || "❌"}` + }` + ) + ], + components: [a, b, c] + }); + + const collector = m.createMessageComponentCollector({ + componentType: "BUTTON", + max: 1, + time: 30000 + }); + + collector.on("collect", (b) => { + if (b.user.id !== Args.userid) { + b.reply({ + content: "Вы не можете играть сейчас!", + ephemeral: true + }); + + ttt(m); + } else { + if (Args.user == 0) { + Args.user = 1; + Args[b.customId] = { + style: "SUCCESS", + emoji: o_emoji, + disabled: true + }; + } else { + Args.user = 0; + Args[b.customId] = { + style: "DANGER", + emoji: x_emoji, + disabled: true + }; + } + b.deferUpdate(); + const map = (obj, fun) => + Object.entries(obj).reduce( + (prev, [key, value]) => ({ + ...prev, + [key]: fun(key, value) + }), + {} + ); + const objectFilter = (obj, predicate) => + Object.keys(obj) + .filter((key) => predicate(obj[key])) + .reduce((res, key) => ((res[key] = obj[key]), res), {}); + const Brgs = objectFilter( + map(Args, (_, fruit) => fruit.emoji == dashmoji), + (num) => num == true + ); + + if (Object.keys(Brgs).length == 0) { + if ( + Args.a1.emoji == o_emoji && + Args.b1.emoji == o_emoji && + Args.c1.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a2.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c2.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a3.emoji == o_emoji && + Args.b3.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a1.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a3.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.c1.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.a1.emoji == o_emoji && + Args.a2.emoji == o_emoji && + Args.a3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.b1.emoji == o_emoji && + Args.b2.emoji == o_emoji && + Args.b3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + if ( + Args.c1.emoji == o_emoji && + Args.c2.emoji == o_emoji && + Args.c3.emoji == o_emoji + ) + won["<:O_:863314110560993340>"] = true; + + if (won["<:O_:863314110560993340>"] == true) return ttt(m); + else if (won["<:X_:863314044781723668>"] == true) return; + else { + ttt(m); + + if (options.resultBtn === true) + return m + .edit({ + content: "Ничья", + embeds: [epm.setDescription("Это ничья!")] + }) + .then((m) => { + m.react(dashmoji); + }); + else + return m + .edit({ + content: "Ничья", + embeds: [ + epm.setDescription( + `Это ничья!\n\`\`\`\n${Args.a1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.a3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.b1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.b3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n${Args.c1.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c2.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")} | ${Args.c3.emoji + .replace(o_emoji, "⭕") + .replace(x_emoji, "❌")}\n\`\`\``.replaceAll( + dashmoji, + "➖" + ) + ) + ], + components: [] + }) + .then((m) => { + m.react(dashmoji); + }) + .catch(() => {}); + } + } + + ttt(m); + } + }); + collector.on("end", (collected, reason) => { + if (collected.size === 0 && reason == "time") + m.edit({ + content: `<@!${Args.userid}> не ответил вовремя! (30с)`, + components: [] + }); + }); + } + } + }); + + collector.on("end", (collected, reason) => { + if (reason == "time") { + const embed = new Discord.MessageEmbed() + .setTitle("Запрос не принят вовремя") + .setAuthor({ + name: (message.user ? message.user : message.author).tag, + iconURL: (message.user ? message.user : message.author).displayAvatarURL() + }) + .setColor(options.timeoutEmbedColor || "#C90000") + .setFooter(foot) + .setDescription("Время вышло!\nЛимит: 30с"); + m.edit({ + content: "<@" + opponent.id + "> не принял запрос", + embeds: [embed], + components: [] + }); + } + if (reason == "decline") { + const embed = new Discord.MessageEmbed() + .setTitle("Игра отменена!") + .setAuthor({ + name: (message.user ? message.user : message.author).tag, + iconURL: (message.user ? message.user : message.author).displayAvatarURL() + }) + .setColor(options.timeoutEmbedColor || "#C90000") + .setFooter(foot) + .setDescription(`${opponent.user.tag} отказался от игры!`); + m.edit({ + embeds: [embed], + components: [] + }); + } + }); + } catch (err) { + console.log(`tictactoe | Ошибка: ${err.stack}`); + } + }); +} + +module.exports = tictactoe; \ No newline at end of file diff --git a/languages/ru-RU/fun/findwords.json b/languages/ru-RU/economy/findwords.json similarity index 100% rename from languages/ru-RU/fun/findwords.json rename to languages/ru-RU/economy/findwords.json diff --git a/languages/ru-RU/fun/horserace.json b/languages/ru-RU/economy/horserace.json similarity index 100% rename from languages/ru-RU/fun/horserace.json rename to languages/ru-RU/economy/horserace.json diff --git a/languages/ru-RU/fun/number.json b/languages/ru-RU/economy/number.json similarity index 100% rename from languages/ru-RU/fun/number.json rename to languages/ru-RU/economy/number.json diff --git a/languages/ru-RU/fun/tictactoe.json b/languages/ru-RU/economy/tictactoe.json similarity index 100% rename from languages/ru-RU/fun/tictactoe.json rename to languages/ru-RU/economy/tictactoe.json diff --git a/languages/ru-RU/fun/fml.json b/languages/ru-RU/fun/fml.json deleted file mode 100644 index a14b0cca..00000000 --- a/languages/ru-RU/fun/fml.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "DESCRIPTION": "Получить случайный FML", - "USAGE": "{{prefix}}fml", - "EXAMPLES": "{{prefix}}fml", - "FOOTER": "JaBa | blague.xyz" -} \ No newline at end of file diff --git a/languages/uk-UA/fun/findwords.json b/languages/uk-UA/economy/findwords.json similarity index 100% rename from languages/uk-UA/fun/findwords.json rename to languages/uk-UA/economy/findwords.json diff --git a/languages/uk-UA/fun/horserace.json b/languages/uk-UA/economy/horserace.json similarity index 100% rename from languages/uk-UA/fun/horserace.json rename to languages/uk-UA/economy/horserace.json diff --git a/languages/uk-UA/fun/number.json b/languages/uk-UA/economy/number.json similarity index 100% rename from languages/uk-UA/fun/number.json rename to languages/uk-UA/economy/number.json diff --git a/languages/uk-UA/fun/tictactoe.json b/languages/uk-UA/economy/tictactoe.json similarity index 100% rename from languages/uk-UA/fun/tictactoe.json rename to languages/uk-UA/economy/tictactoe.json diff --git a/languages/uk-UA/fun/fml.json b/languages/uk-UA/fun/fml.json deleted file mode 100644 index a14b0cca..00000000 --- a/languages/uk-UA/fun/fml.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "DESCRIPTION": "Получить случайный FML", - "USAGE": "{{prefix}}fml", - "EXAMPLES": "{{prefix}}fml", - "FOOTER": "JaBa | blague.xyz" -} \ No newline at end of file diff --git a/package.json b/package.json index 73622662..4ae116f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jaba", - "version": "3.3.4", + "version": "3.3.5", "description": "A very complete Discord bot (more than 100 commands) that uses the Discord.js", "main": "index.js", "private": true,