使用 SendMediaGroupAsync 方法将照片发送到 Telegram c#

Sending photos to Telegram using the SendMediaGroupAsync method c#

我需要将相册打包发送到电报机器人。照片的数量事先未知。 我写的代码:

List<IAlbumInputMedia> streamArray = new List<IAlbumInputMedia> {};
 foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    using var stream = formFile.OpenReadStream();
                    streamArray.Add(stream); // there is a mistake here. cannot convert to System.IO.Stream to Telegram.Bot.Types.IAlbumInputmedia
                    //await clientTg.SendPhotoAsync(groupId,stream); // it works fine
                }
            }
 
            await clientTg.SendMediaGroupAsync(groupId, streamArray);

我无法将 stream 添加到 List arrayStream,错误“cannot convert to System.IO.Stream to Telegram.Bot.Types.IAlbumInputmedia" 在单个实例中,流通常通过 SendPhotoAsync 方法发送,在代码中被注释掉。 如何转换这些类型并发送合影?

根据the docs

Message[] messages = await botClient.SendMediaGroupAsync(
    chatId: chatId,
    media: new IAlbumInputMedia[]
    {
        new InputMediaPhoto("https://cdn.pixabay.com/photo/2017/06/20/19/22/fuchs-2424369_640.jpg"),
        new InputMediaPhoto("https://cdn.pixabay.com/photo/2017/04/11/21/34/giraffe-2222908_640.jpg"),
    }
);

您必须明确设置文件类型。

在你的情况下它会像:

streamArray.Add(new InputMediaPhoto(stream, $"file{DateTime.Now.ToString("s").Replace(":", ".")}")

没有用,可能是因为在这种情况下我不能 Add。但他们的回答确实把我推向了正确的方向。我决定为程序的不同分支的不同数量的照片编写代码。

if (files.Count == 2) // <<<< 2 photos
{
    await using var stream1 = files[0].OpenReadStream();
    await using var stream2 = files[1].OpenReadStream();
    IAlbumInputMedia[] streamArray =
    {
        new InputMediaPhoto(new InputMedia(stream1, "111"))
        {
            Caption = "Cap 111"
        },
        new InputMediaPhoto(new InputMedia(stream2, "222"))
        {
            Caption = "Cap 222"
        },
    };
    await clientTg.SendMediaGroupAsync(groupId, streamArray);
}

我不确定我是否正确使用 await using,但至少它有效。