feat: rework of argument read. Added possibility to analyze only one user.

This commit is contained in:
Pavel-Savely Savianok 2025-02-11 20:51:33 +03:00
parent df34347920
commit 1e40bbd735
4 changed files with 58 additions and 22 deletions

38
ArgumentReader.cs Normal file
View File

@ -0,0 +1,38 @@
namespace TelegramMessageCounter;
public static class ArgumentReader
{
public static DataRequest ReadArguments(string[] args)
{
string? login = null;
string? username = null;
if (args.Length > 0 && args.Any(x => x == "--help"))
{
Console.WriteLine("Usage: TelegramMessageCounter --login (phone number) --user (username) <path>" +
"\n login - Phone number of telegram. If argument is empty, waiting for Keyboard interrupt" +
"\nuser - Username of telegram for individual stats. If argument is empty, analyzing all user history" +
"\n path - Path to save results file. If argument is empty, path will be \"results.txt\"\n");
Environment.Exit(0);
}
if (args.Any(x => x == "--user"))
{
var userNameArgIndex = args.ToList().IndexOf("--user");
username = args[userNameArgIndex+1];
}
if (args.Any(x => x == "--login" || x == "-L"))
{
var userNameArgIndex = args.ToList().IndexOf("--login");
if (userNameArgIndex == -1)
{
userNameArgIndex = args.ToList().IndexOf("-L");
}
login = args[userNameArgIndex+1];
}
string? path = args.Length > 1 ? args.Last() : null;
return new(login, username, (path ?? default)!);
}
}

3
DataRequest.cs Normal file
View File

@ -0,0 +1,3 @@
namespace TelegramMessageCounter;
public record DataRequest(string? Login, string? Username, string Path = "results.txt");

View File

@ -8,25 +8,19 @@ namespace TelegramMessageCounter
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) static void Main(string[] args)
{ {
if (args.Length > 0 && args[0] == "--help")
{ var dataRequest = ArgumentReader.ReadArguments(args);
Console.WriteLine("Usage: TelegramMessageCounter <login (phone number)> <path>" + var username = dataRequest.Login;
"\n login - Phone number of telegram. If argument is empty, waiting for Keyboard interrupt" +
"\n path - Path to save results file. If argument is empty, path will be \"results.txt\"\n");
}
string? login = args.Length > 0 ? args[0] : null;
string? path = args.Length > 1 ? args[1] : null;
Splash.MakeSplash(); Splash.MakeSplash();
loginStage: loginStage:
if (login is null) if (username is null)
{ {
Console.WriteLine("Enter your phone number: "); Console.WriteLine("Enter your phone number: ");
login = Console.ReadLine(); username = Console.ReadLine();
} }
if (login is null) if (username is null)
{ {
Console.WriteLine("Login is invalid!"); Console.WriteLine("Login is invalid!");
goto loginStage; goto loginStage;
@ -37,7 +31,7 @@ namespace TelegramMessageCounter
Console.ForegroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Waiting to login..."); Console.WriteLine("Waiting to login...");
DoLogin(login).Wait(); DoLogin(username).Wait();
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[DONE]"); //Check logged Console.WriteLine("[DONE]"); //Check logged
@ -46,6 +40,9 @@ namespace TelegramMessageCounter
List<CounterInfo> infos = []; 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)
continue;
var res = GetInfo(user.id); var res = GetInfo(user.id);
if (res == null) if (res == null)
{ {
@ -56,10 +53,7 @@ namespace TelegramMessageCounter
Console.WriteLine($"Multiplier {Client.User}/{res.TargetUsername} is: {res.Multiplier} of {res.MyMsg}/{res.TargetMsg} and total {res.FullMsg} messages"); Console.WriteLine($"Multiplier {Client.User}/{res.TargetUsername} is: {res.Multiplier} of {res.MyMsg}/{res.TargetMsg} and total {res.FullMsg} messages");
infos.Add(res); infos.Add(res);
} }
if(path is not null) SaveAndAddStats(infos, dataRequest.Path);
SaveAndAddStats(infos, path);
else
SaveAndAddStats(infos);
} }
static CounterInfo? GetInfo(long targetId) static CounterInfo? GetInfo(long targetId)

View File

@ -6,9 +6,10 @@ Program for calculate statistics of messages sended in telegram with your friend
## Usage ## Usage
.\TelegramMessageCounter.exe <login (phone number)> <path> .\TelegramMessageCounter.exe --login (phone number) --user (username) <path>
where where
- `login` - Phone number of telegram. If argument is empty, waiting for Keyboard interrupt - `--login (-L)` - Phone number of telegram. If argument is empty, waiting for Keyboard interrupt
- `--user` - Username of telegram for individual stats. If argument is empty, analyzing all user history
- `path` - Path to save results file. If argument is empty, path will be `results.txt` - `path` - Path to save results file. If argument is empty, path will be `results.txt`
To invoke this text use To invoke this text use
@ -16,9 +17,9 @@ To invoke this text use
.\TelegramMessageCounter.exe --help .\TelegramMessageCounter.exe --help
### Example ### Example
.\TelegramMessageCounter.exe +14928587194 .\TelegramMessageCounter.exe --login +14928587194
.\TelegramMessageCounter.exe +14928587194 D:\Results\results.txt .\TelegramMessageCounter.exe -L +14928587194 D:\Results\results.txt
.\TelegramMessageCounter.exe .\TelegramMessageCounter.exe -L +14928587194 --user lisoveliy
### Results ### Results