【发布时间】: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__54
1.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