added version 2.0
This commit is contained in:
parent
0163d40b4e
commit
0f18925d1a
3231 changed files with 1449 additions and 374732 deletions
|
@ -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
120
events/interactionCreate.js
Normal 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
315
events/messageCreate.js
Normal 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
23
events/ready.js
Normal 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);
|
||||
},
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue