【发布时间】:2021-11-18 15:55:27
【问题描述】:
我对 JavaScript 编码非常陌生,我正在为 Discord 服务器设置一个简单的事件机器人。
概念上非常简单,机器人真正做的就是允许任何人为他们提到的任何成员分配一个“死亡”角色。
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
var prefix = "!";
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`) });
client.on("messageCreate", (message) => {
let staff = message.guild.roles.cache.find(r => r.name === "Staff");
let dead = message.guild.roles.cache.find(r => r.name === "Dead");
let member = message.mentions.members.first();
if (!message.content.startsWith(prefix)) return;
//Ping command
if (message.content.startsWith(prefix + "ping")) {
message.channel.send("Pong!");
}
//Error if command doesn't include a mention
if (!member)
return message.channel.send('You need to mention a member, <@' + message.author.id + '>')
//Kill command
if (message.content.startsWith(prefix + "kill")) {
if (message.member.roles.cache.has(staff)) {
return message.channel.send(`${member} is not participating in the event!`);
}
if (message.member.roles.cache.has(dead)) {
return message.channel.send(`${member.toString()} is already dead!`);
} else {
member.roles.add(dead);
return message.channel.send(`${member.toString()} has been eliminated!`);
}
}
}
);
client.login('Token');
但是,我遇到的问题是:
• kill 命令,虽然它可以赋予人们 Dead 角色并宣布成员被淘汰,但如果成员已经死亡或具有 ,它不会引发相应的错误>员工角色。它只是宣布该成员已被淘汰,无论他们担任什么角色。
• 键入任何前面带有 ! 的单词(如 !test)会导致 “需要提及成员” 错误。 (这包括 !ping 命令)
我在这里做错了什么?我检查了 v13 的 Discord.js 文档,但似乎找不到答案。提前致谢!
编辑:
修复了一切!我忘记了用于 ping 的 return,最终我为 kill 命令使用了不正确的函数。这是最终代码,它按预期工作。
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
var prefix = "!";
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`) });
client.on("messageCreate", (message) => {
if (!message.content.startsWith(prefix)) return;
//Ping command
if (message.content.startsWith(prefix + "ping")) {
return message.channel.send('Pong! <@' + message.author.id + '>');
}
//Kill command
if (message.content.startsWith(prefix + "kill")) {
let member = message.mentions.members.first();
let dead = message.guild.roles.cache.find(r => r.name === "Dead");
//No mention
if (!member)
return message.channel.send('You need to mention a member, <@' + message.author.id + '>');
//Staff check
if (member.roles.cache.find(r => r.name == "Staff")) {
return message.channel.send(`${member} is not participating in the event!`);
}
//Dead check
if (member.roles.cache.find(r => r.name == "Dead")) {
return message.channel.send(`${member.toString()} is already dead!`);
} else {
member.roles.add(dead);
return message.channel.send(`${member.toString()} has been eliminated!`);
}
}
});
感谢大家的帮助!并随时批评最终代码,欢迎所有提示和花絮!
【问题讨论】:
标签: discord discord.js