From 5c93e9d8f7b52949fd923c2563f9ac48f47bf4fa Mon Sep 17 00:00:00 2001 From: Lukian Date: Tue, 6 Jun 2023 18:19:37 +0200 Subject: [PATCH] commit --- commands/commands.js | 13 + events/discordEvents.js | 402 +-------------------------- functions/discord/addconv.js | 39 +++ functions/discord/addmsg.js | 81 ++++++ functions/discord/delconv.js | 39 +++ functions/discord/displayconv.js | 70 +++++ functions/discord/getmyguota.js | 26 ++ functions/discord/github.js | 20 ++ functions/discord/gptrequest.js | 72 +++++ functions/discord/listconvs.js | 32 +++ functions/discord/quickGptrequest.js | 72 +++++ 11 files changed, 478 insertions(+), 388 deletions(-) create mode 100644 functions/discord/addconv.js create mode 100644 functions/discord/addmsg.js create mode 100644 functions/discord/delconv.js create mode 100644 functions/discord/displayconv.js create mode 100644 functions/discord/getmyguota.js create mode 100644 functions/discord/github.js create mode 100644 functions/discord/gptrequest.js create mode 100644 functions/discord/listconvs.js create mode 100644 functions/discord/quickGptrequest.js diff --git a/commands/commands.js b/commands/commands.js index cd513a5..3169906 100644 --- a/commands/commands.js +++ b/commands/commands.js @@ -102,6 +102,19 @@ const commands = [ name : 'github', description : 'Get the github link of the bot', }, + + { + name : 'dalle', + description : 'Make a request to the DALL-E API', + options : [ + { + name : 'query', + description : 'The query you want to ask to the API', + type : ApplicationCommandOptionType.String, + required : true, + }, + ], + }, ]; module.exports = { commands }; \ No newline at end of file diff --git a/events/discordEvents.js b/events/discordEvents.js index eb712dd..74e98c1 100644 --- a/events/discordEvents.js +++ b/events/discordEvents.js @@ -1,397 +1,19 @@ const discord = require('discord.js'); const { addToLogs } = require('../libs/botTools'); -const { generateImage, answerQuestion, sendConv, quickAnswer } = require('../libs/openAi'); -const { incrementQuota, addConv, delConv, getConvs, addMessage, getMessages, isNewUser } = require('../libs/mysql'); +const { generateImage, } = require('../libs/openAi'); const { commands } = require('../commands/commands'); -async function gptrequest(interaction, client) { - await interaction.deferReply(); - - quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (quota >= 200000) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) - .setDescription("You have a quota of " + quota + " tokens, please wait until reset (every months)") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - } - else { - answerQuestion(interaction.options.get('question').value).then((res) => { - incrementQuota(interaction.member.user.id, res.data.usage.total_tokens).catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (res.data.choices[0].message.content.length > 4096) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setTitle("Question : " + interaction.options.get('question').value) - .setDescription("The answer is too long to be displayed, please try again with a shorter question.") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); - interaction.editReply({ embeds: [embed] }); - } - else { - title = "Question : " + interaction.options.get('question').value; - - if (title.length > 256) { - title = title.slice(0, 253) + "..."; - } - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setTitle(title) - .setDescription(res.data.choices[0].message.content) - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); - interaction.editReply({ embeds: [embed] }); - } - }).catch((err) => { - console.log(err); - addToLogs(err); - interaction.editReply("Something went wrong"); - }) - - console.log('[Discord] Generating answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Generating answer to : ' + interaction.options.get('question').value); - } -} - - -async function quickGptrequest(interaction, client) { - await interaction.deferReply(); - - quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (quota >= 200000) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) - .setDescription("You have a quota of " + quota + " tokens, please wait until reset (every months)") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - } - else { - quickAnswer(interaction.options.get('question').value).then((res) => { - incrementQuota(interaction.member.user.id, res.data.usage.total_tokens).catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (res.data.choices[0].message.content.length > 4096) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setTitle("Question : " + interaction.options.get('question').value) - .setDescription("The answer is too long to be displayed, please try again with a shorter question.") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); - interaction.editReply({ embeds: [embed] }); - } - else { - title = "Question : " + interaction.options.get('question').value; - - if (title.length > 256) { - title = title.slice(0, 253) + "..."; - } - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setTitle(title) - .setDescription(res.data.choices[0].message.content) - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); - interaction.editReply({ embeds: [embed] }); - } - }).catch((err) => { - console.log(err); - addToLogs(err); - interaction.editReply("Something went wrong"); - }) - - console.log('[Discord] Generating answer to : ' + interaction.options.get('question').value); - addToLogs('[Discord] Generating answer to : ' + interaction.options.get('question').value); - } -} - - -async function addconv(interaction, client) { - await interaction.deferReply(); - convs = await getConvs().catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (!interaction.options.get('name').value.includes(" ") && !convs.includes(interaction.options.get('name').value)) { - await addConv(interaction.options.get('name').value); - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Conversation added", iconURL: client.user.displayAvatarURL() }) - .setDescription("Conversation " + interaction.options.get('name').value + " added to db") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Added conversation : ' + interaction.options.get('name').value); - console.log('[Discord] Added conversation : ' + interaction.options.get('name').value); - } else { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) - .setDescription("Verify the name of the conversation (it must not contain spaces and must be unique).") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Error adding conversation : ' + interaction.options.get('name').value); - console.log('[Discord] Error adding conversation : ' + interaction.options.get('name').value); - } -} - - - -async function delconv(interaction, client) { - await interaction.deferReply(); - - convs = await getConvs().catch((err) => { - console.log(err); - addToLogs(err); - }); - if (!convs.includes(interaction.options.get('name').value)) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) - .setDescription("Conversation not found in the database") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); - console.log('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); - } else { - await delConv(interaction.options.get('name').value); - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Conversation deleted", iconURL: client.user.displayAvatarURL() }) - .setDescription("Conversation " + interaction.options.get('name').value + " deleted from the database") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Conversation deleted from the database : ' + interaction.options.get('name').value); - console.log('[Discord] Conversation deleted from the database : ' + interaction.options.get('name').value); - } -} - - -async function listconvs(interaction, client) { - convs = await getConvs().catch((err) => { - console.log(err); - addToLogs(err); - }); - message = ""; - if (convs.length == 0) { - message = "No conversations in the database"; - } else { - convs.forEach(element => { - message += "- **" + element + "**\n\n"; - }); - } - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Conversations list", iconURL: client.user.displayAvatarURL() }) - .setDescription(message) - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.reply({ embeds: [embed] }); - - addToLogs('[Discord] Sent conversations list'); - console.log('[Discord] Sent conversations list'); -} - - -async function addmsg(interaction, client) { - await interaction.deferReply(); - - quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (quota >= 200000) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) - .setDescription("Quota exceeded, please wait untill reset (every month)") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Quota exceeded for user : ' + interaction.member.user.username); - console.log('[Discord] Quota exceeded for user : ' + interaction.member.user.username); - } else { - await addMessage(interaction.options.get('name').value, "user", interaction.options.get('message').value.replace(/"/g, "\'").replace("\""), interaction.member.user.username).catch((err) => { - console.log(err); - addToLogs(err); - }); - - messages = await getMessages(interaction.options.get('name').value, "role").catch((err) => { - console.log(err); - addToLogs(err); - }); - - sendConv(messages).then((res) => { - addMessage(interaction.options.get('name').value, "assistant", res.data.choices[0].message.content.replace(/"/g, "\'").replace("\""), "Chaise bot").catch((err) => { - console.log(err); - addToLogs(err); - }); - - const embed_user = new discord.EmbedBuilder() - .setColor(0xBBFAF4) - .setAuthor({ name: interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setDescription(interaction.options.get('message').value); - - const embed_bot = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Chaise bot", iconURL: client.user.displayAvatarURL() }) - .setDescription(res.data.choices[0].message.content) - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed_user, embed_bot] }); - - addToLogs('[Discord] Added message to conversation : ' + interaction.options.get('name').value); - console.log('[Discord] Added message to conversation : ' + interaction.options.get('name').value); - }).catch((err) => { - console.log(err); - }); - } -} - - -async function displayconv(interaction, client) { - await interaction.deferReply(); - - if (interaction.options.get('name').value.includes(" ")) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) - .setDescription("Conversation name can't contain spaces") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Conversation name can\'t contain spaces'); - console.log('[Discord] Conversation name can\'t contain spaces'); - } else { - convs = await getConvs().catch((err) => { - console.log(err); - addToLogs(err); - }); - - if (!convs.includes(interaction.options.get('name').value)) { - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) - .setDescription("Conversation not found in the database") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Conversation not found in the database'); - console.log('[Discord] Conversation not found in the database'); - } - - messages = await getMessages(interaction.options.get('name').value, "user").catch((err) => { - console.log(err); - addToLogs(err); - }); - - embed_text = ""; - - messages.forEach(element => { - if (element.user == "System") { } - else { - embed_text += "**" + element.user + "** : " + element.content + "\n\n"; - } - }); - - if (embed_text.length > 4096) { - embed_text = "Conversation too long to display"; - } - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Conversation : " + interaction.options.get('name').value, iconURL: client.user.displayAvatarURL() }) - .setDescription(embed_text) - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Displayed conversation : ' + interaction.options.get('name').value); - console.log('[Discord] Displayed conversation : ' + interaction.options.get('name').value); - } -} - - -async function getmyguota(interaction) { - await interaction.deferReply(); - - quota = (await isNewUser(interaction.member.user.id, interaction.member.user.username).catch((error) => { - console.log(error); - addToLogs(error); - })).quota; - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Quota : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) - .setDescription("You have " + (200000 - quota) + " tokens left this month") - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Quota requested by ' + interaction.member.user.username); - console.log('[Discord] Quota requested by ' + interaction.member.user.username); -} - - -async function github(interaction, client) { - await interaction.deferReply(); - - const embed = new discord.EmbedBuilder() - .setColor(0xFABBDE) - .setAuthor({ name: "Github", iconURL: client.user.displayAvatarURL() }) - .setDescription('Link of the Gihhub repository :\n https://github.com/Ninja-Jambon/chaise_bot') - .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); - - interaction.editReply({ embeds: [embed] }); - - addToLogs('[Discord] Github requested by ' + interaction.member.user.username); - console.log('[Discord] Github requested by ' + interaction.member.user.username); -} +const gptrequest = require('../functions/discord/gptrequest'); +const quickGptrequest = require('../functions/discord/quickGptrequest'); +const addconv = require('../functions/discord/addconv'); +const delconv = require('../functions/discord/delconv'); +const listconvs = require('../functions/discord/listconvs'); +const addmsg = require('../functions/discord/addmsg'); +const displayconv = require('../functions/discord/displayconv'); +const getmyguota = require('../functions/discord/getmyguota'); +const github = require('../functions/discord/github'); module.exports = { newMessage: (client) => { @@ -458,6 +80,10 @@ module.exports = { else if (interaction.commandName === 'github') { github(interaction, client); } + + else if (interaction.commandName === 'dalle') { + github(interaction, client); + } }); }, diff --git a/functions/discord/addconv.js b/functions/discord/addconv.js new file mode 100644 index 0000000..d87497f --- /dev/null +++ b/functions/discord/addconv.js @@ -0,0 +1,39 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { addConv, getConvs } = require('../../libs/mysql'); + +async function addconv(interaction, client) { + await interaction.deferReply(); + convs = await getConvs().catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (!interaction.options.get('name').value.includes(" ") && !convs.includes(interaction.options.get('name').value)) { + await addConv(interaction.options.get('name').value); + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Conversation added", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation " + interaction.options.get('name').value + " added to db") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Added conversation : ' + interaction.options.get('name').value); + console.log('[Discord] Added conversation : ' + interaction.options.get('name').value); + } else { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) + .setDescription("Verify the name of the conversation (it must not contain spaces and must be unique).") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Error adding conversation : ' + interaction.options.get('name').value); + console.log('[Discord] Error adding conversation : ' + interaction.options.get('name').value); + } +} + +module.exports = addconv; \ No newline at end of file diff --git a/functions/discord/addmsg.js b/functions/discord/addmsg.js new file mode 100644 index 0000000..8c8d525 --- /dev/null +++ b/functions/discord/addmsg.js @@ -0,0 +1,81 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { sendConv } = require('../../libs/openAi'); +const { getConvs, addMessage, getMessages, isNewUser } = require('../../libs/mysql'); + +async function addmsg(interaction, client) { + await interaction.deferReply(); + + quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (quota >= 200000) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) + .setDescription("Quota exceeded, please wait untill reset (every month)") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Quota exceeded for user : ' + interaction.member.user.username); + console.log('[Discord] Quota exceeded for user : ' + interaction.member.user.username); + } else { + convs = await getConvs().catch((err) => { + console.log(err); + addToLogs(err); + }); + if (!convs.includes(interaction.options.get('name').value)) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation not found in the database") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); + console.log('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); + } else { + await addMessage(interaction.options.get('name').value, "user", interaction.options.get('message').value.replace(/"/g, "\'").replace("\""), interaction.member.user.username).catch((err) => { + console.log(err); + addToLogs(err); + }); + + messages = await getMessages(interaction.options.get('name').value, "role").catch((err) => { + console.log(err); + addToLogs(err); + }); + + sendConv(messages).then((res) => { + addMessage(interaction.options.get('name').value, "assistant", res.data.choices[0].message.content.replace(/"/g, "\'").replace("\""), "Chaise bot").catch((err) => { + console.log(err); + addToLogs(err); + }); + + const embed_user = new discord.EmbedBuilder() + .setColor(0xBBFAF4) + .setAuthor({ name: interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setDescription(interaction.options.get('message').value); + + const embed_bot = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Chaise bot", iconURL: client.user.displayAvatarURL() }) + .setDescription(res.data.choices[0].message.content) + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed_user, embed_bot] }); + + addToLogs('[Discord] Added message to conversation : ' + interaction.options.get('name').value); + console.log('[Discord] Added message to conversation : ' + interaction.options.get('name').value); + }).catch((err) => { + console.log(err); + }) + } + } +} + +module.exports = addmsg; \ No newline at end of file diff --git a/functions/discord/delconv.js b/functions/discord/delconv.js new file mode 100644 index 0000000..3257abc --- /dev/null +++ b/functions/discord/delconv.js @@ -0,0 +1,39 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { delConv, getConvs } = require('../../libs/mysql'); + +async function delconv(interaction, client) { + await interaction.deferReply(); + + convs = await getConvs().catch((err) => { + console.log(err); + addToLogs(err); + }); + if (!convs.includes(interaction.options.get('name').value)) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation not found in the database") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); + console.log('[Discord] Conversation not found in the database : ' + interaction.options.get('name').value); + } else { + await delConv(interaction.options.get('name').value); + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Conversation deleted", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation " + interaction.options.get('name').value + " deleted from the database") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Conversation deleted from the database : ' + interaction.options.get('name').value); + console.log('[Discord] Conversation deleted from the database : ' + interaction.options.get('name').value); + } +} + +module.exports = delconv; \ No newline at end of file diff --git a/functions/discord/displayconv.js b/functions/discord/displayconv.js new file mode 100644 index 0000000..2cf21fa --- /dev/null +++ b/functions/discord/displayconv.js @@ -0,0 +1,70 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { getConvs, getMessages } = require('../../libs/mysql'); + +async function displayconv(interaction, client) { + await interaction.deferReply(); + + if (interaction.options.get('name').value.includes(" ")) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation name can't contain spaces") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Conversation name can\'t contain spaces'); + console.log('[Discord] Conversation name can\'t contain spaces'); + } else { + convs = await getConvs().catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (!convs.includes(interaction.options.get('name').value)) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Error", iconURL: client.user.displayAvatarURL() }) + .setDescription("Conversation not found in the database") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Conversation not found in the database'); + console.log('[Discord] Conversation not found in the database'); + } + + messages = await getMessages(interaction.options.get('name').value, "user").catch((err) => { + console.log(err); + addToLogs(err); + }); + + embed_text = ""; + + messages.forEach(element => { + if (element.user == "System") { } + else { + embed_text += "**" + element.user + "** : " + element.content + "\n\n"; + } + }); + + if (embed_text.length > 4096) { + embed_text = "Conversation too long to display"; + } + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Conversation : " + interaction.options.get('name').value, iconURL: client.user.displayAvatarURL() }) + .setDescription(embed_text) + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Displayed conversation : ' + interaction.options.get('name').value); + console.log('[Discord] Displayed conversation : ' + interaction.options.get('name').value); + } +} + +module.exports = displayconv; \ No newline at end of file diff --git a/functions/discord/getmyguota.js b/functions/discord/getmyguota.js new file mode 100644 index 0000000..12d8de7 --- /dev/null +++ b/functions/discord/getmyguota.js @@ -0,0 +1,26 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { isNewUser } = require('../../libs/mysql'); + +async function getmyguota(interaction) { + await interaction.deferReply(); + + quota = (await isNewUser(interaction.member.user.id, interaction.member.user.username).catch((error) => { + console.log(error); + addToLogs(error); + })).quota; + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Quota : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setDescription("You have " + (200000 - quota) + " tokens left this month") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Quota requested by ' + interaction.member.user.username); + console.log('[Discord] Quota requested by ' + interaction.member.user.username); +} + +module.exports = getmyguota ; \ No newline at end of file diff --git a/functions/discord/github.js b/functions/discord/github.js new file mode 100644 index 0000000..fcb4052 --- /dev/null +++ b/functions/discord/github.js @@ -0,0 +1,20 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); + +async function github(interaction, client) { + await interaction.deferReply(); + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Github", iconURL: client.user.displayAvatarURL() }) + .setDescription('Link of the Gihhub repository :\n https://github.com/Ninja-Jambon/chaise_bot') + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + + addToLogs('[Discord] Github requested by ' + interaction.member.user.username); + console.log('[Discord] Github requested by ' + interaction.member.user.username); +} + +module.exports = github; \ No newline at end of file diff --git a/functions/discord/gptrequest.js b/functions/discord/gptrequest.js new file mode 100644 index 0000000..80f7585 --- /dev/null +++ b/functions/discord/gptrequest.js @@ -0,0 +1,72 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { answerQuestion } = require('../../libs/openAi'); +const { incrementQuota, isNewUser } = require('../../libs/mysql'); + +async function gptrequest(interaction, client) { + await interaction.deferReply(); + + quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (quota >= 200000) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) + .setDescription("You have a quota of " + quota + " tokens, please wait until reset (every months)") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + } + else { + answerQuestion(interaction.options.get('question').value).then((res) => { + incrementQuota(interaction.member.user.id, res.data.usage.total_tokens).catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (res.data.choices[0].message.content.length > 4096) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setTitle("Question : " + interaction.options.get('question').value) + .setDescription("The answer is too long to be displayed, please try again with a shorter question.") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); + interaction.editReply({ embeds: [embed] }); + } + else { + title = "Question : " + interaction.options.get('question').value; + + if (title.length > 256) { + title = title.slice(0, 253) + "..."; + } + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setTitle(title) + .setDescription(res.data.choices[0].message.content) + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); + interaction.editReply({ embeds: [embed] }); + } + }).catch((err) => { + console.log(err); + addToLogs(err); + interaction.editReply("Something went wrong"); + }) + + console.log('[Discord] Generating answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Generating answer to : ' + interaction.options.get('question').value); + } +} + +module.exports = gptrequest; \ No newline at end of file diff --git a/functions/discord/listconvs.js b/functions/discord/listconvs.js new file mode 100644 index 0000000..5892b4e --- /dev/null +++ b/functions/discord/listconvs.js @@ -0,0 +1,32 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { getConvs } = require('../../libs/mysql'); + +async function listconvs(interaction, client) { + convs = await getConvs().catch((err) => { + console.log(err); + addToLogs(err); + }); + message = ""; + if (convs.length == 0) { + message = "No conversations in the database"; + } else { + convs.forEach(element => { + message += "- **" + element + "**\n\n"; + }); + } + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Conversations list", iconURL: client.user.displayAvatarURL() }) + .setDescription(message) + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.reply({ embeds: [embed] }); + + addToLogs('[Discord] Sent conversations list'); + console.log('[Discord] Sent conversations list'); +} + +module.exports = listconvs; \ No newline at end of file diff --git a/functions/discord/quickGptrequest.js b/functions/discord/quickGptrequest.js new file mode 100644 index 0000000..c792b55 --- /dev/null +++ b/functions/discord/quickGptrequest.js @@ -0,0 +1,72 @@ +const discord = require('discord.js'); + +const { addToLogs } = require('../../libs/botTools'); +const { quickAnswer } = require('../../libs/openAi'); +const { incrementQuota, isNewUser } = require('../../libs/mysql'); + +async function quickGptrequest(interaction, client) { + await interaction.deferReply(); + + quota = isNewUser(interaction.member.user.id, interaction.member.user.username).catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (quota >= 200000) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Quota exceeded", iconURL: client.user.displayAvatarURL() }) + .setDescription("You have a quota of " + quota + " tokens, please wait until reset (every months)") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + interaction.editReply({ embeds: [embed] }); + } + else { + quickAnswer(interaction.options.get('question').value).then((res) => { + incrementQuota(interaction.member.user.id, res.data.usage.total_tokens).catch((err) => { + console.log(err); + addToLogs(err); + }); + + if (res.data.choices[0].message.content.length > 4096) { + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setTitle("Question : " + interaction.options.get('question').value) + .setDescription("The answer is too long to be displayed, please try again with a shorter question.") + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); + interaction.editReply({ embeds: [embed] }); + } + else { + title = "Question : " + interaction.options.get('question').value; + + if (title.length > 256) { + title = title.slice(0, 253) + "..."; + } + + const embed = new discord.EmbedBuilder() + .setColor(0xFABBDE) + .setAuthor({ name: "Reply to : " + interaction.member.user.username, iconURL: "https://cdn.discordapp.com/avatars/" + interaction.member.user.id + "/" + interaction.member.user.avatar + ".jpeg" }) + .setTitle(title) + .setDescription(res.data.choices[0].message.content) + .setFooter({ text: "Powered by OpenAI https://www.openai.com/", iconURL: "https://seeklogo.com/images/O/open-ai-logo-8B9BFEDC26-seeklogo.com.png" }); + + console.log('[Discord] Sent answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Sent answer to : ' + interaction.options.get('question').value); + interaction.editReply({ embeds: [embed] }); + } + }).catch((err) => { + console.log(err); + addToLogs(err); + interaction.editReply("Something went wrong"); + }) + + console.log('[Discord] Generating answer to : ' + interaction.options.get('question').value); + addToLogs('[Discord] Generating answer to : ' + interaction.options.get('question').value); + } +} + +module.exports = quickGptrequest; \ No newline at end of file