Discord.js将DM消息转发到特定频道

时间:2020-10-28 21:48:59

标签: discord discord.js

因此,我需要一种将通过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的属性“渠道”

如果有人可以帮助我,那将是极大的感激。 在此先感谢您,英语不好!

1 个答案:

答案 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)

(我没有测试过,但是看起来很简单)

*请参阅链接以了解适用于大量服务器中的机器人的警告。