Итак, в основном у меня есть этот код, где мой бот загружает URL-адрес, отправленный с командой.
[Command("jpg")]
private async Task Jpg([Remainder] string text)
{
string filetype = Path.GetExtension(text);
if (!text.StartsWith("http") || !text.StartsWith("https"))
{
return;
}
using (var client = new WebClient())
{
client.DownloadFileAsync(new Uri(text), "img\\a" + filetype);
}
/* Image stuff etc */
}
Я хотел бы сделать так, чтобы он брал вложение изображения из сообщения, а не полагался на URL-адрес, но попытка использовать Context.Message.Attachments дает мне ошибку.
Context.Message.Attachments
представляет собой набор вложений, вы можете получить URL-адрес каждого вложения (они находятся на сервере разногласий для загруженных изображений) и использовать этот URL-адрес вместо того, который основан на сообщении.
Вы можете прокрутить вложение или просто получить URL-адрес для первого вложения.
Получение первого URL-адреса вложения (учитывая, что у него есть вложения):
string URL = Context.Message.Attachments.ElementAt(0).Url;
Цикл, чтобы получить полный список URL-адресов:
string[] urlArray = {};
foreach(IAttachment attachment in Context.Message.Attachments){
urlArray.Append(attachment.Url);
}
// Handle the URLs as you did before.
или вы можете реализовать цикл таким образом, чтобы загрузить их в этом foreach
(используя ваш DownloadFileAsync
, поскольку я предполагаю, что это работает для вас - если не учитывать мое предыдущее редактирование этого сообщения)
using (var client = new WebClient()) {
foreach(IAttachment attachment in Context.Message.Attachments){
string filetype = Path.GetExtension(attachment.Url);
client.DownloadFileAsync(new Uri(attachment.Url), "img\\a" + filetype);
}
}
Мне очень жаль, я недосыпаю и совершенно неправильно понял ваш вопрос.
Я обновлю свой ответ соответственно.
Обновлено! Я извиняюсь, ха-ха.
Это идеально, большое спасибо!
Это хорошо, но я бы хотел полностью исключить необходимость в «тексте». Мне просто нужно, чтобы захватить вложение из поста.