feat: added export to csv file

This commit is contained in:
Savely Savianok
2025-02-11 22:37:33 +03:00
parent e9db40dee9
commit d0ad97f08b
8 changed files with 130 additions and 74 deletions

View File

@@ -5,27 +5,29 @@ namespace TelegramMessageCounter
{
internal static class Program
{
private static readonly Client Client = new(23711185, "9e23f24bbb2f3dc3e561c0a5c9d3e622"); //Please, create your client, but don't shy use it if you are lazy :)
private static readonly Client
Client = new(23711185,
"9e23f24bbb2f3dc3e561c0a5c9d3e622"); //Please, create your client, but don't shy use it if you are lazy :)
static void Main(string[] args)
{
var dataRequest = ArgumentReader.ReadArguments(args);
var username = dataRequest.Login;
Splash.MakeSplash();
loginStage:
if (username is null)
{
Console.WriteLine("Enter your phone number: ");
username = Console.ReadLine();
}
if (username is null)
{
Console.WriteLine("Login is invalid!");
goto loginStage;
}
Helpers.Log = (_, _) => { }; //force logger to shut up
Console.ForegroundColor = ConsoleColor.Yellow;
@@ -38,11 +40,11 @@ namespace TelegramMessageCounter
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine($"Welcome, {Client.User}!");
List<CounterInfo> infos = [];
foreach(var user in Client.Messages_GetAllDialogs().Result.users.Values)
foreach (var user in Client.Messages_GetAllDialogs().Result.users.Values)
{
if(dataRequest.Username is not null && user.username != dataRequest.Username)
if (dataRequest.Username is not null && user.username != dataRequest.Username)
continue;
var res = GetInfo(user.id);
if (res == null)
{
@@ -50,12 +52,17 @@ namespace TelegramMessageCounter
continue;
}
Console.WriteLine($"MessageMultiplier {Client.User}/{res.TargetUsername} is: {res.MessageMultiplier} of {res.UserMessageCount}/{res.TargetMessageCount} and total {res.FullMessageCount} messages");
Console.WriteLine(
$"MessageMultiplier {Client.User}/{res.TargetUsername} is: {res.MessageMultiplier} of {res.UserMessageCount}/{res.TargetMessageCount} and total {res.FullMessageCount} messages");
infos.Add(res);
}
SaveAndAddStats(infos, dataRequest.Path);
if (dataRequest.Path.Contains(".csv"))
ResultWriter.SaveStatsToCsv(infos, dataRequest.Path);
else
ResultWriter.SaveStatsToTxt(infos, dataRequest.Path);
}
static CounterInfo? GetInfo(long targetId)
{
var dialogs = Client.Messages_GetAllDialogs().Result;
@@ -104,6 +111,7 @@ namespace TelegramMessageCounter
// ignored
}
}
fullMsgCount = res.Count;
}
catch (Exception)
@@ -132,54 +140,36 @@ namespace TelegramMessageCounter
}
}
}
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[DONE]");
Console.ForegroundColor = ConsoleColor.White;
return new(
(float)userMsgCount / targetMsgCount,
(float)userMsgCount / targetMsgCount,
(float)userSymbolsCount / targetSymbolsCount,
userMsgCount,
targetMsgCount,
userMsgCount,
targetMsgCount,
userSymbolsCount,
targetSymbolsCount,
fullMsgCount,
fullMsgCount,
string.IsNullOrEmpty(peer?.username ?? "") ? peer?.id.ToString() ?? "unknown" : $"@{peer?.username}");
}
static void SaveAndAddStats(List<CounterInfo> infos, string path = "results.txt")
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("Saving results...");
string fileData = "";
float multiplier = 0;
foreach (CounterInfo info in infos)
{
fileData += "username: " + info.TargetUsername + "\n" +
"message multiplier (You/Target): " + info.MessageMultiplier + "\n" +
"symbol multiplier (You/Target): " + info.SymbolsMultiplier + "\n" +
"total messages: " + info.FullMessageCount + "\n" +
"your messages: " + info.UserMessageCount + "\n" +
"target messages: " + info.TargetMessageCount + "\n" +
"your symbols in messages: " + info.UserSymbolsCount + "\n" +
"target symbols in messages: " + info.TargetSymbolsCount + "\n-----\n";
multiplier += info.MessageMultiplier;
}
multiplier /= infos.Count;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[DONE]");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine($"Middle result is: {multiplier}");
File.WriteAllText(path, fileData);
Console.WriteLine("Goodbye!");
}
static async Task DoLogin(string loginInfo)
{
while (Client.User == null)
switch (await Client.Login(loginInfo)) // returns which config is needed to continue login
{
case "verification_code": Console.Write("Code: "); loginInfo = Console.ReadLine()!; break;
case "password": Console.Write("Password: "); loginInfo = Console.ReadLine()!; break; // if user has enabled 2FA
case "verification_code":
Console.Write("Code: ");
loginInfo = Console.ReadLine()!;
break;
case "password":
Console.Write("Password: ");
loginInfo = Console.ReadLine()!;
break; // if user has enabled 2FA
default: loginInfo = null!; break;
}
}