我正在尝试创建一个 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 服务器中运行命令时没有任何反应。控制台中没有错误。
也许这就是你重写
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);
}
});
这样,您的代码将在执行命令时触发(取决于输入),而不是直接调用您的代码。
希望这有帮助