Discord 机器人命令在 Discord 服务器中不起作用

问题描述 投票:0回答:1

我正在尝试创建一个 Discord 机器人,它会自动为用户分配角色。我的前缀是通过 JSON (Config.json) 获取的,我使用的是discord.js 库。

index.js

const { Client, Intents, MessageEmbed } = require("discord.js");
const db = require("quick.db");
const config = require("./config.json");

const client = new Client({ intents: 32767, });

client.once("ready", () => {
  console.log("Bot is online!");
});

client.execute = async function (client, message, args, prefix) {
  const commands = require(`./commands/autorole`);
  commands.execute(client, message, args, prefix);
};

client.login(config.token);

autorole.js

const { MessageEmbed } = require("discord.js");
const db = require("quick.db");

module.exports = {
  name: "autorole",
  aliases: ["ar"],
  description: "Add or remove auto role.",
  execute(client, message, args, prefix) {
    if (!message.member.hasPermission("ADMINISTRATOR")) {
      // Check if the member has permission
      const noPermEmbed = new MessageEmbed()
        .setColor("#ff0000")
        .setTitle("❌ Insufficient Permissions ❌")
        .setDescription("You don't have permission to use this command.")
        .setTimestamp();
      return message.channel.send(noPermEmbed);
    }

    const action = args[0];
    const role =
      message.mentions.roles.first() ||
      message.guild.roles.cache.find((r) => r.name === args[1]);

    if (!action || !role) {
      const invalidUsageEmbed = new MessageEmbed()
        .setColor("#ff0000")
        .setTitle("❌ Invalid Usage ❌")
        .setDescription(`Please use \`${prefix}autorole add/remove @role\`.`)
        .setTimestamp();
      return message.channel.send(invalidUsageEmbed);
    }

    const botRolePosition = message.guild.me.roles.highest.position;
    if (role.position >= botRolePosition) {
      const cantAddEmbed = new MessageEmbed()
        .setColor("#ff0000")
        .setTitle("❌ Cannot Add Role ❌")
        .setDescription(
          "The role you are trying to add is equal or above my highest role position.",
        )
        .setTimestamp();
      return message.channel.send(cantAddEmbed);
    }

    if (action === "add" || action === "a") {
      db.set(`autorole_${message.guildId}`, role.id);
      if (
        role.permissions.has("BAN_MEMBERS") ||
        role.permissions.has("KICK_MEMBERS") ||
        role.permissions.has("MANAGE_GUILD") ||
        role.permissions.has("MANAGE_ROLES") ||
        role.permissions.has("MANAGE_WEBHOOKS") ||
        role.permissions.has("ADMINISTRATOR")
      ) {
        const dangerEmbed = new MessageEmbed()
          .setColor("#ff0000")
          .setTitle("⚠️ Warning: Dangerous Role Added ⚠️")
          .setDescription(
            `The role you added has dangerous permissions!\n\nRole: ${role}`,
          )
          .setTimestamp();
        return message.channel.send(dangerEmbed);
      } else {
        const successEmbed = new MessageEmbed()
          .setColor("#00ff00")
          .setTitle("✅ Auto Role Added ✅")
          .setDescription(`Auto role \`${role.name}\` added successfully.`)
          .setTimestamp();
        return message.channel.send(successEmbed);
      }
    } else if (action === "remove" || action === "rm") {
      db.delete(`autorole_${message.guildId}`);
      const removedEmbed = new MessageEmbed()
        .setColor("#00ff00")
        .setTitle("✅ Auto Role Removed ✅")
        .setDescription("Auto role removed successfully.")
        .setTimestamp();
      return message.channel.send(removedEmbed);
    } else {
      const invalidActionEmbed = new MessageEmbed()
        .setColor("#ff0000")
        .setTitle("❌ Invalid Action ❌")
        .setDescription(`Please use \`${prefix}autorole add/remove @role\`.`)
        .setTimestamp();
      return message.channel.send(invalidActionEmbed);
    }
  },
};

config.json-

{
  "token":"-",
  "prefix":"."
}

问题:机器人命令在服务器上不起作用

我正在尝试运行该应用程序,但是当我尝试在 Discord 服务器中运行命令时没有任何反应。控制台中没有错误。

javascript node.js discord
1个回答
-1
投票

也许这就是你重写

execute
方法的方式。

尝试用此替换执行:

client.on("messageCreate", message => {
  if (!message.content.startsWith(config.prefix) || message.author.bot) return;

  const args = message.content.slice(config.prefix.length).trim().split(/ +/);
  const command = args.shift().toLowerCase();

  if (command === 'autorole') {
    const autoroleCommand = require('./commands/autorole');
    autoroleCommand.execute(client, message, args, config.prefix);
  }
});

这样,您的代码将在执行命令时触发(取决于输入),而不是直接调用您的代码。

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.