簡體   English   中英

Discord.js 角色重疊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM