因此,我需要一种将通过bot dm发送的消息转发到服务器中特定通道的方法。
这是我到目前为止获得的代码:
execute(message, args) {
if(message.channel.type == "dm"){
let cf = args.join(' ')
const cfAdm = message.guild.channels.cache.get('767082831205367809')
let embed = new discord.MessageEmbed()
.setTitle('**CONFISSÃO**')
.setDescription(cf)
.setColor('#000000')
const filter = (reaction, user) => ['?', '?'].includes(reaction.emoji.name);
const reactOptions = {maxEmojis: 1};
cfAdm.send(embed)
.then(function (message) {
message.react('?')
.then(() => message.react('?'))
/**** start collecting reacts ****/
.then(() => message.awaitReactions(filter, reactOptions))
/**** collection finished! ****/
.then(collected => {
if (collected.first().emoji.name === '?') {
const cfGnr = message.guild.channels.cache.get('766763882097672263')
cfGnr.send(embed)
}
})
});
}
else {
message.delete()
message.channel.send('Send me this in the dm so you can stay anon')
.then (message =>{
message.delete({timeout: 5000})
})
}
}
但是由于某种我似乎无法理解的原因,它给了我这个错误: TypeError:无法读取null的属性“渠道”
如果有人可以帮助我,那将是极大的感激。 在此先感谢您,英语不好!
答案 0 :(得分:0)
此处的错误是您试图从直接消息通道(const cfAdm = message.guild.channels.cache.get('ID')
)上的message
对象上调用 if(message.channel.type == "dm"){
DM没有公会,因此message.guild
为空,message.guild.channels
不存在。
您将需要先以其他方式访问该频道。幸运的是,Discord.js has a way可以访问该机器人可以使用的所有渠道*(您不必与公会混为一谈,因为所有渠道都有唯一的ID):
client.channels.fetch(ID)
或client.channels.cache.get(ID)
(我没有测试过,但是看起来很简单)
*请参阅链接以了解适用于大量服务器中的机器人的警告。