Ошибка отправки изображения в TG BOT С#

Рейтинг: 0Ответов: 1Опубликовано: 01.07.2023

Пробую написать бота для ТГ на Шарпе, но при отправки картинку, ничего не происходит и бот просто закрывается. Направляю часть кода

using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types.ReplyMarkups;
using Telegram.Bot;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
//using Telegram.Bot.Extensions.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
using System.IO;
using Telegram.Bots.Requests;
using System;
using System.Drawing;
//using Telegram.Bot.Types.InputFiles;

internal class Program
{
    private static async Task Main(string[] args)
    {
        var botClient = new TelegramBotClient("токен");

        using var cts = new CancellationTokenSource();

        var receiverOptions = new ReceiverOptions
        {
            AllowedUpdates = { }
        };

        botClient.StartReceiving(
         HandleUpdatesAsync,
         HandleErrorAsync,
         receiverOptions,
         cancellationToken: cts.Token);

        var me = await botClient.GetMeAsync();

        Console.WriteLine($"Начал работу @{me.Username}");
        Console.ReadLine();

        cts.Cancel();

        async Task HandleUpdatesAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
        {
            if (update.Type == UpdateType.Message && update?.Message?.Text != null)
            {
                await HandleMessage(botClient, update.Message);
                return;
            }

            if (update.Type == UpdateType.CallbackQuery)
            {
                await HandleCallbackQuery(botClient, update.CallbackQuery);
                return;
            }
        }

        async Task HandleMessage(ITelegramBotClient botClient, Message message)
        {
            if (message.Text == "/start")
            {
                var fott = @"https://i.yapx.ru/Uz5RA.png";
                using (Stream stream = System.IO.File.OpenWrite(fott))
                {
                    message = await SendPhotoAsync(message.Chat,
                                        photo: stream,
                           caption: "test photo caption"
                       );
                }
...
}}}}

Ответы

▲ 1Принят

Зачем вы напихали кучу методов внутрь метода Main? Я еле разобрался, что к чему. Чтобы скачать картинку с инета, потребуется HttpClient.

Как-то так получится.

internal class Program
{
    private static readonly HttpClient client = new(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.All })
    { 
        DefaultRequestVersion = HttpVersion.Version20
    };

    private static async Task Main(string[] args)
    {
        var botClient = new TelegramBotClient("токен");

        using var cts = new CancellationTokenSource();

        var receiverOptions = new ReceiverOptions
        {
            AllowedUpdates = { }
        };

        botClient.StartReceiving(
            HandleUpdatesAsync,
            HandleErrorAsync,
            receiverOptions,
            cancellationToken: cts.Token
        );

        var me = await botClient.GetMeAsync();

        Console.WriteLine($"Начал работу @{me.Username}");
        Console.ReadKey();
        cts.Cancel();
    }

    static async Task HandleUpdatesAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
    {
        if (update.Type == UpdateType.Message && update.Message?.Text != null)
        {
            await HandleMessage(botClient, update.Message);
            return;
        }

        if (update.Type == UpdateType.CallbackQuery)
        {
            await HandleCallbackQuery(botClient, update.CallbackQuery);
            return;
        }
    }

    static async Task HandleMessage(ITelegramBotClient botClient, Message message)
    {
        if (message.Text == "/start")
        {
            string fott = @"https://i.yapx.ru/Uz5RA.png";
            using Stream stream = await client.GetStreamAsync(fott);
            Message sendMessage = await SendPhotoAsync(message.Chat,
                photo: stream,
                caption: "test photo caption"
            );
        }
    }

    private static Task<Message> SendPhotoAsync(Chat chat, Stream photo, string caption)
    {
        throw new NotImplementedException();
    }

    private static Task HandleCallbackQuery(ITelegramBotClient botClient, CallbackQuery? callbackQuery)
    {
        throw new NotImplementedException();
    }

    private static Task HandleErrorAsync(ITelegramBotClient client, Exception exception, CancellationToken token)
    {
        throw new NotImplementedException();
    }
}