Я пытался закинуть телеграмм бота на свой сервер на 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 шт):
Сервер ругается на 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()
решай аналогичным образом, убрать/заменить на отправление самому себе в чат.