[英]Discord.js roles overlapping
所以我正在用 discord.js 制作一個 discord 機器人。一切正常,很好。 (忽略亂七八糟的代碼,我不厲害)。 所以基本上,要訪問某些命令,您必須具有特定角色。 您可以通過執行更改哪個角色具有這些命令,.change(角色 ID),它在一台服務器上工作正常,但是當我將機器人添加到 2 個服務器時,我把一切都搞砸了,因為當我想要一個(角色 ID)用於一台服務器。 另一個(角色 ID)用於另一台服務器。
所以 2+ 服務器總是在競爭哪個角色要工作。
const Discord = require('discord.js');
const client = new Discord.Client();
const { Client, MessageAttachment } = require('discord.js');
const config = require('./config.json')
var Admin = '733382542631239749';
var prefix = "!";
var blank = 0
//COMMANDS
//1.Logging in for console
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', message =>{
var args = message.content.slice(blank.length).split(" ");
switch(args[0]) {
//STAFF COMMANDS
//STAFF COMMANDS
//Utility/Moderation
//clear
case (prefix + 'change') || message.member.hasPermission('ADMINISTRATOR'):
if (args[1]) {
Admin = (args[1])
console.log(Admin)
}
break;
case (prefix + 'clear'):
if (args[1])
if (!message.member.roles.cache.get(Admin)){
message.delete();
message.reply('You dont have the roles. Please contact the admin of the server if you think this is a mistake.')
return;
}else{
message.channel.bulkDelete(args[1])
console.log(message.member.user.username + message.content)
}
break;
case (prefix + 'log'):
if (!message.member.roles.cache.get(Admin)){
message.delete();
message.reply('You dont have the roles. Please contact the admin of the server if you think this is a mistake.')
return;
}else{
console.log(client.users)
}
break;
case (prefix + 'uptime'):
if (!message.member.roles.cache.get(Admin)){
message.delete();
message.reply('You dont have the roles. Please contact the admin of the server if you think this is a mistake.')
return;
}else{
message.channel.send(client.uptime * 0.001)
}
break;
//Kick
case (prefix + 'kick'):
if (!message.member.roles.cache.get(Admin)){
message.delete();
message.reply('You dont have the roles. Please contact the admin of the server if you think this is a mistake.')
return;
}else{
const user = message.mentions.users.first()
if (args[1]){
if (user) {
const member = message.guild.member(user)
if (member) {
member
.kick('Reason')
.then(() => {
message.reply(`Successfully kicked ${user.tag}`);
})
}
}
}
}
break;
//Ban
case (prefix + 'ban'):
if (!message.member.roles.cache.get(Admin)){
message.delete();
message.reply('You dont have the roles. Please contact the admin of the server if you think this is a mistake.')
return;
}else{
const user1 = message.mentions.users.first()
if (args[1]){
if (user1) {
const member1 = message.guild.member(user1)
if (member1) {
member1
.ban('Reason')
.then(() => {
message.reply(`Successfully banned ${user.tag}`);
})
}
}
}
}
break;
//FUN COMMANDS
//GIFS
//Rip
case (prefix + 'rip'):
const attachmentRip = new MessageAttachment('https://media.giphy.com/media/3ohzdYrOxm6awk0HDy/giphy.gif');
message.channel.send(attachmentRip);
break;
case (prefix + 'kill'):
const attachmentKill = new MessageAttachment('https://media.giphy.com/media/KPTgXXjURfR4s/giphy.gif')
message.channel.send(attachmentKill)
break;
case (prefix + 'lol'):
const attachmentLol = new MessageAttachment('https://media.giphy.com/media/83YPtFOmc9x3a/giphy.gif')
message.channel.send(attachmentLol);
break;
case (prefix + 'ping'):
message.channel.send('Pong')
break;
//HELP
case (prefix + 'help'):
message.channel.send('Go to www.WeDontHaveAWebsite.com' + ' ' + 'for more info!')
break;
default:
// code block
return;
}
})
client.login(config.token);
正如我所說,我想要的只是我可以同時在多台服務器上安裝我的機器人。
如果你希望你的機器人是“多服務器防護”的,你必須使用某種數據庫。 我建議使用Enmap ,這是一個簡單的 js 到 sqlite 數據庫,旨在與 discord.js 完美配合。您只需要以某種方式存儲角色 ID 及其公會 ID。 更改命令應該更新存儲在數據庫中的值,用於執行該命令的公會。
它看起來像:
case (prefix + 'change') || message.member.hasPermission('ADMINISTRATOR'):
if (args[1]) {
yourDatabase.set('admin', args[1], message.guild.id)
console.log(yourDatabase.get('admin', message.guild.id)
}
break;
這是Enmap使用的語法^-^。 查看我上面提供的鏈接以獲取有關 Enmap 方法的更多信息。 在給定的示例中,您可以使用yourDatabase.get('admin', message.guild.id)
訪問角色 ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.