Я использую библиотеку 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