javascript - message.mentions.users.first().id 定义有问题
问题描述
好吧,我是 javascript 的新手,并且一直在使用 Discord.js 制作一两个 Discord Bot。我最近正在开发一个Medal Bot,如果某个人发出命令,它将向用户授予奖章。它看起来大致如下:/awardmedal The Copper Cross (INSERT USER@ HERE)
每当我运行代码并执行任何奖牌命令时,它都会出现以下内容:
Medals.js:21 var usertag = message.mentions.users.first().id;
^
TypeError: Cannot read property 'id' of undefined
我想知道是否有人可以帮助并告诉我应该怎么做才能解决它,谢谢。这是执行此操作的代码:
var prefix = "/"
client.on('ready', () => {
console.log("ZiloBot Loaded");
});
client.on("message", (message) => {
var usertag = message.mentions.users.first().id;
if (message.content.startsWith(prefix + "awardmedal " + "The Copper Cross " + usertag)) {
if (sjw.includes(message.author.id)) {
console.log("Awarding Copper Cross to " + usertag);
message.channel.send("Awarding Copper Cross to " + usertag);
};
};
client.login(mytokenissecret);
});
不用担心sjw
变量,它是在此之前的一段代码中定义的。id
我的主要问题是未定义的事实。
解决方案
稍微改进了您的代码:
client.on('ready', () => {
console.log("ZiloBot Loaded");
});
client.on("message", (message) => {
const prefix = "/"; // using ES6
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const cmdName = args.shift().toLowerCase();
if (cmdName === 'awardmedal') {
// checking if user inluded correct medal name in message.
let mention = message.mentions.users.first();
// checking if message don't have a user mention
if (!mention) return message.channel.send('You need to mention a user.');
let medals = ['The Copper Cross']; // creating array of medals in case u want to add more medals later on
let medal = args.join(' ').replace(`<@!${mention.id}>`, '').trim(); // removing mention and spaces from message string
if (!medals.map(m => m.toLowerCase()).includes(medal.toLowerCase())) {
message.channel.send(`Please choose one from a list:\n${medals.join(', ')}`);
return;
}
if (!sjw.includes(message.author.id)) {
// if user in not in "sjw"
return;
}
console.log(`Awarding ${medal} to ${mention.name}`);
message.channel.send(`Awarding ${medal} to ${mention}`);
}
};
client.login(mytokenissecret);
要首先解决您的主要问题,您需要检查用户提及是否存在并且仅在获取 id 之后。
let mention = message.mentions.users.first();
if (mention) console.log(mention.id);
推荐阅读
- html - Bootstrap flex 行图像与 div 高度相同
- python - 如何在 python 中为用户输入创建循环?
- python - 通过数据框进行条件循环
- reactjs - 项目在 http://10.0.0.2:8080 运行但无法使用 wget 连接?
- powershell - 如何将输出输出到变量
- python - 如何在随机消息中包含用户名 [Python]
- javascript - Heroku - “路径”参数必须是字符串类型。收到一个对象实例
- php - 如何使用 php 将多个复选框选择添加到我的数据库
- sql - 临时表消失
- python - 从具有 1-hot 编码列集的 csv 文件创建 pandas 数据帧