我是 JS(和 DiscordJS)的新手——我希望弄清楚為什么這會導致我的機器人崩潰。
目的是產生 5% 的機會回復具有指定角色 ID 的所有用戶。
機器人正確打開,但一旦在服務器中檢測到或更改任何內容,它就會崩潰:TypeError: Cannot read properties of undefined (reading 'cache')
非常感謝任何指標或提示!
client.on("messageCreate", (message) => {
let args = message.content.trim().split(" ");
if (message.author.roles.cache.has("641904594041045002")) {
if (message.author.bot) return;
if (message.author.id === "95784650613456896") return;
const responses = [
"Reply1",
"Reply2",
"Reply3",
"Reply4",
];
const reply = responses[Math.floor(Math.random() * responses.length)];
if (Math.random() < 0.05) {
//0.50 = 50% chance
message.reply(`${reply}`);
}
}
});
編輯:更改 if (message.author.roles.cache.has("641904594041045002")) {
以
if (message.member.roles.cache.has("641904594041045002")) {
解決問題,直到用戶加入語音頻道 - 這會導致機器人再次崩潰,并出現相同的 TypeError。
編輯2:
client.on("messageCreate", async (message) => { //now async
let args = message.content.trim().split(" ");
const member = await message.guild.members.fetch(message.author.id) //fetch author ID
if(message.member.roles.cache.some(r=>["bois"].includes(r.name)) ); {
if (message.author.bot) return;
if (message.author.id === "95784650613456896") return;
const responses = [
"Reply1",
"Reply2",
"Reply3",
"Reply4",
];
const reply = responses[Math.floor(Math.random() * responses.length)];
if (Math.random() < 0.99) {
//0.50 = 50% chance
message.reply(`${reply}`);
}
}
});
這會產生不同的崩潰(當用戶加入/離開語音通話時):DiscordAPIError[10013]: Unknown User
uj5u.com熱心網友回復:
而不是message.author, 它回傳一個沒有屬性的Userroles物件,你應該使用message.memberwhich 回傳一個GuildMember物件:
if (message.member.roles.cache.has("641904594041045002")) {
您可能需要像這樣獲取成員:
const member = await message.guild.members.fetch(message.author)
if (member.roles.cache.has("641904594041045002")) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512664.html
標籤:javascriptif 语句不和谐不和谐.js机器人
