如何从 Telegram API 获取最新/新消息

2024-06-04

我正在尝试从 Telegram API 获取最新消息(不是机器人 API)。我目前正在使用 messages.getHistory 但它会从头开始返回所有消息。如果我收到新消息(自从我登录以来),那也没关系。

到目前为止,我最好的选择是读取所有消息,然后跟踪偏移量,这样我就不会再次读取相同的消息,但这太慢并且资源昂贵。


查尔斯的回答为我指明了正确的方向。对于那些对 Node.js 版本感兴趣的人,我设法通过使用 telegram-link 模块并将 connectionType 设置为 TCP 来使其工作:

var telegramLink = require('telegram.link')();

// set the  environment
var app = {
    // NOTE: if you FORK the project you MUST use your APP ID.
    // Otherwise YOUR APPLICATION WILL BE BLOCKED BY TELEGRAM
    // You can obtain your own APP ID for your application here: https://my.telegram.org
    id: 12345,
    hash: 'somehashcode',
    version: require('../package.json').version,
    lang: 'en',
    deviceModel: os.type().replace('Darwin', 'OS_X'),
    systemVersion: os.platform() + '/' + os.release(),
    connectionType: 'TCP'
};

//var primaryDC = telegramLink.TEST_PRIMARY_DC;
var primaryDC = telegramLink.PROD_PRIMARY_DC;

...

telegramLink.createClient(app, dataCenter, function() {
...

简单点就是,改成TCP就能达到你想要的效果,你会在registerOnUpdates中收到推送给你的消息:

clientProxy.getClient().account.updateStatus(false).then(function() {
    clientProxy.getClient().registerOnUpdates(function(update) {
        console.log('update', update.toPrintable());

        clientProxy.getClient().messages.receivedMessages(update.id, function(err) { console.log(err); });
    });
...

注意 receiveMessages - 如果您不调用此消息,那么 Telegram 将不会向您发送任何新的更新。如果您的 telegram-link 中未定义 returnedMessages,请将以下代码添加到 lib/api/messages.js:

// ***
// messages.**receivedMessages(max_id, [callback])**

// Return a Promise to Confirms receipt of messages by a client, cancels PUSH-notification sending.

// [Click here for more details](https://core.telegram.org/method/messages.receivedMessages)
Messages.prototype.receivedMessages = function(max_id, callback) {
    return utility.callService(api.service.messages.receivedMessages, this.client, this.client._channel, callback, arguments);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Telegram API 获取最新/新消息 的相关文章

随机推荐

  • iOS - 当应用程序被终止时处理静默推送通知

    我目前在 iOS 中遇到推送通知问题 我的应用程序收到包含标识符的静默推送通知 然后 该标识符用于从创建本地通知的远程服务器获取数据 据我所知 如果用户强制退出应用程序 即通过双击主页按钮并滑动关闭应用程序 则静默推送通知不会传递到 App
  • 可以在 lambda 中订阅 aws IOT 主题吗?

    新手问题 找不到以前的答案 我想用 Alexa 构建一个简单的泵控制器 希望 Alexa 报告泵状态 最简单的方法是 Alexa gt lambda gt publish to Iot 然后 或者可能在发布之前 订阅另一个主题 本地控制器将
  • QTableView 选择已更改

    我有一个QTableView我需要从中获取选择更改事件 我似乎无法让连接工作 我有 MyWidget h protected slots void slotLoadTransaction const QItemSelection selec
  • MongoDb Spring 在嵌套对象中查找

    我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
  • 您可以在 Safari 扩展中修改 http 请求标头吗?

    我可以在 FF 和 IE 中执行此操作 并且我知道 Chrome 中尚不存在 有人知道是否可以在 Safari 插件中执行此操作吗 我在文档中找不到任何这样或那样的说法 Safari 增加了扩展支持 但与 Chrome Firefox Ed
  • 如何使用 Android Volley API?

    我正在考虑在我的下一个项目中实现 Android Volley 库 关于 Volley 的 Google IO 演示 http www youtube com watch v yhv8l9F44qo 但是 我还没有找到该库的任何重要的 AP
  • firebase云功能事务偶尔工作

    我有这样的云功能 exports updateNewsCount functions database ref channels channelId news newsId onWrite event gt const channelId
  • 确定矩形在窗口内是否可见

    我想确定窗口内的矩形是否完全可见 我找到了 RectVisible 但该函数确定矩形的任何部分是否可见 我想知道整个矩形是否可见 有没有这方面的功能 首先通过使用将系统剪切区域 窗口的可见区域 变成一个区域GetRandomRgn http
  • 是否可以自定义首选项标题布局?

    我发现了类似的问题 但找不到最新的具体答案 我在用着
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • 如何使 Visual Studio 仅在未处理的异常时中断?

    在我的其他机器上 当没有 try catch 来处理错误时 Visual Studio 总是会因错误而中断 但如果有 try catch 则它不会中断 由于某种原因 在这台笔记本电脑上 它不能以这种方式工作 一开始它根本没有中断 但后来我发
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • 在 Drupal 中使用单个自定义表单创建多个 CCK 节点

    我需要一个允许同时创建多个相关节点的表单 所有节点都涉及 CCK 字段 我想尽可能多地使用 CCK 的内置验证 提交 输入小部件和安全功能 在 Drupal 6 中实现这一目标的最佳方法是什么 是否有 最佳实践 或文档 我可以看到以下三种可
  • 使用 Firefox 插件发出跨域 ajax 请求

    我对如何在 Firefox 插件中发出跨域 ajax 请求感到有点困惑 LastPass 和 Xmarks 等插件建议你可以做到这一点 但是当我尝试用 google 搜索你是如何做到这一点时 每个人似乎都说你不能 除非用户在 Firefox
  • en_CA 语言环境中 sprintf 中的逗号作为小数分隔符

    是否可以在 en CA 语言环境中的 sprintf 中使用逗号作为小数点分隔符 sprintf 能够识别区域设置 并且将始终使用当前的区域设置 但您可以使用数字格式 http php net manual en function numb
  • 从最近打开的应用程序中打开 Android 中的旧活动?

    我有 4 个活动 Launcher MainActivity SingleTask NotificationActivity ExampleActivity 当用户点击通知时 通知活动然后打开示例活动并完成通知活动 当我按下回键时主要活动打
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • 在NN中指定连接(在keras中)

    我正在使用 keras 和tensorflow 1 4 我想明确指定哪些神经元在两层之间连接 因此 每当第一层中的神经元 i 连接到第二层中的神经元 j 且其他地方为零时 我就有一个矩阵 A 其中包含 1 我的第一次尝试是创建一个带有内核的
  • 如何从 PHP 的 sha256 加密迁移到 bcrypt?

    登录 rows sql gt fetch PDO FETCH ASSOC us id rows id us pass rows password us salt rows password salt status rows attempt
  • 如何从 Telegram API 获取最新/新消息

    我正在尝试从 Telegram API 获取最新消息 不是机器人 API 我目前正在使用 messages getHistory 但它会从头开始返回所有消息 如果我收到新消息 自从我登录以来 那也没关系 到目前为止 我最好的选择是读取所有消