Skip to content
This repository was archived by the owner on Jul 7, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ let discordClient = new Discord.Client({
Discord.GatewayIntentBits.GuildWebhooks,
Discord.GatewayIntentBits.GuildInvites,
Discord.GatewayIntentBits.GuildVoiceStates,
Discord.GatewayIntentBits.GuildPresences,
//Discord.GatewayIntentBits.GuildPresences,
Discord.GatewayIntentBits.GuildMessages,
Discord.GatewayIntentBits.GuildMessageReactions,
//Discord.GatewayIntentBits.GuildMessageTyping,
Expand Down Expand Up @@ -153,7 +153,7 @@ database_pool.query('SELECT NOW();', (err, res) => {
//These events are only used by the bot, users can't use these

discordClient.on("guildCreate", async(guild)=>{
database_pool.query("INSERT INTO servers (server_id, name) VALUES ($1, $2) ON CONFLICT DO NOTHING;", [guild.id, guild.name])
database_pool.query("INSERT INTO servers (server_id) VALUES ($1) ON CONFLICT DO NOTHING;", [guild.id])
.then(()=>{
logger.info("Bot was added in a new server : "+guild.id+"("+guild.name+")");
logger.debug("Successfully added a new server to database !");
Expand All @@ -165,19 +165,6 @@ database_pool.query('SELECT NOW();', (err, res) => {
logger.info("Bot was removed from a guild : "+guild.id+"("+guild.name+")");
});

discordClient.on("guildUpdate", async(oldGuild, newGuild)=>{
if(oldGuild.name===newGuild.name)return;
//This guild has a new name, we will save it in database
database_pool.query("UPDATE servers SET name = $1 WHERE server_id = $2;", [newGuild.name, newGuild.id])
.then(async()=>{
logger.debug("Saved a new name for guild "+newGuild.id);
})
.catch((err)=>{
logger.error("Error while saving the new name of guild "+newGuild.id+" : "+err);
});

});

discordClient.on("interactionCreate", async(interaction) => {//See https://discordjs.guide/creating-your-bot/command-handling.html#executing-commands
if (!interaction.isChatInputCommand()) return;//Do nothing here if not a chat command
const command = interaction.client.commands.get(interaction.commandName);
Expand Down
83 changes: 83 additions & 0 deletions modules/data_storage_functions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
'use-strict';

//Functions used to manage saved data in database

module.exports = {

saveValueInStorage: async function(database_pool, logger, serverId, storageName, key, value){
/* Save a new value in a server's storage */

//Key and value must be defined
if(!key || key=='' || value===undefined || value==='')return;

//We will check that key and valud aren't bigger than 32 or 256 char
if(key.length > 32){
key = key.slice(0, 32);
}
if(value.toString().length > 1024){
logger.debug("Can't save data in data storage for server "+serverId+" : value length exceed limit");
return;
}

database_pool.query("SELECT f_insert_or_update_data($1, $2, $3, $4)",
[serverId, storageName, key, value.toString()])
.catch((err)=>{
logger.error("Error while saving data in data storage for server "+serverId+" : "+err);
});

},

getValueInStorage: async function(database_pool, logger, serverId, storageName, key){
/* Get a value stored in a data storage from database */

//We will check that key isn't bigger than 32 char
if(key.length > 32){
key = key.slice(0, 32);
}

try{
const row = (await database_pool.query("SELECT d.data, s.storage_is_int FROM data_storage s INNER JOIN stored_data d ON s.storage_id=d.storage_id WHERE s.server_id = $1 AND s.storage_name = $2 AND d.data_key = $3;",
[serverId, storageName, key])).rows[0];

if(row){
return row.data;
}else if(storageName.startsWith('I')){
return -1;
}else if(storageName.startsWith('S')){
return 'undefined';
}else{
throw('Error : Invalid storage name "'+storageName+'" for server '+serverId);
}

}catch(err){
logger.error("Error while getting data from data storage for server "+serverId+" : "+err);

if(storageName.startsWith('I')){
return -1;
}else if(storageName.startsWith('S')){
return 'undefined';
}else{
return null;//May cause errors in workspaces, so using this can be considered a bug
}

}
},

deleteValueInStorage: async function(database_pool, logger, serverId, storageName, key){
/* Get a value stored in a data storage from database */

//We will check that key isn't bigger than 32 char
if(key.length > 32){
key = key.slice(0, 32);
}

try{
await database_pool.query("DELETE FROM stored_data WHERE data_id = (SELECT d.data_id FROM data_storage s INNER JOIN stored_data d ON s.storage_id=d.storage_id WHERE s.server_id = $1 AND s.storage_name = $2 AND d.data_key = $3);",
[serverId, storageName, key]);

}catch(err){
logger.error("Error while deleting data from data storage for server "+serverId+" : "+err);
}
},

}
Loading