added version 2.0

This commit is contained in:
Lukian LEIZOUR 2024-03-04 20:38:46 +01:00
parent 0163d40b4e
commit 0f18925d1a
3231 changed files with 1449 additions and 374732 deletions

View file

@ -1,159 +0,0 @@
const discord = require('discord.js');
const { commands } = require('../commands/commands');
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');
const dalle = require('../functions/discord/dalle');
const addchannel = require('../functions/discord/addchannel');
const deletechannel = require('../functions/discord/deletechannel');
const help = require('../functions/discord/help');
const { listchannels, incrementQuota, isNewUser } = require('../libs/mysql');
const { sendQuickConv } = require('../libs/openAi')
module.exports = {
newMessage: (client) => {
client.on('messageCreate', async msg => {
const channels = await listchannels();
channelId = msg.channel.id;
quota = await isNewUser(msg.author.id, msg.author.username).catch((err) => {
console.log(err);
addToLogs(err);
});
if (!channels.includes(channelId) || msg.author.bot == true) {}
else if (quota.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" });
msg.reply({ embeds: [embed] });
} else {
discordMessages = await msg.channel.messages.fetch({ limit: 8 })
discordMessages.reverse();
messages = [{"role": "system", "content": "You are a helpful assistant."}];
discordMessages.forEach(async message => {
if (msg.author.id == '1059559067846189067') {
messages.push({"role" : "assistant", "content" : message.content});
} else {
messages.push({"role" : "user", "content" : message.content});
}
});
response = await sendQuickConv(messages);
msg.reply(response.data.choices[0].message.content);
incrementQuota(msg.author.id, response.data.usage.total_tokens);
}
});
},
newInteraction: (client) => {
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
if (interaction.commandName === 'gptrequest') {
gptrequest(interaction, client);
}
else if (interaction.commandName === 'quickgpt') {
quickGptrequest(interaction, client);
}
else if (interaction.commandName === 'info') {
console.log(interaction)
}
else if (interaction.commandName === 'addconv') {
addconv(interaction, client);
}
else if (interaction.commandName === 'delconv') {
delconv(interaction, client);
}
else if (interaction.commandName === 'listconvs') {
listconvs(interaction, client);
}
else if (interaction.commandName === 'addmsg') {
addmsg(interaction, client);
}
else if (interaction.commandName === 'displayconv') {
displayconv(interaction, client);
}
else if (interaction.commandName === 'getmyguota') {
getmyguota(interaction);
}
else if (interaction.commandName === 'github') {
github(interaction, client);
}
else if (interaction.commandName === 'dalle') {
dalle(interaction, client);
}
else if (interaction.commandName === 'addchannel') {
addchannel(interaction, client);
}
else if (interaction.commandName === 'deletechannel') {
deletechannel(interaction, client);
}
else if (interaction.commandName === 'help') {
help(interaction, client);
}
});
},
ready: (client) => {
client.on('ready', async () => {
console.log(`[Discord] Logged in as ${client.user.tag} !`);
const rest = new discord.REST({ version: '10' }).setToken(process.env.DISCORD);
await rest.put(
discord.Routes.applicationCommands('1059559067846189067'),
{ body: commands },
);
console.log('[Discord] Successfully reloaded application (/) commands globally.');
client.user.setPresence({ activities: [{ name: client.guilds.cache.size + ' servers !', type: 3 }] });
n = 1;
act = [
[{ name: client.guilds.cache.size + ' servers !', type: 3 }],
[{ name: '/help command', type: 3 }],
];
setInterval(() => {
client.user.setPresence({ activities: act[n] });
if (n == 1) { n = 0; }
else { n = 1; }
}, 10000);
});
},
}

120
events/interactionCreate.js Normal file
View file

@ -0,0 +1,120 @@
const {
Events,
ButtonBuilder,
ActionRowBuilder,
ButtonStyle,
} = require("discord.js");
const { addConv, removeConv, getConv } = require("../libs/mysql.js");
const {
errorEmbed,
convBeginEmbed,
convCreatedEmbed,
} = require("../libs/embeds.js");
const { sendLog } = require("../libs/logs.js");
module.exports = {
name: Events.InteractionCreate,
async execute(interaction) {
if (interaction.isChatInputCommand()) {
const command = interaction.client.commands.get(interaction.commandName);
if (!command) {
console.error(
`No command matching ${interaction.commandName} was found.`
);
return;
}
try {
await command.execute(interaction);
} catch (error) {
sendLog(error);
}
}
if (interaction.isButton()) {
if (interaction.customId == "create_conversation") {
var channel = interaction.guild.channels.cache.get(
interaction.message.channelId
);
if (channel.type == 11) {
channel = interaction.guild.channels.cache.get(channel.parentId);
}
const embed = convBeginEmbed();
const button = new ButtonBuilder()
.setCustomId("close_conversation")
.setLabel("Close conversation")
.setStyle(ButtonStyle.Danger);
const actionRow = new ActionRowBuilder().addComponents(button);
channel = await channel.threads
.create({
name: interaction.user.username + "'s conversation",
message: {
embeds: [embed],
components: [actionRow],
},
})
.catch((err) => {
sendLog(err);
});
const embed2 = convCreatedEmbed(channel.id);
await addConv(
interaction.user.id,
channel.id,
interaction.guild.id
).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while creating the conversation."
);
return interaction.reply({ embeds: [embed], ephemeral: true });
});
await interaction.reply({ embeds: [embed2], ephemeral: true });
} else if (interaction.customId == "close_conversation") {
const conv = await getConv(interaction.message.channelId).catch(
(err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while closing the conversation."
);
return interaction.reply({ embeds: [embed], ephemeral: true });
}
);
if (conv[0].userid != interaction.user.id) {
const embed = errorEmbed("You can't close this conversation.");
return interaction.reply({ embeds: [embed], ephemeral: true });
}
var channel = interaction.guild.channels.cache.get(
interaction.message.channelId
);
await removeConv(channel.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while closing the conversation."
);
return interaction.reply({ embeds: [embed], ephemeral: true });
});
await channel.delete().catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while closing the conversation."
);
return interaction.reply({ embeds: [embed], ephemeral: true });
});
}
}
},
};

315
events/messageCreate.js Normal file
View file

@ -0,0 +1,315 @@
const { Events, EmbedBuilder } = require("discord.js");
const {
getConv,
getUser,
registerUser,
incrementQuota,
} = require("../libs/mysql.js");
const { sendQuickConv, quickAnswer } = require("../libs/openAi.js");
const { checkLastResetDate } = require("../libs/quotaReset.js");
const prompt = require("../data/prompt.json").prompt;
require("dotenv").config();
const { errorEmbed } = require("../libs/embeds.js");
const { sendLog } = require("../libs/logs.js");
module.exports = {
name: Events.MessageCreate,
async execute(message) {
conv = await getConv(message.channel.id);
if (!message.guildId && message.author.id != "1059559067846189067") {
await checkLastResetDate();
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
if (!user[0]) {
await registerUser(message.author.username, message.author.id).catch(
(err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to register you in the database."
);
return message.reply({ embeds: [embed] });
}
);
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
}
if (user[0].quota >= 0.4)
return await message.reply({
content: "You don't have enough quota to talk with the bot.",
ephemeral: true,
});
discordMessages = await message.channel.messages.fetch().catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to fetch the messages from the channel."
);
return message.reply({ embeds: [embed] });
});
discordMessages.filter((message) => message.content);
messages = [];
var i = 0;
discordMessages.forEach(async (message) => {
if (i == 6) return;
if (message.author.id == "1059559067846189067") {
messages.push({ role: "assistant", content: message.content });
i++;
} else {
messages.push({ role: "user", content: message.content });
i++;
}
});
messages.reverse();
messages.unshift({ role: "system", content: prompt });
message.channel.sendTyping().catch((err) => {
sendLog(err);
});
const response = await sendQuickConv(messages).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to send the request to the API."
);
return message.reply({ embeds: [embed] });
});
const prompt_usage = (response.data.usage.prompt_tokens * 0.001) / 1000;
const completion_usage =
(response.data.usage.completion_tokens * 0.002) / 1000;
await incrementQuota(
message.author.id,
prompt_usage + completion_usage
).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to increment your quota."
);
return message.reply({ embeds: [embed] });
});
if (response.data.choices[0].message.content.length <= 2000) {
await message.reply(response.data.choices[0].message.content);
} else {
let paragraphs = response.data.choices[0].message.content.split("\n");
messageText = "";
paragraphs.forEach((paragraph) => {
if (`${messageText}${paragraph}`.length > 2000) {
message.reply(messageText);
messageText = `${paragraph}\n`;
} else {
messageText += `${paragraph}\n`;
}
});
}
} else if (
message.content.includes(`<@${process.env.BOT_ID}>`) ||
(message.mentions.repliedUser &&
message.mentions.repliedUser.id == process.env.BOT_ID)
) {
await checkLastResetDate();
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
if (!user[0]) {
await registerUser(message.author.username, message.author.id).catch(
(err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to register you in the database."
);
return message.reply({ embeds: [embed] });
}
);
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
}
if (user[0].quota >= 0.4)
return await message.reply({
content: "You don't have enough quota to use this command.",
ephemeral: true,
});
message.channel.sendTyping().catch((err) => {
sendLog(err);
});
response = await quickAnswer(message.content).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to send the request to the API."
);
return message.reply({ embeds: [embed] });
});
const prompt_usage = (response.data.usage.prompt_tokens * 0.01) / 1000;
const completion_usage =
(response.data.usage.completion_tokens * 0.03) / 1000;
await incrementQuota(
message.author.id,
prompt_usage + completion_usage
).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to increment your quota."
);
return message.reply({ embeds: [embed] });
});
if (response.data.choices[0].message.content.length <= 2000) {
await message.reply({
content: response.data.choices[0].message.content,
});
} else {
const embed = new EmbedBuilder()
.setTitle("Answer")
.setDescription(response.data.choices[0].message.content)
.setColor("#F6C6F9")
.setFooter({ text: "Bot by @ninja_jambon" });
await message.reply({ embeds: [embed] });
}
} else if (
conv[0] &&
message.author.id != "1059559067846189067" &&
conv[0].userid == message.author.id
) {
await checkLastResetDate();
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
if (!user[0]) {
await registerUser(message.author.username, message.author.id).catch(
(err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to register you in the database."
);
return message.reply({ embeds: [embed] });
}
);
user = await getUser(message.author.id).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to get your data from the database."
);
return message.reply({ embeds: [embed] });
});
}
if (user[0].quota >= 0.4)
return await message.reply({
content: "You don't have enough quota to talk with the bot.",
ephemeral: true,
});
discordMessages = await message.channel.messages.fetch().catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to fetch the messages from the channel."
);
return message.reply({ embeds: [embed] });
});
discordMessages.filter(
(message) =>
(message.author.id == "1059559067846189067" ||
message.author.id == conv[0].userid) &&
message.content
);
messages = [];
var i = 0;
discordMessages.forEach(async (message) => {
if (i == 6) return;
if (message.author.id == "1059559067846189067") {
messages.push({ role: "assistant", content: message.content });
i++;
} else if (message.author.id == conv[0].userid) {
messages.push({ role: "user", content: message.content });
i++;
}
});
messages.reverse();
messages.unshift({ role: "system", content: prompt });
message.channel.sendTyping().catch((err) => {
sendLog(err);
});
const response = await sendQuickConv(messages).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to send the request to the API."
);
return message.reply({ embeds: [embed] });
});
const prompt_usage = (response.data.usage.prompt_tokens * 0.001) / 1000;
const completion_usage =
(response.data.usage.completion_tokens * 0.002) / 1000;
await incrementQuota(
message.author.id,
prompt_usage + completion_usage
).catch((err) => {
sendLog(err);
const embed = errorEmbed(
"An error occured while trying to increment your quota."
);
return message.reply({ embeds: [embed] });
});
if (response.data.choices[0].message.content.length <= 2000) {
await message.reply(response.data.choices[0].message.content);
} else {
let paragraphs = response.data.choices[0].message.content.split("\n");
messageText = "";
paragraphs.forEach((paragraph) => {
if (`${messageText}${paragraph}`.length > 2000) {
message.reply(messageText);
messageText = `${paragraph}\n`;
} else {
messageText += `${paragraph}\n`;
}
});
}
}
},
};

23
events/ready.js Normal file
View file

@ -0,0 +1,23 @@
const { Events } = require("discord.js");
const { sendLog } = require("../libs/logs.js");
module.exports = {
name: Events.ClientReady,
once: true,
execute(client) {
console.log(`Ready! Logged in as ${client.user.tag}`);
sendLog(`Ready! Logged in as ${client.user.tag}`);
client.user.setPresence({
activities: [{ name: client.guilds.cache.size + " servers !", type: 3 }],
});
setInterval(() => {
client.user.setPresence({
activities: [
{ name: client.guilds.cache.size + " servers !", type: 3 },
],
});
}, 10000);
},
};