我使用 gramjs 库来访问 Telegram API。 例如,我在频道中发布了一篇新帖子,其中包含 2 张图片和一些描述, 但我收到的不是一条消息(包含完整信息):描述 + 照片以及另一张照片。
client.addEventHandler((event) => {
console.log('new post')
}, new NewMessage({chats: [someId]}))
我从文档中发现这是正常的,为了将多条消息收集到一个中,他们使用参数pts和qts(https://core.telegram.org/api/updates),在gramjs中有只有pts,信息量不大
我还发现你可以使用
new Album
,那么类似的消息将在数组中立即到达:
client.addEventHandler((event) => {
console.log('new post')
}, new Album({chats: [someId]}))
但是,这没有任何带有一张照片或仅文本的消息。 我们可以同时使用这两个侦听器,但是两个侦听器都会收到带有专辑的这些消息,在这种情况下,需要以某种方式从 NewMessage 侦听器中过滤掉它们,否则每个侦听器将处理两次消息。
如何处理这个问题?监听器有什么解决办法吗?
附注我认为该选项是在接收事件时获取标识符,而不是读取消息,而是使用另一种将返回整个出版物的方法通过 ID 进入通道。
如上所述,我不知道如何处理频道中的内容更新
好的,有答案了:
client.addEventHandler( async (event) => {
const isSingleMessage = "message" in event && !event.message.groupedId;
if (!isSingleMessage) {
return;
}
console.log('message');
}, new NewMessage({
chats: [id],
}));
client.addEventHandler( async (event) => {
console.log('album');
}, new Album({
chats: [id],
}))
主要区别在于分批到达的消息具有 groupId。