Как получить значки диалога телеграммы в качестве удаленных URL -адресов с использованием WtelegramClient (c#)C#

Место общения программистов C#
Ответить
Anonymous
 Как получить значки диалога телеграммы в качестве удаленных URL -адресов с использованием WtelegramClient (c#)

Сообщение Anonymous »

Я использую библиотеку WtelegramClient в приложении .NET для загрузки всех моих диалогов Telegram и их недавних сообщений. Я хочу получить аватар (изображение профиля) каждого диалога в качестве удаленного URI, а не загружать файлы на диск. Это для отображения значков пользователя/чата в пользовательском интерфейсе через HTTP без локального хранилища.protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var user = await _client.LoginUserIfNeeded();
Console.WriteLine($"Logged in as {user.username ?? user.first_name}");

var dialogs = await _client.Messages_GetAllDialogs();

var scope = _services.CreateScope();
var store = scope.ServiceProvider.GetRequiredService();

foreach (var chatBase in dialogs.chats.Values.OfType())
await store.AddOrUpdateChatAsync(chatBase);

foreach (var usr in dialogs.users.Values.OfType())
await store.AddOrUpdateUserAsync(usr);

var dialogsFiltered = dialogs.dialogs.OfType().ToList();

foreach (var dlg in dialogsFiltered)
{
InputPeer peer = null!;

if (dialogs.chats.TryGetValue(dlg.peer.ID, out var chatPeer))
peer = chatPeer;
else if (dialogs.users.TryGetValue(dlg.peer.ID, out var usrObj))
peer = new InputPeerUser(dlg.peer.ID, usrObj.access_hash);

if (peer is null) continue;

var history = await _client.Messages_GetHistory(peer, limit: 50);
foreach (var msg in history.Messages.OfType())
await store.SaveOrUpdateMessageAsync(msg);

// Here's where I want to get the dialog icon URI
}

await Task.Delay(Timeout.Infinite, stoppingToken);
}

Вопрос:
Есть ли способ получить удаленный URL или публичный URI для аватара пользователя или чата (например, https: //t.me/i/userpic/...), используя wtelegramclient, вместо того, чтобы скачать и не служить самому? Аватары пользователя/чата в веб-интерфейсе без сохранения их локально?private async Task GetAvatarUriAsync(IPeerInfo peer)
{
try
{
var peerName = peer switch
{
User u => $"{u.id}",
ChatBase c => $"{c.ID}",
_ => null
};

if (peerName == null) return null;

var avatarDir = Path.Combine(Directory.GetCurrentDirectory(), "avatars");
Directory.CreateDirectory(avatarDir);

var fileName = $"{peerName}.jpg";
var fullPath = Path.Combine(avatarDir, fileName);

var stream = new FileStream(fullPath, FileMode.Create);
var avatarStream = await _client.DownloadProfilePhotoAsync(peer, stream, true);
stream.Close();
stream.Dispose();
}
catch (Exception ex)
{
Console.WriteLine($"Avatar download failed: {ex.Message}");
}
return null;
}



Подробнее здесь: https://stackoverflow.com/questions/796 ... amclient-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»