From 4717de1712e81df7cdac4526279cf0c9cd2399cd Mon Sep 17 00:00:00 2001 From: Ozzy <39550188+SileNce5k@users.noreply.github.com> Date: Sat, 13 Mar 2021 03:57:53 +0100 Subject: [PATCH] Add per server prefix (#7) * Add ability to load server prefix * Add ability to set prefix for a server * Create serverPrefixes.json file if not found --- commands/prefix.js | 15 +++++++++++++++ server.js | 27 +++++++++++++++++++-------- util/loadServerPrefixes.js | 18 ++++++++++++++++++ util/setServerPrefix.js | 27 +++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 commands/prefix.js create mode 100644 util/loadServerPrefixes.js create mode 100644 util/setServerPrefix.js diff --git a/commands/prefix.js b/commands/prefix.js new file mode 100644 index 0000000..b48ea10 --- /dev/null +++ b/commands/prefix.js @@ -0,0 +1,15 @@ +const setServerPrefix = require("../util/setServerPrefix"); + +module.exports = { + name: 'prefix', + description: 'Change the prefix of the bot in this server.', + execute({ message, client, args, prefix }) { + if (!args[0]) { + message.channel.send(`To change the prefix, execute \`${prefix}prefix \``); + return; + }else{ + setServerPrefix(client, args[0], message.guild.id) + message.channel.send(`The prefix for this server is now set to ${args[0]}`) + } + } +}; \ No newline at end of file diff --git a/server.js b/server.js index a309ebd..ae12fd5 100644 --- a/server.js +++ b/server.js @@ -1,8 +1,8 @@ const fs = require('fs') const Discord = require('discord.js'); const client = new Discord.Client({ disableEveryone: true }); -const { - prefix, +let { + globalPrefix, token, loginMessage, loginChannel, @@ -11,19 +11,22 @@ const { } = require('./config.json'); client.commands = new Discord.Collection(); +client.serverPrefixes = new Discord.Collection(); -var reloadCommands = require("./util/reloadCommands.js") +var reloadCommands = require("./util/reloadCommands.js"); +const loadServerPrefixes = require('./util/loadServerPrefixes'); reloadCommands(client) client.once('ready', () => { console.log('Ready!'); - client.user.setActivity(prefix, { type: 'LISTENING' }); + client.user.setActivity(globalPrefix, { type: 'LISTENING' }); if (enableLoginMessage === true) try{ client.channels.cache.get(loginChannel).send(loginMessage) }catch(err){ console.log("Failed trying to send a message on login.\n") } + loadServerPrefixes(client) }); client.once('reconnecting', () => { @@ -35,15 +38,23 @@ client.once('disconnect', () => { }); client.on('message', async message => { - const args = message.content.slice(prefix.length).split(" ") + + if (client.serverPrefixes.get(message.guild.id)) { + prefix = client.serverPrefixes.get(message.guild.id) + } else + prefix = globalPrefix + + let args = message.content.slice(prefix.length).split(" ") + const commandName = args.shift().toLowerCase(); const command = client.commands.get(commandName); - if (!message.guild) return; + if (!message.guild) return; if (message.author.bot) return; if (!message.content.startsWith(prefix)) return; - if (command.admin && owners.indexOf(message.author.id.toString()) == -1 ) return; + if (!command) return; + if (command.admin && owners.indexOf(message.author.id.toString()) == -1) return; try { - command.execute({message:message, args:args, client: client}) + command.execute({ message: message, args: args, client: client, prefix: prefix}) } catch (error) { console.log(`${error}\n-------`) } diff --git a/util/loadServerPrefixes.js b/util/loadServerPrefixes.js new file mode 100644 index 0000000..4606d62 --- /dev/null +++ b/util/loadServerPrefixes.js @@ -0,0 +1,18 @@ +const fs = require('fs') + + +module.exports = function (client) { + try { + if(!fs.existsSync('serverPrefixes.json')){ + console.log("Creating loadServerPrefixes.json...") + fs.writeFileSync("serverPrefixes.json","[]") + } + const json = fs.readFileSync('serverPrefixes.json', 'utf8'); + const serverPrefixes = JSON.parse(json); + serverPrefixes.forEach(server => { + client.serverPrefixes.set(server.id, server.prefix) + }); + } catch (err) { + console.log(`Error reading file from disk: ${err}`); + } +} \ No newline at end of file diff --git a/util/setServerPrefix.js b/util/setServerPrefix.js new file mode 100644 index 0000000..45824aa --- /dev/null +++ b/util/setServerPrefix.js @@ -0,0 +1,27 @@ +const fs = require('fs'); + + +module.exports = function (client, newPrefix, guildID) { + let isExists = false; + const json = fs.readFileSync('serverPrefixes.json', 'utf8'); + const serverPrefixes = JSON.parse(json); + serverPrefixes.forEach(function (server) { + if (server.id === guildID) { + server.prefix = newPrefix + client.serverPrefixes.set(server.id, newPrefix) + fs.writeFileSync("serverPrefixes.json", JSON.stringify(serverPrefixes)); + isExists = true; + } + }); + if (!isExists) { + let _newPrefix = { + "id": guildID, "prefix": newPrefix + } + + serverPrefixes.push(_newPrefix) + console.log(serverPrefixes) + + fs.writeFileSync("serverPrefixes.json", JSON.stringify(serverPrefixes)) + client.serverPrefixes.set(guildID, newPrefix) + } +} \ No newline at end of file