2021-10-06 08:21:42 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using TL;
|
|
|
|
|
|
|
|
|
|
|
|
namespace WTelegramClientTest
|
|
|
|
|
|
{
|
2021-12-03 10:16:01 +01:00
|
|
|
|
static class Program_DownloadSavedMedia
|
2021-10-06 08:21:42 +02:00
|
|
|
|
{
|
2021-10-11 14:44:49 +02:00
|
|
|
|
// go to Project Properties > Debug > Environment variables and add at least these: api_id, api_hash, phone_number
|
2021-10-06 08:21:42 +02:00
|
|
|
|
static async Task Main(string[] args)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("The program will download photos/medias from messages you send/forward to yourself (Saved Messages)");
|
2021-10-11 14:44:49 +02:00
|
|
|
|
using var client = new WTelegram.Client(Environment.GetEnvironmentVariable);
|
2021-10-06 08:21:42 +02:00
|
|
|
|
await client.ConnectAsync();
|
|
|
|
|
|
var user = await client.LoginUserIfNeeded();
|
|
|
|
|
|
client.Update += Client_Update;
|
|
|
|
|
|
Console.ReadKey();
|
|
|
|
|
|
|
2021-11-07 16:52:58 +01:00
|
|
|
|
async void Client_Update(IObject arg)
|
2021-10-06 08:21:42 +02:00
|
|
|
|
{
|
|
|
|
|
|
if (arg is not Updates { updates: var updates }) return;
|
|
|
|
|
|
foreach (var update in updates)
|
|
|
|
|
|
{
|
2021-11-04 20:10:44 +01:00
|
|
|
|
if (update is not UpdateNewMessage { message: Message message })
|
|
|
|
|
|
continue; // if it's not about a new message, ignore the update
|
|
|
|
|
|
if (message.peer_id.ID != user.ID)
|
|
|
|
|
|
continue; // if it's not in the "Saved messages" chat, ignore it
|
|
|
|
|
|
|
2021-10-06 08:21:42 +02:00
|
|
|
|
if (message.media is MessageMediaDocument { document: Document document })
|
|
|
|
|
|
{
|
2021-10-11 14:44:49 +02:00
|
|
|
|
int slash = document.mime_type.IndexOf('/'); // quick & dirty conversion from MIME type to file extension
|
2021-10-06 08:21:42 +02:00
|
|
|
|
var filename = slash > 0 ? $"{document.id}.{document.mime_type[(slash + 1)..]}" : $"{document.id}.bin";
|
|
|
|
|
|
Console.WriteLine("Downloading " + filename);
|
|
|
|
|
|
using var fileStream = File.Create(filename);
|
|
|
|
|
|
await client.DownloadFileAsync(document, fileStream);
|
|
|
|
|
|
Console.WriteLine("Download finished");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (message.media is MessageMediaPhoto { photo: Photo photo })
|
|
|
|
|
|
{
|
|
|
|
|
|
var filename = $"{photo.id}.jpg";
|
|
|
|
|
|
Console.WriteLine("Downloading " + filename);
|
|
|
|
|
|
using var fileStream = File.Create(filename);
|
|
|
|
|
|
var type = await client.DownloadFileAsync(photo, fileStream);
|
|
|
|
|
|
fileStream.Close(); // necessary for the renaming
|
|
|
|
|
|
Console.WriteLine("Download finished");
|
|
|
|
|
|
if (type is not Storage_FileType.unknown and not Storage_FileType.partial)
|
2021-11-04 20:10:44 +01:00
|
|
|
|
File.Move(filename, $"{photo.id}.{type}", true); // rename extension
|
2021-10-06 08:21:42 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|