private static readonly string SESSION_FILE = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"MyTelegramApp",
"session.dat"
);
static string? Config(string what)
{
Directory.CreateDirectory(Path.GetDirectoryName(SESSION_FILE));
return what switch
{
"api_id" => "YOUR_REAL_API_ID",
"api_hash" => "YOUR_REAL_API_HASH",
"phone_number" => SetPhoneNumber(),
"verification_code" => SetVerificationCode(),
"password" => SetPassword2FA(),
"session_pathname" => SESSION_FILE, // ФИКСИРОВАННЫЙ ПУТЬ!
"device_model" => "PC",
"system_version" => "Windows 10",
"app_version" => "1.35.0",
_ => null
};
}
static async Task InitializationMyProfile()
{
try
{
WTelegram.Helpers.Log = (lvl, str) =>
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {lvl}: {str}");
bool hasSession = File.Exists(SESSION_FILE);
Console.WriteLine(hasSession
? "✓ Загружаю существующую сессию..."
: "⚠ Создаю новую сессию...");
MyClient = new Client(Config);
MyUser = await MyClient.LoginUserIfNeeded();
Console.WriteLine($"✓ Авторизован: {MyUser.first_name} {MyUser.last_name}");
Console.WriteLine($"✓ Файл сессии: {SESSION_FILE}");
}
catch (Exception ex)
{
Console.WriteLine($"✗ Ошибка: {ex.Message}");
throw;
}
}
private static readonly string DB_PATH = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"MyTelegramApp",
"tdlib_database"
);
private static readonly string FILES_PATH = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"MyTelegramApp",
"tdlib_files"
);
static async Task Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Directory.CreateDirectory(DB_PATH);
Directory.CreateDirectory(FILES_PATH);
_client = CreateTdClient();
await _client.ExecuteAsync(new TdApi.SetLogVerbosityLevel { NewVerbosityLevel = 2 });
while (!_haveAuthorization)
{
await Task.Delay(500);
}
Console.WriteLine("✅ Авторизация успешно завершена!");
Console.WriteLine($"✅ База данных: {DB_PATH}");
}
private static async Task OnAuthorizationStateUpdate(TdApi.AuthorizationState state)
{
if (state != null)
_state = state;
switch (_state)
{
case TdApi.AuthorizationState.AuthorizationStateWaitTdlibParameters:
bool hasDatabase = Directory.Exists(DB_PATH) &&
Directory.GetFiles(DB_PATH).Length > 0;
Console.WriteLine(hasDatabase
? "✓ Загружаю существующую сессию из базы данных..."
: "⚠ Создаю новую базу данных...");
await _client.ExecuteAsync(new TdApi.SetTdlibParameters
{
DatabaseDirectory = DB_PATH,
FilesDirectory = FILES_PATH,
UseMessageDatabase = false,
UseChatInfoDatabase = false,
UseSecretChats = true,
ApiId = YOUR_REAL_API_ID,
ApiHash = "YOUR_REAL_API_HASH",
SystemLanguageCode = "ru",
DeviceModel = "Desktop",
SystemVersion = "Windows 10",
ApplicationVersion = "1.0",
EnableStorageOptimizer = true,
IgnoreFileNames = false
});
break;
// дальше всё также как и в коде
}
}
Тогда зачем в этой библиотеке возможность создавать свою авторизацию юзера?