const fetch = require('node-fetch'); const { Command } = require('../../../../interfaces/'); //Apparently hit ratelimits pretty damn quick and doesn't expire often. class LookupCommand extends Command { constructor(client) { super(client, { name: 'lookup', module: 'utility', usage: "", showUsage: true, parameterType: 'PLAIN', examples: [ "SvJgtEj", "discord.gg/SvJgtEj" ], restricted: true, //For now throttling: { usages: 1, duration: 30 } }); this.client = client; } async execute(message, { params }) { const regex = /discord(?:app\.com\/invite|\.gg(?:\/invite)?)\/([\w-]{2,255})/i; const match = regex.exec(params); let code = null; if(match && match[1]) { code = match[1]; } else { const restrict = /([\w-]{2,255})/i.exec(params); if(restrict && restrict[1]) { code = restrict[1]; } else { await message.respond(message.format('C_LOOKUP_FAILEDMATCH')); return undefined; } } let data = null; try { const request = await fetch(`https://discord.com/api/invite/${code}`); data = await request.json(); if(data.code && data.message) { await message.respond(message.format('C_LOOKUP_NONEXISTANT')); return undefined; } } catch(error) { await message.respond(message.format('C_LOOKUP_NONEXISTANT')); return undefined; } let fields = []; if(data.inviter) { fields.push({ name: "Inviter", value: `${data.inviter.username}#${data.inviter.discriminator} \`(${data.inviter.id})\``, inline: true }); } if(data.channel) { fields.push({ name: "Default Channel", value: `#${data.channel.name} \`(${data.channel.id})\``, inline: true }); } if(data.guild.features.length > 0) { fields.push({ name: "Features", value: data.guild.features.map(f=>`\`${f}\``).join(', '), inline: true, }); } const embed = { author: { name: `${data.guild.name} (${data.guild.id})`, icon_url: `https://cdn.discordapp.com/icons/${data.guild.id}/${data.guild.icon}.webp` }, thumbnail: { url: data.guild.splash ? `https://cdn.discordapp.com/splashes/${data.guild.id}/${data.guild.splash}.webp` : null }, description: data.guild.description || null, fields, footer: { text: `https://discord.gg/${data.code}` } }; return message.embed(embed); } } module.exports = LookupCommand;