diff --git a/rolemanager/index.ts b/rolemanager/index.ts index 615f832..307d797 100644 --- a/rolemanager/index.ts +++ b/rolemanager/index.ts @@ -1,10 +1,14 @@ import { MessageActionRow, MessageButton, MessageButtonStyleResolvable, MessageComponent, MessageMenu, MessageMenuOption } from 'discord-buttons'; import { Message, TextChannel } from 'discord.js'; const Discord = require('discord.js'), - client = new Discord.Client(), + client = new Discord.Client({ ws: { intents: Discord.Intents.ALL } }), disbut = require('discord-buttons'); disbut(client); +client.on('ready', () => { + console.log('ready') +}) + declare interface OptMenuOptions { label: string; emoji?: string; @@ -223,6 +227,8 @@ client.on('message', (m: Message) => { }); +const xor = (v1: boolean, v2: boolean) => (v1 || v2) && !(v1 && v2); + client.on('clickMenu', (menu: MessageComponent) => { menu.reply.think(true).then(async () => { @@ -240,6 +246,8 @@ client.on('clickMenu', (menu: MessageComponent) => { rem: [] } + console.log(vals); + for (let i = 0; i < m.options.length; i++) { let opt = m.options[i], @@ -249,6 +257,13 @@ client.on('clickMenu', (menu: MessageComponent) => { let role = await menu.guild.roles.fetch(roleid); + let names = [] + menu.clicker.member.roles.cache.forEach(r => names.push(r.name)); + let hasrole = menu.clicker.member.roles.cache.some(r => r.id === role.id), + needsrole = vals && vals.includes(opt.val); + + console.log(role.name, `[${names.join()}]`, needsrole, hasrole) + if (vals && vals.includes(opt.val) && !menu.clicker.member.roles.cache.some(r => r.id === role.id)) { await menu.clicker.member.roles.add(role); changed.add.push(role.name); @@ -260,9 +275,21 @@ client.on('clickMenu', (menu: MessageComponent) => { } } - } - menu.reply.edit('Updated Roles'); + console.log('\n'); + + let message = []; + + if (changed.add.length) + message.push(`Added \`${changed.add.join(', ')}\``); + + if (changed.rem.length) + message.push(`Removed \`${changed.rem.join(', ')}\``); + + menu.reply.edit(message.join('\n')); + + } else + menu.reply.edit('Error: Unknown menu'); }); }); @@ -277,13 +304,20 @@ client.on('clickButton', (button: MessageComponent) => { let matchingButtons = row.buttons.filter(opt => opt.id === button.id); if (matchingButtons.length) { - await button.clicker.member.roles.add(matchingButtons[0].roleid); + + let role = await button.guild.roles.fetch(matchingButtons[0].roleid); + + if (button.clicker.member.roles.cache.some(r => r.id === role.id)) { + await button.clicker.member.roles.remove(role.id); + button.reply.edit(`Added \`${role.name}\``); + } else { + await button.clicker.member.roles.remove(role.id); + button.reply.edit(`Removed \`${role.name}\``); + } break; } } - button.reply.edit('Updated Roles'); - }); });