【问题标题】:Deleting Bot generated messages in DMs在 DM 中删除 Bot 生成的消息
【发布时间】:2020-11-16 03:23:31
【问题描述】:

我不久前开始使用 discord.js,并且正在研究命令处理程序 - 一般是命令。 我意识到我的机器人也可以回复 DM,所以我尝试了这个:

if (!msg.guild) {

msg.channel.send("I am not answering to to DMs, please respect that!");

}

我以某种方式窃听并回复了大约 10 条消息,如果我没有停止机器人,它会继续运行。

现在我决定我什至不希望机器人回复 dm,它应该忽略它,但现在我收到了来自他的 10/20 条我无法摆脱的消息。 谁能给我发送一行代码,我可以手动删除一条消息?我想复制他写给我的每条消息的 ID,这不是问题。

【问题讨论】:

  • 这是不可能的 AFAIK。其他人也有类似的问题,因为它不是公共频道,机器人无法删除消息。
  • 有可能,只要DM频道在bot和别人之间,bot只能删除自己的消息。

标签: javascript node.js discord.js


【解决方案1】:
const User = client.users.cache.get("UserId") // Your Discord ID.
const MessageId = "ID"; // The ID of the message you want to delete.

User.dmChannel.messages.fetch(MessageId).then(m => m.delete()) // Fecthing the message and then deleting it.

【讨论】:

  • TypeError: 无法读取未定义的属性“dmChannel”
  • 好吧,当我尝试 console.log(User) 时才发现,它说未定义
  • 确保 UserId 正确并且您使用的是 Discord JS v12。
  • 使用 "^12.2.0" 和我复制了几次的 ID(我自己的 ID,不是机器人的 ID)
  • 好的,所以我发现了一个问题,就是这些命令在机器人正常启动之前就已经执行了,我现在将代码移到了我的 client.on("message"...) 但是现在它说: User.dmChannel.messages.fetch(MessageId).then(m => m.delete()); ^ 类型错误:无法读取 null 的属性“消息”
【解决方案2】:

这可能很长,但我注意到了这个问题,并且我的机器人中已经有一个功能可以删除它给用户的 DM....

deleteDMs(user, resultsChannel) {

this.#client.users.fetch( user.id )
.then( u => {

    u.createDM()
    .then( dmchannel => { 
        dmchannel.messages.fetch( { limit: 100 } )
        .then( messages => {

            let c = messages.size;
            messages = messages.filter( m => { return m.author.id === this.#client.user.id } );

            if( c !== messages.size ){

                resultsChannel.send( `No can do - ${u.toString()} must delete DMs to ${this.toString()}` +
                `  before ${this.toString()} can delete my DMs to ${u.toString()}. (Discord API quirk.)` );

            }else{

                c = messages.size;
                resultsChannel.send( `Deleting ${c} DMs.` );

                messages.forEach( msg => {

                    msg.delete()
                    .then( () => {

                        c --;
                        if( c === 0 ) resultsChannel.send( 'DMs deleted successfully.');

                    } ).catch( err => { resultsChannel.send( `Error occurred while deleting DMs.\n${err}` ) } );

                } );//end messages.forEach

            }//end if( c !===

        } ).catch( err => { resultsChannel.send( `Error occurred while fetching DMs.\n${err}` ) } );

    } ).catch( err => { resultsChannel.send( `Error occurred while resolving DM channel.\n${err}` ) } );

} ).catch( err => { resultsChannel.send( `Error occurred while fetching user.\n${err}` ) } );

}//结束 deleteDMs

【讨论】:

  • 它从客户端(机器人)删除 DM 到指定用户。一个警告是,用户必须首先删除他们对机器人的所有 DM——这只是一个不和谐的 API 怪癖。
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 2021-09-14
  • 2020-04-18
  • 2022-01-05
  • 2021-01-28
  • 2018-06-30
  • 2020-12-03
  • 2017-10-25
相关资源
最近更新 更多