使用 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
,但至少它有效。
我需要将相册打包发送到电报机器人。照片的数量事先未知。 我写的代码:
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
,但至少它有效。