2 回答
TA贡献1860条经验 获得超9个赞
在您尝试向其发送消息时,该频道不存在。
您正在使用.then(),.catch()因此您必须对承诺有一定的了解。请记住,promise 表示的操作不会在任何地方完成,除了在 promise 回调内部(或在您使用 之后await)。
基本上你是这样写的:
//send a request to Discord to make a channel
message.guild.channels.create(name, {...}).catch(console.error);
...
//immediately, without waiting for Discord to make the channel, send a message to it
message.guild.channels.cache.find(r => r.name === name).send(Embed);
您发送消息的代码取决于已经创建的频道。因此,它需要在承诺的.then()回调中。channels.create(...)这还有一个额外的好处,即 promise 将实际解析通道对象,因此您可以调用.send()它而不需要搜索缓存。
message.guild.channels.create(name, {...}).then(chan => {
//make embed
chan.send(Embed);
}).catch(console.error);
您将需要类似地附加 a.then()到.send()呼叫以对刚刚发送的消息做出反应。因为您需要等待 Discord 真正发出消息,然后才能对其做出反应。
TA贡献1806条经验 获得超8个赞
如果未定义,则意味着您需要的具有该名称的频道不存在。我不知道在你的情况下你会如何处理这个,但这是一个选择:
const Embed = new Discord.MessageEmbed()
.setTitle('ISLAND INFO');
const channel = message.guild.channels.cache.find(r => r.name === name);
if (!channel) message.channel.send("Your channel does not exist!");
else {
channel.send(embed)
}
按用户名存储数据时要注意的另一件事是用户名可以更改。我建议你用用户 ID 命名你的频道,因为这些永远不会改变
添加回答
举报