forked from snxraven/RavenAI
129 lines
4.4 KiB
JavaScript
129 lines
4.4 KiB
JavaScript
|
|
||
|
|
||
|
const { ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle } = require('discord.js');
|
||
|
|
||
|
var unirest = require('unirest');
|
||
|
|
||
|
module.exports = {
|
||
|
name: "advanced",
|
||
|
description: "Formatted submit",
|
||
|
|
||
|
run: async (client, interaction) => {
|
||
|
// await interaction.deferReply();
|
||
|
let rand = Math.floor(Math.random() * 99999).toString();
|
||
|
|
||
|
if (!interaction.isChatInputCommand()) return;
|
||
|
|
||
|
const modal = new ModalBuilder()
|
||
|
.setCustomId(rand)
|
||
|
.setTitle('Submit to the AI');
|
||
|
|
||
|
// TODO: Add components to modal...
|
||
|
|
||
|
const promptInput = new TextInputBuilder()
|
||
|
.setCustomId('sendInput')
|
||
|
// The label is the prompt the user sees for this input
|
||
|
.setLabel("Please Provide a Prompt")
|
||
|
// Short means only a single line of text
|
||
|
.setStyle(TextInputStyle.Paragraph);
|
||
|
|
||
|
|
||
|
|
||
|
// An action row only holds one text input,
|
||
|
// so you need one action row per text input.
|
||
|
const firstActionRow = new ActionRowBuilder().addComponents([promptInput]);
|
||
|
|
||
|
// Add inputs to the modal
|
||
|
modal.addComponents([firstActionRow]);
|
||
|
|
||
|
await interaction.showModal(modal);
|
||
|
|
||
|
client.on('interactionCreate', interaction => {
|
||
|
|
||
|
if (interaction.type !== 5){
|
||
|
|
||
|
} else {
|
||
|
|
||
|
if (interaction.customId === rand) {
|
||
|
(async () => {
|
||
|
await interaction.reply("Please wait while I think about this...")
|
||
|
})()
|
||
|
|
||
|
// Get the data entered by the user
|
||
|
const data = interaction.fields.getTextInputValue('sendInput');
|
||
|
|
||
|
function detectCodingLanguages(str) {
|
||
|
const languages = {
|
||
|
'javascript': 'js',
|
||
|
'nodejs': 'js',
|
||
|
'node': 'js',
|
||
|
'python': 'py',
|
||
|
'ruby': 'rb',
|
||
|
'c#': 'csharp',
|
||
|
'c++': 'cpp',
|
||
|
'php': 'php',
|
||
|
'go': 'go',
|
||
|
'bash': 'bash'
|
||
|
|
||
|
};
|
||
|
|
||
|
let detectedLanguages = [];
|
||
|
|
||
|
for (let language in languages) {
|
||
|
if (str.includes(language)) {
|
||
|
detectedLanguages.push(languages[language]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return detectedLanguages;
|
||
|
}
|
||
|
|
||
|
console.log(detectCodingLanguages(data)[0])
|
||
|
|
||
|
if (detectCodingLanguages(data)) {
|
||
|
lang = detectCodingLanguages(data)[0]
|
||
|
} else {
|
||
|
lang = "js"
|
||
|
}
|
||
|
|
||
|
unirest
|
||
|
.post('https://codex-ai-v9q6.onrender.com/')
|
||
|
.headers({ 'Accept': 'application/json', 'Content-Type': 'application/json' })
|
||
|
.send({ "prompt": data })
|
||
|
.then((response) => {
|
||
|
if (response.body.bot.length > 1980) {
|
||
|
fs.writeFile('/tmp/paste', response.body.bot, err => {
|
||
|
if (err) {
|
||
|
console.error(err)
|
||
|
return
|
||
|
}
|
||
|
})
|
||
|
cmd("sleep 2; cat /tmp/paste | dpaste").then(pasteout => {
|
||
|
const mainEmbed = new EmbedBuilder()
|
||
|
.setColor('#0099ff')
|
||
|
.addFields(
|
||
|
{ name: 'Please check the below output log:', value: pasteout.stdout.replace("Pro tip: you can password protect your paste just by typing a username and password after your paste command.", "").replace("Paste Saved: ", "").replace("-------------------------------------------------------", "") },
|
||
|
).setTitle("Response too large")
|
||
|
.setDescription("Our AI was too Powerful!")
|
||
|
.setFooter({ text: `Requested by ${interaction.user.tag}`, iconURL: `${interaction.user.displayAvatarURL()}` });
|
||
|
(async () => {
|
||
|
|
||
|
return await interaction.editReply({ embeds: [mainEmbed] })
|
||
|
|
||
|
})();
|
||
|
|
||
|
})
|
||
|
} else {
|
||
|
(async () => {
|
||
|
|
||
|
await interaction.editReply("```" + lang + response.body.bot + "```")
|
||
|
})();
|
||
|
|
||
|
}
|
||
|
})
|
||
|
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|