Я пытался закинуть телеграмм бота на свой сервер на linux, но он постоянно мне выдает ошибку. Помогите решить проблему

Я использую Visual Studio и библиотеку "DockerComposeBuilder", для создания образа и запуска контейнера. Опытным путем я выяснил, что ошибка появляется только когда я добавляю в проект библиотеку телеграмм бота. Ниже я привел код моего бота:

using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;

var botClient = new TelegramBotClient("token");

using var cts = new CancellationTokenSource();

// StartReceiving does not block the caller thread. Receiving is done on the ThreadPool.
var receiverOptions = new ReceiverOptions
{
    AllowedUpdates = { } // receive all update types
};
botClient.StartReceiving(
    HandleUpdateAsync,
    HandleErrorAsync,
    receiverOptions,
    cancellationToken: cts.Token);

var me = await botClient.GetMeAsync();

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

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

async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
    // Only process Message updates: https://core.telegram.org/bots/api#message
    if (update.Type != UpdateType.Message)
        return;
    // Only process text messages
    if (update.Message!.Type != MessageType.Text)
        return;

    var chatId = update.Message.Chat.Id;
    var messageText = update.Message.Text;

    Console.WriteLine($"Received a '{messageText}' message in chat {chatId}.");

    // Echo received message text
    Message sentMessage = await botClient.SendTextMessageAsync(
        chatId: chatId,
        text: "You said:\n" + messageText,
        cancellationToken: cancellationToken);
}

Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
    var ErrorMessage = exception switch
    {
        ApiRequestException apiRequestException
            => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
        _ => exception.ToString()
    };

    Console.WriteLine(ErrorMessage);
    return Task.CompletedTask;
}

При выполнении появляется следующая ошибка: "Целевой процесс завершил работу без вызова события, запущенного coreclr. убедитесь, что в целевом процессе настроено использование .net core. это может быть необходимо, если целевой процесс не запускался в .net core."


Ответы (1 шт):

Автор решения: user672455

Сервер ругается на Console.Readline() и на Console.Writeline().

Console.Readline() нужно заменить на Thread.Sleep(-1); или на Task.Delay(-1);, и все будет отлично.

А в части, где ты отправляешь ошибку через Console.Writeline(), отправляй ошибку сам себе в телеграмме: botClient.SendMessageAsync(<твой id, а не переменная id, именно числовое значение)>, $"ошибка вызванная пользователем:{chatId}\r\nКод ошибки: {exception.ToString()}"), другие подобные сценарии с Console.Writeline() решай аналогичным образом, убрать/заменить на отправление самому себе в чат.

→ Ссылка