【问题标题】:How to get most recent update in Telegram Bot API如何获取 Telegram Bot API 的最新更新
【发布时间】:2021-04-08 02:32:56
【问题描述】:

我正在努力研究如何使用电报机器人将消息文本发送到我的 C# 控制台工具。这是一段应该只打印电报频道中所有消息的部分

private async Task getTelegramMessage()
{
  var bot = new Telegram.Bot.TelegramBotClient("token")
  var updates = await bot.GetUpdatesAsync();
  foreach (var update in updates)
  {
    Console.WriteLine("Bot: " + update.Message.Text);
  }
}

问题是我总是得到所有旧的更新。数组更新的最大长度为 100。因此,在我在电报频道中发送了 100 条消息后,我只能访问前 100 条消息,而无法访问最新的消息。如何访问最新的更新?或者我可以在我的工具处理后以某种方式删除该消息吗?

我已经看到该机器人提供了 Event OnUpdate,但我不知道如何使用它。

非常感谢您在该问题上的帮助。

【问题讨论】:

    标签: c# telegram


    【解决方案1】:

    哦,我刚刚想通了。对于偏移量,您必须设置更新中返回的 ID。

    注意事项 2.为避免重复更新,每次服务器响应后重新计算偏移量。

    【讨论】:

    • 但是,这不是一个好的解决方案,因为我每次都必须浏览所有消息,所以有一天,在应用程序结束之前,我必须首先通过它的 10000 条消息。如果它返回最后 100 次更新会更好
    【解决方案2】:

    根据文档,您可以使用 offset -1 来获取最后一次更新。 请记住,所有以前的更新都将被遗忘。

    getUpdates Docs

    https://api.telegram.org/bot{TOKEN}/getUpdates?offset=-1
    

    【讨论】:

      【解决方案3】:

      改为订阅BotOnUpdateReceived 事件来处理更新。在 main.cs 中:

      Bot.OnUpdate += BotOnUpdateReceived;
      Bot.StartReceiving(Array.Empty<UpdateType>());
      Console.WriteLine($"Start listening!!");
      Console.ReadLine();
      Bot.StopReceiving();
      

      并处理事件:

      private static async void BotOnUpdateReceived(object sender, UpdateEventArgs e)               
      {               
          var message = e.Update.Message;
          if (message == null || message.Type != MessageType.Text) return;
          var text = message.Text;
          Console.WriteLine(text);
          await Bot.SendTextMessageAsync(message.Chat.Id, "_Received Update._", ParseMode.Markdown);
      }
      

      Offset 在内部工作,它也在内部调用GetUpdatesAsync()

      从这里您还可以通过以下方式获取频道帖子:

      var message = e.Update.ChannelPost.Text;  // For Text Messages
      

      希望对你有帮助!!

      【讨论】:

      • 嗨 Anil 我尝试了您发布的代码,但消息始终为空?为什么?
      猜你喜欢
      • 2018-12-09
      • 1970-01-01
      • 2020-08-02
      • 2022-07-14
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 2015-10-20
      相关资源
      最近更新 更多