added version 2.0
This commit is contained in:
parent
0163d40b4e
commit
0f18925d1a
3231 changed files with 1449 additions and 374732 deletions
|
@ -1,11 +0,0 @@
|
|||
const fs = require('fs');
|
||||
|
||||
function addToLogs(message) {
|
||||
fs.appendFile('./logs/logs.txt', message + "\n", err => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { addToLogs };
|
62
libs/embeds.js
Normal file
62
libs/embeds.js
Normal file
|
@ -0,0 +1,62 @@
|
|||
const { EmbedBuilder } = require("discord.js");
|
||||
|
||||
function errorEmbed(error) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle("Error")
|
||||
.setDescription(error)
|
||||
.setColor("#F6C6F9")
|
||||
.setFooter({ text: "Bot by @ninja_jambon" });
|
||||
}
|
||||
|
||||
function convBeginEmbed() {
|
||||
return new EmbedBuilder()
|
||||
.setTitle("Conversation beginning")
|
||||
.setDescription(
|
||||
"Click on the button below or use the command **/closeconv** to close the conversation."
|
||||
)
|
||||
.setColor("#F6C6F9")
|
||||
.setFooter({ text: "Bot by @ninja_jambon" });
|
||||
}
|
||||
|
||||
function convCreatedEmbed(channelId) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle("Conversation created")
|
||||
.setDescription(`Your conversation has been created at <#${channelId}>.`)
|
||||
.setColor("#F6C6F9")
|
||||
.setFooter({ text: "Bot by @ninja_jambon" });
|
||||
}
|
||||
|
||||
function requestResponseEmbed(
|
||||
user,
|
||||
prompt,
|
||||
response,
|
||||
quota,
|
||||
prompt_usage,
|
||||
completion_usage
|
||||
) {
|
||||
return new EmbedBuilder()
|
||||
.setAuthor({
|
||||
name: user.username,
|
||||
iconURL:
|
||||
"https://cdn.discordapp.com/avatars/" +
|
||||
user.id +
|
||||
"/" +
|
||||
user.avatar +
|
||||
".jpeg",
|
||||
})
|
||||
.setTitle(prompt)
|
||||
.setDescription(response)
|
||||
.setFooter({
|
||||
text: `Quota used ${prompt_usage + completion_usage}$ | New quota: ${
|
||||
quota + prompt_usage + completion_usage
|
||||
}$ | Quota remaining : ${0.4 - prompt_usage - completion_usage}$`,
|
||||
})
|
||||
.setColor("#F6C6F9");
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
errorEmbed,
|
||||
convBeginEmbed,
|
||||
convCreatedEmbed,
|
||||
requestResponseEmbed,
|
||||
};
|
20
libs/logs.js
Normal file
20
libs/logs.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
const { EmbedBuilder, WebhookClient } = require("discord.js");
|
||||
|
||||
const webhookClient = new WebhookClient({
|
||||
url: `https://discord.com/api/webhooks/1187067107054202961/M7bsyOwFPMXQTMB8tvrWZu-gLT9rSjl1NASOBrz-z4lwvbwQ9To_yAywE_4aj5oGBP0D`,
|
||||
});
|
||||
|
||||
function sendLog(message) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Log")
|
||||
.setDescription(message)
|
||||
.setColor(0x00ffff);
|
||||
|
||||
webhookClient.send({
|
||||
embeds: [embed],
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sendLog,
|
||||
};
|
0
libs/mistralAi.js
Normal file
0
libs/mistralAi.js
Normal file
278
libs/mysql.js
278
libs/mysql.js
|
@ -1,210 +1,110 @@
|
|||
const mysql = require('mysql');
|
||||
var mysql = require("mysql");
|
||||
require("dotenv").config();
|
||||
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MYSQL_HOST,
|
||||
user: "root",
|
||||
password: process.env.MYSQL,
|
||||
database: "discord"
|
||||
var con = mysql.createConnection({
|
||||
host: process.env.MYSQL_HOST,
|
||||
user: process.env.MYSQL_USER,
|
||||
password: process.env.MYSQL_PASSWORD,
|
||||
database: process.env.MYSQL_DATABASE,
|
||||
});
|
||||
|
||||
function addUserToDb(id, user) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('INSERT INTO users(userid, username) VALUES("' + id + '","' + user + '")' , (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
console.log('User added to database');
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
function registerUser(username, userid) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`INSERT INTO users (username, userid, quota) VALUES ("${username}", "${userid}", 0)`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function incrementQuota(id, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('UPDATE users SET quota = quota + '+ value + ' WHERE userid = ' + id, (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
function getUser(userid) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`SELECT * FROM users WHERE userid = "${userid}"`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function usersInDb() {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('SELECT * FROM users', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(results);
|
||||
}
|
||||
});
|
||||
});
|
||||
function incrementQuota(user, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`UPDATE users SET quota = quota + ${value} WHERE userid = "${user}"`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function getQuota(id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('SELECT quota FROM users WHERE userid = ' + id, (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(results[0].quota);
|
||||
}
|
||||
});
|
||||
});
|
||||
function addConv(userid, channelid, guildid) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`INSERT INTO convs (userid, channelid, guildid) VALUES ("${userid}", "${channelid}", "${guildid}")`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function addConv (convName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('INSERT INTO conversations (name) VALUES ("' + convName + '")', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
connection.query('CREATE TABLE ' + convName + '(id int NOT NULL AUTO_INCREMENT, author varchar(20) NOT NULL, message text, user varchar(20), PRIMARY KEY (id))', async (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(addMessage(convName, 'system', 'You are a helpful assistant.', 'System'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
function removeConv(channelid) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`DELETE FROM convs WHERE channelid = "${channelid}"`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function delConv (convName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('DROP TABLE ' + convName, (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
connection.query('DELETE FROM conversations WHERE name = "' + convName + '"', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(results);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
function getConv(channelid) {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(
|
||||
`SELECT * FROM convs WHERE channelid = "${channelid}"`,
|
||||
(err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function getConvs() {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('SELECT name FROM conversations', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
convs = [];
|
||||
results.forEach(element => {
|
||||
convs.push(element.name);
|
||||
});
|
||||
resolve(convs);
|
||||
}
|
||||
});
|
||||
function getQuotasSum() {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(`SELECT SUM(quota) FROM users`, (err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function addMessage(convName, author, message, user) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('INSERT INTO ' + convName + ' (author, message, user) VALUES ("' + author + '"'+', "' + message + '", "' + user + '")', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(results);
|
||||
}
|
||||
});
|
||||
function resetQuotas() {
|
||||
return new Promise((resolve, reject) => {
|
||||
con.query(`UPDATE users SET quota = 0`, (err, result) => {
|
||||
if (err) reject(err);
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getMessages (convName, choice) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('SELECT author, message, user FROM ' + convName, (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
messages = [];
|
||||
if (choice == 'role') {
|
||||
results.forEach(element => {
|
||||
messages.push({"role" : element.author, "content" : element.message});
|
||||
});
|
||||
} else if (choice == 'user') {
|
||||
results.forEach(element => {
|
||||
messages.push({"user" : element.user, "content" : element.message});
|
||||
});
|
||||
}
|
||||
|
||||
resolve(messages);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function isNewUser(id, username) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
users = await usersInDb().catch(error => {
|
||||
reject(error);
|
||||
});
|
||||
|
||||
test = false;
|
||||
quota = 0;
|
||||
|
||||
users.forEach(element => {
|
||||
if (element.userid == id) {
|
||||
test = true;
|
||||
quota = element.quota;
|
||||
}
|
||||
});
|
||||
|
||||
if (test == false) {
|
||||
addUserToDb(id, username);
|
||||
}
|
||||
|
||||
resolve({quota : quota});
|
||||
});
|
||||
}
|
||||
|
||||
async function listchannels() {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('SELECT id FROM channels', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
channels = [];
|
||||
results.forEach(element => {
|
||||
channels.push(element.id);
|
||||
});
|
||||
resolve(channels);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function addChannel(id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('INSERT INTO channels (id) VALUES (' + id + ')', (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function deleteChannel(id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query('DELETE FROM channels WHERE id = ' + id, (error, results, fields) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { addUserToDb, incrementQuota, usersInDb, getQuota, addConv, delConv, getConvs, addMessage, getMessages, isNewUser, listchannels, addChannel, deleteChannel };
|
||||
module.exports = {
|
||||
registerUser,
|
||||
getUser,
|
||||
incrementQuota,
|
||||
addConv,
|
||||
removeConv,
|
||||
getConv,
|
||||
getQuotasSum,
|
||||
resetQuotas,
|
||||
};
|
||||
|
|
124
libs/openAi.js
124
libs/openAi.js
|
@ -1,5 +1,5 @@
|
|||
const { Configuration, OpenAIApi } = require("openai");
|
||||
const { addToLogs } = require("./botTools");
|
||||
const prompt = require("../data/prompt.json").prompt;
|
||||
|
||||
const configuration = new Configuration({
|
||||
apiKey: process.env.OPENAI,
|
||||
|
@ -7,70 +7,78 @@ const configuration = new Configuration({
|
|||
|
||||
const openai = new OpenAIApi(configuration);
|
||||
|
||||
async function generateImage(query) {
|
||||
response = await openai.createImage({
|
||||
prompt: query,
|
||||
n: 1,
|
||||
size: "1024x1024",
|
||||
response_format : 'url'
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
addToLogs("--> error : " + err);
|
||||
});
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
async function answerQuestion(query) {
|
||||
response = await openai.createChatCompletion({
|
||||
model: "gpt-4",
|
||||
messages: [{ "role" : "user", "content" : query}],
|
||||
temperature: 0.9,
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
addToLogs("--> error : " + err);
|
||||
})
|
||||
|
||||
return response;
|
||||
return new Promise((resolve, reject) => {
|
||||
openai
|
||||
.createChatCompletion({
|
||||
model: "gpt-4-1106-preview",
|
||||
messages: [
|
||||
{ role: "system", content: prompt },
|
||||
{ role: "user", content: query },
|
||||
],
|
||||
temperature: 0.9,
|
||||
})
|
||||
.then((res) => {
|
||||
resolve(res);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function quickAnswer(query) {
|
||||
response = await openai.createChatCompletion({
|
||||
model: "gpt-3.5-turbo",
|
||||
messages: [{ "role" : "user", "content" : query}],
|
||||
temperature: 0.9,
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
addToLogs("--> error : " + err);
|
||||
})
|
||||
|
||||
return response;
|
||||
return new Promise((resolve, reject) => {
|
||||
openai
|
||||
.createChatCompletion({
|
||||
model: "gpt-3.5-turbo-1106",
|
||||
messages: [
|
||||
{ role: "system", content: prompt },
|
||||
{ role: "user", content: query },
|
||||
],
|
||||
temperature: 0.9,
|
||||
})
|
||||
.then((res) => {
|
||||
resolve(res);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function sendConv (messages) {
|
||||
response = await openai.createChatCompletion({
|
||||
model: "gpt-4",
|
||||
messages: messages,
|
||||
temperature: 0.9,
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
addToLogs("--> error : " + err);
|
||||
})
|
||||
|
||||
return response;
|
||||
async function sendConv(messages) {
|
||||
return new Promise((resolve, reject) => {
|
||||
openai
|
||||
.createChatCompletion({
|
||||
model: "gpt-4-1106-preview",
|
||||
messages: messages,
|
||||
temperature: 0.9,
|
||||
})
|
||||
.then((res) => {
|
||||
resolve(res);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function sendQuickConv (messages) {
|
||||
response = await openai.createChatCompletion({
|
||||
model: "gpt-3.5-turbo",
|
||||
messages: messages,
|
||||
temperature: 0.9,
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
addToLogs("--> error : " + err);
|
||||
})
|
||||
|
||||
return response;
|
||||
async function sendQuickConv(messages) {
|
||||
return new Promise((resolve, reject) => {
|
||||
openai
|
||||
.createChatCompletion({
|
||||
model: "gpt-3.5-turbo-1106",
|
||||
messages: messages,
|
||||
temperature: 0.9,
|
||||
})
|
||||
.then((res) => {
|
||||
resolve(res);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { generateImage, answerQuestion, sendConv, quickAnswer, sendQuickConv };
|
||||
module.exports = { answerQuestion, sendConv, quickAnswer, sendQuickConv };
|
||||
|
|
23
libs/quotaReset.js
Normal file
23
libs/quotaReset.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
const fs = require("fs");
|
||||
const { resetQuotas } = require("./mysql.js");
|
||||
|
||||
function getLastResetDate() {
|
||||
const data = fs.readFileSync("./data/lastReset", "utf8");
|
||||
return parseInt(data);
|
||||
}
|
||||
|
||||
function checkLastResetDate() {
|
||||
const lastResetDate = getLastResetDate();
|
||||
const now = Date.now();
|
||||
|
||||
if (now - lastResetDate > 1000 * 60 * 60 * 24 * 30) {
|
||||
fs.writeFileSync("./data/lastReset", now.toString());
|
||||
return resetQuotas();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
checkLastResetDate,
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue