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
This commit is contained in:
Ozzy 2021-03-13 03:57:53 +01:00 committed by GitHub
parent ae1ce65602
commit 4717de1712
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 8 deletions

15
commands/prefix.js Normal file
View file

@ -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 <newPrefix>\``);
return;
}else{
setServerPrefix(client, args[0], message.guild.id)
message.channel.send(`The prefix for this server is now set to ${args[0]}`)
}
}
};

View file

@ -1,8 +1,8 @@
const fs = require('fs') const fs = require('fs')
const Discord = require('discord.js'); const Discord = require('discord.js');
const client = new Discord.Client({ disableEveryone: true }); const client = new Discord.Client({ disableEveryone: true });
const { let {
prefix, globalPrefix,
token, token,
loginMessage, loginMessage,
loginChannel, loginChannel,
@ -11,19 +11,22 @@ const {
} = require('./config.json'); } = require('./config.json');
client.commands = new Discord.Collection(); 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) reloadCommands(client)
client.once('ready', () => { client.once('ready', () => {
console.log('Ready!'); console.log('Ready!');
client.user.setActivity(prefix, { type: 'LISTENING' }); client.user.setActivity(globalPrefix, { type: 'LISTENING' });
if (enableLoginMessage === true) if (enableLoginMessage === true)
try{ try{
client.channels.cache.get(loginChannel).send(loginMessage) client.channels.cache.get(loginChannel).send(loginMessage)
}catch(err){ }catch(err){
console.log("Failed trying to send a message on login.\n") console.log("Failed trying to send a message on login.\n")
} }
loadServerPrefixes(client)
}); });
client.once('reconnecting', () => { client.once('reconnecting', () => {
@ -35,15 +38,23 @@ client.once('disconnect', () => {
}); });
client.on('message', async message => { 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 commandName = args.shift().toLowerCase();
const command = client.commands.get(commandName); const command = client.commands.get(commandName);
if (!message.guild) return; if (!message.guild) return;
if (message.author.bot) return; if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return; if (!message.content.startsWith(prefix)) return;
if (!command) return;
if (command.admin && owners.indexOf(message.author.id.toString()) == -1) return; if (command.admin && owners.indexOf(message.author.id.toString()) == -1) return;
try { try {
command.execute({message:message, args:args, client: client}) command.execute({ message: message, args: args, client: client, prefix: prefix})
} catch (error) { } catch (error) {
console.log(`${error}\n-------`) console.log(`${error}\n-------`)
} }

View file

@ -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}`);
}
}

27
util/setServerPrefix.js Normal file
View file

@ -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)
}
}