Бот Telegram: Конфликт GetUpdates - PullRequest
0 голосов
/ 27 марта 2020

Я создал тестовое консольное приложение Telegram для ботов, используя пример по этой ссылке 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: Conflict : завершается другим запросом 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__54 1.MoveNext () --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter Атрибут это исправить?

1 Ответ

2 голосов
/ 27 марта 2020

Как описано в комментариях;

: прервано другим запросом getUpdates; убедитесь, что работает только один экземпляр бота

Указывает, что одновременно вызывается getUpdates().

Чтобы предотвратить это, либо остановите других ботов, либо создайте бот, который получит веб-хук HTTP POST запрос на обновление.

Вы должны убедиться, что каждое сообщение обработано ботом (ами), прежде чем сообщать Telegram, что сообщение было замечено с помощью getUpdate() смещения параметра.

...