UNPKG

kurdistaname47

Version:

kurdistan 47 bremin

139 lines (119 loc) 3.85 kB
module.exports = async function buttonss(content, options, client, message) { if (!content) return `message.buttons('Hello World!', { buttons: [ { style: 'green', label: 'Click to function!', id: 'click_to_function' }, { style: 'url', label: 'Vote for me!', url: 'https://google.com/' } ] })` if (!options.buttons) { options.buttons = []; } if (!Array.isArray(options.buttons)) { throw new Error('The buttons must be an array'); } /** * @type {Array<Object>} */ let buttons = []; let styles = ['blurple', 'grey', 'green', 'red', 'url']; options.buttons.forEach((x, i) => { if (!x.style) x.style = 'blurple'; if (!styles.includes(x.style)) { throw new Error(`#${i} button has invalid style, recived ${x.style}`); } if (!x.label) { throw new Error(`#${i} button don't has a label`); } if (typeof (x.label) !== 'string') x.label = String(x.label); if (x.style === 'url') { if (!x.url) { throw new Error(`If the button style is "url", you must provide url`); } } else { if (!x.id) { throw new Error(`If the button style is not "url", you must provide custom id`); } } let style; if (x.style === 'blurple') { style = 1; } else if (x.style === 'grey') { style = 2; } else if (x.style === 'green') { style = 3; } else if (x.style === 'red') { style = 4; } else if (x.style === 'url') { style = 5; } let data = { type: 2, style: style, label: x.label, custom_id: x.id || null, emoji: { name: null, id: null, animated: false, }, url: x.url || null } buttons.push(data); }) options.buttons === null; client.ws.on('INTERACTION_CREATE', async (data) => { let typeStyles = { 1: 'blurple', 2: 'grey', 3: 'green', 4: 'red', 5: 'url' }; await client.channels.cache.get(data.channel_id).messages.fetch(); let message = await client.channels.cache.get(data.channel_id).messages.cache.get(data.message.id); let clicker = await client.guilds.cache.get(data.guild_id).members.cache.get(data.member.user.id); client.emit('clickButton', { version: data.version, type: data.type, style: typeStyles[data.type], token: data.token, id: data.data.custom_id, discordId: data.id, applicationId: data.application_id, clicker: clicker, message }) if (data.data.custom_id === "next" || data.data.custom_id === "back") { await client.api.interactions(data.id, data.token).callback.post({ data: { type: 6, data: { flags: data ? 1 << 6 : null, }, }, }); } }); return await client.api.channels[message.channel.id].messages.post({ headers: { "Content-Type": 'applications/json' }, data: { content: content, components: [{ type: 1, components: buttons }], options, embed: options.embed || null } }); }