UNPKG

jelly-djs

Version:

An easy discord.js multipurpose npm for memes and fun!

184 lines (179 loc) 8.01 kB
const { MessageButton, MessageActionRow } = require('discord.js') module.exports = async (message, client, opponent) => { try { let fighters = [message.member.id, opponent.id].sort(() => (Math.random() > .5) ? 1 : -1) let Args = { user: 0, a1: { style: "SECONDARY", label: "➖", disabled: false }, a2: { style: "SECONDARY", label: "➖", disabled: false }, a3: { style: "SECONDARY", label: "➖", disabled: false }, b1: { style: "SECONDARY", label: "➖", disabled: false }, b2: { style: "SECONDARY", label: "➖", disabled: false }, b3: { style: "SECONDARY", label: "➖", disabled: false }, c1: { style: "SECONDARY", label: "➖", disabled: false }, c2: { style: "SECONDARY", label: "➖", disabled: false }, c3: { style: "SECONDARY", label: "➖", disabled: false } } let msg = await message.channel.send(`**TicTacToe** | <@!${Args.userid}>'s turn (⭕)`) tictactoe(msg) async function tictactoe(m) { Args.userid = fighters[Args.user] let won = { "⭕": false, "❌": false } if (Args.a1.label == "⭕" && Args.b1.label == "⭕" && Args.c1.label == "⭕") won["⭕"] = true if (Args.a2.label == "⭕" && Args.b2.label == "⭕" && Args.c2.label == "⭕") won["⭕"] = true if (Args.a3.label == "⭕" && Args.b3.label == "⭕" && Args.c3.label == "⭕") won["⭕"] = true if (Args.a1.label == "⭕" && Args.b2.label == "⭕" && Args.c3.label == "⭕") won["⭕"] = true if (Args.a3.label == "⭕" && Args.b2.label == "⭕" && Args.c1.label == "⭕") won["⭕"] = true if (Args.a1.label == "⭕" && Args.a2.label == "⭕" && Args.a3.label == "⭕") won["⭕"] = true if (Args.b1.label == "⭕" && Args.b2.label == "⭕" && Args.b3.label == "⭕") won["⭕"] = true if (Args.c1.label == "⭕" && Args.c2.label == "⭕" && Args.c3.label == "⭕") won["⭕"] = true if (won["⭕"] != false) { return m.edit(`User with emoji \`⭕\` has won!`) } if (Args.a1.label == "❌" && Args.b1.label == "❌" && Args.c1.label == "❌") won["❌"] = true if (Args.a2.label == "❌" && Args.b2.label == "❌" && Args.c2.label == "❌") won["❌"] = true if (Args.a3.label == "❌" && Args.b3.label == "❌" && Args.c3.label == "❌") won["❌"] = true if (Args.a1.label == "❌" && Args.b2.label == "❌" && Args.c3.label == "❌") won["❌"] = true if (Args.a3.label == "❌" && Args.b2.label == "❌" && Args.c1.label == "❌") won["❌"] = true if (Args.a1.label == "❌" && Args.a2.label == "❌" && Args.a3.label == "❌") won["❌"] = true if (Args.b1.label == "❌" && Args.b2.label == "❌" && Args.b3.label == "❌") won["❌"] = true if (Args.c1.label == "❌" && Args.c2.label == "❌" && Args.c3.label == "❌") won["❌"] = true if (won["❌"] != false) return m.edit(` User with emoji \`❌\` has won!`) let a1 = new MessageButton() .setStyle(Args.a1.style) .setLabel(Args.a1.label) .setCustomId('a1') .setDisabled(Args.a1.disabled); let a2 = new MessageButton() .setStyle(Args.a2.style) .setLabel(Args.a2.label) .setCustomId('a2') .setDisabled(Args.a2.disabled); let a3 = new MessageButton() .setStyle(Args.a3.style) .setLabel(Args.a3.label) .setCustomId('a3') .setDisabled(Args.a3.disabled); let b1 = new MessageButton() .setStyle(Args.b1.style) .setLabel(Args.b1.label) .setCustomId('b1') .setDisabled(Args.b1.disabled); let b2 = new MessageButton() .setStyle(Args.b2.style) .setLabel(Args.b2.label) .setCustomId('b2') .setDisabled(Args.b2.disabled); let b3 = new MessageButton() .setStyle(Args.b3.style) .setLabel(Args.b3.label) .setCustomId('b3') .setDisabled(Args.b3.disabled); let c1 = new MessageButton() .setStyle(Args.c1.style) .setLabel(Args.c1.label) .setCustomId('c1') .setDisabled(Args.c1.disabled); let c2 = new MessageButton() .setStyle(Args.c2.style) .setLabel(Args.c2.label) .setCustomId('c2') .setDisabled(Args.c2.disabled); let c3 = new MessageButton() .setStyle(Args.c3.style) .setLabel(Args.c3.label) .setCustomId('c3') .setDisabled(Args.c3.disabled); let a = new MessageActionRow() .addComponents([a1, a2, a3]) let b = new MessageActionRow() .addComponents([b1, b2, b3]) let c = new MessageActionRow() .addComponents([c1, c2, c3]) let buttons = { components: [a, b, c] } m.edit({ content: `**TicTacToe** | <@!${Args.userid}>'s turn (${Args.user == 0 ? "⭕" : "❌"})`, components: [a, b, c] }) const filter = (button) => button.user.id === Args.userid; const collector = m.createMessageComponentCollector({ filter, max: 1, time: 30000 }); collector.on('collect', b => { if (Args.user == 0) { Args.user = 1 Args[b.customId] = { style: "SUCCESS", label: "⭕", disabled: true } } else { Args.user = 0 Args[b.customId] = { style: "DANGER", label: "❌", disabled: true } } 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), {}); let Brgs = objectFilter(map(Args, (_, fruit) => fruit.label == "➖"), num => num == true); if (Object.keys(Brgs).length == 0) return m.edit('It\'s a tie!') tictactoe(m) }); collector.on('end', collected => { if (collected.size == 0) m.edit(`<@!${Args.userid}> didn\'t react in time! (30s)`) }); } } catch (e) { return console.error(e); } }