有没有办法在将消息从节点服务器发布到频道时获取 Discord 消息 ID?

Posted

技术标签:

【中文标题】有没有办法在将消息从节点服务器发布到频道时获取 Discord 消息 ID?【英文标题】:Is there a way to obtain Discord message ID upon posting msg to channel from node server? 【发布时间】:2019-09-15 14:27:55 【问题描述】:

在 Express/Node.js 应用程序中使用 Discord.js,我正在尝试构建一个定期抓取外部数据并使用包含该数据的某些元素的嵌入消息更新 Discord 的机器人。我正在尝试添加一项功能,该功能将检查该数据是否已从外部源中删除(下一次抓取时不再存在),然后删除 Discord 中包含已发送数据的特定消息。

在 Discord 中发布的某些 msg 可能有重复的数据项,所以我想通过特定的 msg ID 删除,但似乎在发布到 Discord 时分配了 msg ID。

有没有办法在从 Discord.js 发送时以编程方式获取或返回此 msg ID,而不是从 Discord GUI 手动复制/粘贴 msg ID?换句话说,如果我的机器人看到不再抓取 msg 的源数据,我需要知道要删除哪条消息。

// FOR-LOOP TO POST DATA TO DISCORD
// see if those IDs are found in persistent array
        for (var i = 0; i < newIDs.length; i++) 
            if (currentIDs.indexOf(newIDs[i]) == -1) 
                currentIDs.push(newIDs[i]); // add to persistent array
                TD.getTicket(33, newIDs[i]) // get ticket object
                .then(ticket =>  postDiscord(ticket); ) // post to DISCORD!
            
        

        // if an ID in the persistent array is not in temp array,
        // delete from persistent array & existing DISCORD msg.
        // message.delete() - need message ID to get msg object...
        // var msg = channel.fetchMessage(messageID) ?

【问题讨论】:

【参考方案1】:

让我推荐你:

https://discord.js.org/#/docs/main/stable/class/Message

假设你使用的是 async/await,你会得到类似的东西:

async () => 
 let message = await channel.send(some message);
 //now you can grab the ID from it like
 console.log(message.id)

如果你要使用 .then 作为 promises,也是一样的想法:

channel.send(some message)
    .then(message => 
     console.log(message.id)
     );

ID 是消息的属性,只有在收到 Discord API 的响应后才能获得 ID。这意味着您必须异步处理它们。

【讨论】:

谢谢!我只是不确定 .send() 是否返回了这样的消息对象。我试试看。 是的!文档应该说明一切返回的内容。我强烈建议使用 async/await,它比 .then.catch 干净得多。

以上是关于有没有办法在将消息从节点服务器发布到频道时获取 Discord 消息 ID?的主要内容,如果未能解决你的问题,请参考以下文章

预计只有一个时间窗口

我在将数据从 XML 文件移动到具有 CDATA 节点类型的 ARRAY 时遇到问题

在将节点从 csv 创建到 neo4j 时创建关系

Discord - 将消息从频道实时发送到我的网站

使用 Bot Framework 通过 NodeJS 发布到 Microsoft Teams 频道

如何让我的机器人获取已经从频道中的用户发送的随机消息,并在触发自动响应时发送该随机消息