【问题标题】:Telegram bot: GetUpdates Conflict电报机器人:GetUpdates 冲突
【发布时间】:2021-08-05 22:31:51
【问题描述】:

我已使用此链接中的示例创建了测试电报机器人控制台应用程序 https://github.com/TelegramBots/Telegram.Bot.Examples

这是我的主要

public static async Task Main()
{
    ServicePointManager.Expect100Continue = true;
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    Bot = new TelegramBotClient(Configuration.BotToken);
    var me = await Bot.GetMeAsync();
    Console.Title = me.Username;

    var cts = new CancellationTokenSource();

    // StartReceiving does not block the caller thread. Receiving is done on the ThreadPool.
    Console.WriteLine($"Bot.Timeout= {Bot.Timeout}");

    //Bot.Timeout = TimeSpan.FromMilliseconds(30000);
    Bot.StartReceiving(
        new DefaultUpdateHandler(HandleUpdateAsync, HandleErrorAsync),
        cts.Token
    );

    Console.WriteLine($"Start listening for @{me.Username}");

    Console.ReadLine();

    // Send cancellation request to stop bot
    cts.Cancel();
}

我在 Windows 10 上运行它 - 它运行良好。 但是当我在 Windows 7 机器上运行它时,我收到了异常:

Bot.Timeout= 00:01:40 开始监听@my123_bot HandleErrorAsync Telegram.Bot.Exceptions.ApiRequestException:冲突:由终止 其他 getUpdates 请求;确保只有一个机器人实例 运行在 Telegram.Bot.TelegramBotClient.d__541.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot ification(Task task) at Telegram.Bot.TelegramBotClientPollingExtensions.<ReceiveAsync>d__3.MoveNex t() HandleErrorAsync Telegram.Bot.Exceptions.ApiRequestException: Conflict: terminat ed by other getUpdates request; make sure that only one bot instance is running at Telegram.Bot.TelegramBotClient.<MakeRequestAsync>d__541.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot 化(任务任务)在 Telegram.Bot.TelegramBotClientPollingExtensions.d__3.MoveNex t()

是什么原因以及如何解决?

【问题讨论】:

  • ": 被其他 getUpdates 请求终止;确保只有一个机器人实例在运行" 对同一个 getUpdates() 有多个请求。你确定机器人没有在 W10 机器上运行,或者可能隐藏在后台?
  • 这可能是原因:如果我在 2 台机器上运行 2 个机器人? @ 几年前,我在 3 台机器上运行我的旧机器人并且它们工作了
  • 是的,您不能/不应该在多个实例上运行调用getUpdates() 的手动机器人。或者,您应该使用web-hooks 创建一个真正可靠的解决方案
  • 也许那些旧机器人的时机恰到好处,所以他们从来没有做过同样的请求?如果您可以确保呼叫之间总是有 x 秒,并且您永远不会告诉电报您看到了另一个机器人尚未看到的消息,那么它应该可以工作。但这只是不是要走的路;)
  • 好的,看来网络挂钩可能是解决方案。创建答案,我会标记它。

标签: c# telegram-bot


【解决方案1】:

如 cmets 中所述;

:被其他 getUpdates 请求终止;确保只有一个机器人实例在运行

表示同时调用getUpdates()

为防止这种情况发生,要么停止其他机器人,要么创建一个机器人,在更新时接收web-hook HTTP POST 请求。

在告诉 Telegram 消息已被 getUpdate() offset 参数看到之前,您应该确保每条消息都由机器人处理。

【讨论】:

    【解决方案2】:

    确保只有一个机器人实例在运行

    我能够通过撤销和更新机器人令牌来解决这个问题。这很有效,因为我认为它停止了所有使用旧令牌的机器人实例。

    【讨论】:

      【解决方案3】:

      我通过重启电脑解决了这个问题。我想问题出现了,因为我们看不到的进程并重新启动只是停止了它们

      【讨论】:

      • 你的答案的语法逻辑似乎有点混乱。
      猜你喜欢
      • 2017-02-23
      • 2018-08-08
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2018-01-10
      • 2018-07-22
      相关资源
      最近更新 更多