110 lines
3.1 KiB
JavaScript
110 lines
3.1 KiB
JavaScript
|
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: "<invite-code>",
|
||
|
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;
|