Last active
July 5, 2022 06:49
-
-
Save PhantomNimbi/b49abc8594e426b9afe01fbc2f60c1e8 to your computer and use it in GitHub Desktop.
Pylon Waifu Command using Waifu.Pics API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as app from '../config'; | |
let config = { | |
slashCommands: discord.interactions.commands, | |
permissions: { | |
manage_channels: discord.Permissions.MANAGE_CHANNELS, | |
}, | |
logger: { | |
channel: '927217111342936074', | |
color: discord.decor.RoleColors.DARK_RED, | |
}, | |
embeds: { | |
color: discord.decor.RoleColors.BLUE, | |
banner_image: | |
'https://raw.githubusercontent.com/Waifu-pics/waifu-api/master/.github/assets/banner.png', | |
}, | |
tags: { | |
sfw: [ | |
'waifu', | |
'neko', | |
'shinobu', | |
'megumin', | |
'bully', | |
'cuddle', | |
'cry', | |
'hug', | |
'awoo', | |
'kiss', | |
'lick', | |
'pat', | |
'smug', | |
'bonk', | |
'yeet', | |
'blush', | |
'smile', | |
'wave', | |
'highfive', | |
'handhold', | |
'nom', | |
'bite', | |
'glomp', | |
'slap', | |
'kill', | |
'kick', | |
'happy', | |
'wink', | |
'poke', | |
'dance', | |
'cringe', | |
], | |
nsfw: ['waifu', 'neko', 'trap', 'blowjob'], | |
}, | |
options: ['sfw', 'nsfw', 'about'], | |
}; | |
let slashCommands = config.slashCommands; | |
let commands = { | |
tags: { | |
sfw: config.tags.sfw, | |
nsfw: config.tags.nsfw, | |
}, | |
options: config.options, | |
}; | |
const logger = { | |
channel_id: config.logger.channel, | |
embed_color: config.logger.color, | |
}; | |
const embeds = { | |
color: { | |
blue: config.embeds.color, | |
}, | |
image: config.embeds.banner_image, | |
}; | |
slashCommands.register( | |
{ | |
name: 'waifu', | |
description: 'Get a random waifu image by tag', | |
ackBehavior: slashCommands.AckBehavior.AUTO_EPHEMERAL, | |
options: (opts) => ({ | |
choice: opts.string({ | |
name: 'tag', | |
description: 'Select a tag', | |
required: false, | |
}), | |
type: opts.string({ | |
name: 'option', | |
description: 'Select an option', | |
required: false, | |
choices: ['sfw', 'nsfw', 'about'], | |
}), | |
}), | |
}, | |
async (interaction, { type, choice }) => { | |
let self = await discord.getBotUser(); | |
if (type == 'about') { | |
let sfw_list = commands.tags.sfw.toString().replaceAll(',', ', '); | |
let nsfw_list = commands.tags.nsfw.toString().replaceAll(',', ', '); | |
let options_list = commands.options.toString().replaceAll(',', ', '); | |
let embed = new discord.Embed() | |
.setTitle('Waifu Tags') | |
.setDescription( | |
[ | |
'Here is a list of available tags for use with the `/waifu` command.', | |
'', | |
].join('\n') | |
) | |
.setFields([ | |
{ | |
name: 'Options', | |
value: '```\n' + options_list + '\n```', | |
inline: false, | |
}, | |
{ | |
name: 'SFW Tags', | |
value: '```\n' + sfw_list + '\n```', | |
inline: false, | |
}, | |
{ | |
name: 'NSFW Tags', | |
value: '```\n' + nsfw_list + '\n```', | |
inline: false, | |
}, | |
]) | |
.setImage({ url: embeds.image }) | |
.setTimestamp(new Date().toISOString()) | |
.setColor(embeds.color.blue) | |
.setFooter({ | |
text: 'Powered by ' + self.username, | |
iconUrl: self.getAvatarUrl(), | |
}); | |
await interaction.respond({ embeds: [embed] }).catch((_) => { | |
interaction.respondEphemeral( | |
[ | |
':warning: **__Error Triggered__** :warning:', | |
'', | |
'```ts', | |
`${_}`, | |
'```', | |
].join('\n') | |
); | |
console.log( | |
`>> | (${_.code}) ${_.name}: ${_.message} \n------------------------------------------------------------\n${_.stack}` | |
); | |
}); | |
} else { | |
let logChannel = await discord.getTextChannel(logger.channel_id); | |
if (type && choice) { | |
let req = await fetch(`https://waifu.pics/api/${type}/${choice}`); | |
let data = await req.json(); | |
let url = data['url']; | |
let embed = new discord.Embed() | |
.setDescription(`Direct Link: [Link](${url})`) | |
.setImage({ url: url }) | |
.setTimestamp(new Date().toISOString()) | |
.setColor(embeds.color.blue) | |
.setFooter({ | |
text: 'Powered by ' + self.username, | |
iconUrl: self.getAvatarUrl(), | |
}); | |
await interaction.respond({ embeds: [embed] }).catch((_) => { | |
interaction.respondEphemeral( | |
[ | |
':warning: **__Error Triggered__** :warning:', | |
'', | |
'```ts', | |
`${_}`, | |
'```', | |
].join('\n') | |
); | |
console.log( | |
`>> | (${_.code}) ${_.name}: ${_.message} \n------------------------------------------------------------\n${_.stack}` | |
); | |
let embed = new discord.Embed() | |
.setTitle(':warning: Error Triggered :warning:') | |
.setFields([ | |
{ | |
name: 'Error Code', | |
value: '```ts\n' + _.code + '\n```', | |
inline: true, | |
}, | |
{ | |
name: 'Error Name', | |
value: '```ts\n' + _.name + '\n```', | |
inline: true, | |
}, | |
{ name: 'Error Message', value: _.message, inline: false }, | |
{ | |
name: 'Error Stack', | |
value: ['```ts', `${_.stack}`, '```'].join('\n'), | |
inline: false, | |
}, | |
]) | |
.setColor(logger.embed_color) | |
.setTimestamp(new Date().toISOString()) | |
.setFooter({ | |
text: 'Powered by ' + self.username, | |
iconUrl: self.getAvatarUrl(), | |
}); | |
logChannel?.sendMessage(embed); | |
}); | |
} | |
} | |
} | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment