我有时会收到此错误消息,导致我的机器人崩溃。
这是控制台中的错误消息:
C:\Users\Administrator\Desktop\FortniteRanked8.5\events\message.js:7
if(prefixed.hasOwn(message.guild.id)){
^
TypeError: Cannot read property 'id' of null
at module.exports (C:\Users\Administrator\Desktop\FortniteRanked8.5\events\message.js:7:36)
问题来自此行:
if (prefixes.hasOwn(message.guild.id)){
设置:
代码:
const Store = require('data-store');
module.exports = (client, message) => {
var prefixes = new Store({ path: __dirname + '/../prefixes.json' });
// console.log(prefixes.clone())
if (message.author.bot) return;
var prefix = client.config.prefix
if (prefixes.hasOwn(message.guild.id)){
prefix = prefixes.get(message.guild.id)
}
if (message.content.indexOf(prefix) !== 0) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const cmd = client.commands.get(command);
if (!cmd) return;
if (cmd && !message.guild)
return message.channel.send("Vous ne pouvez pas faire de commande ici, Merci de faire les commandes directement sur votre serveur discord.");
cmd.run(client, message, args);
};
答案 0 :(得分:3)
message.guild
为空,然后应检查它是否像message && message.guild && ...
一样存在。使用此方法,您可以确保所有字段都存在。
答案 1 :(得分:2)
在使用公会之前先进行检查
if(message.guild && prefixes.hasOwn(message.guild.id))
答案 2 :(得分:0)
如果错误消息显示“无法读取null的属性'id'” ,则表示guild
属性存在,但它是{{ 1}}。如前所述,您必须进行检查,但除此之外,还必须检查:为什么 null
是guild
吗?
如果没有属性,您将得到“无法读取未定义的属性'id'” 作为错误。
答案 3 :(得分:0)
您正在访问的
Guild
对象不存在。因此它没有id
成员。就是这样,TypeError: Cannot read property 'id' of null
。感谢所有其他用户的贡献。MDN上有关
TypeError
的更多信息。
您需要检查正在访问的公会是否存在?为此,您需要检查行会的avialable
属性。
/* Check the evidence of guild's existance */
if(message.guild.avialable === true && prefixes.hasOwn(message.guild.id))