Compare commits

..

No commits in common. "e9db40dee970ef6b59ae5f0da311d3d4549685b5" and "df343479204ee05c02e28028ac25ef0f63830b49" have entirely different histories.

6 changed files with 46 additions and 102 deletions

View File

@ -1,43 +0,0 @@
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?[] argValues = [login, username];
string? path = args.Length > 1 && argValues.All(x => x != args.Last()) ? args.Last() : null;
if (path == null)
return new(login, username);
return new(login, username, path);
}
}

View File

@ -8,13 +8,10 @@ namespace TelegramMessageCounter
{ {
internal record CounterInfo internal record CounterInfo
( (
float MessageMultiplier, float Multiplier,
float SymbolsMultiplier, int TargetMsg,
int UserMessageCount, int MyMsg,
int TargetMessageCount, int FullMsg,
int UserSymbolsCount,
int TargetSymbolsCount,
int FullMessageCount,
string TargetUsername string TargetUsername
); );
} }

View File

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

View File

@ -8,19 +8,25 @@ 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); {
var username = dataRequest.Login; Console.WriteLine("Usage: TelegramMessageCounter <login (phone number)> <path>" +
"\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 (username is null) if (login is null)
{ {
Console.WriteLine("Enter your phone number: "); Console.WriteLine("Enter your phone number: ");
username = Console.ReadLine(); login = Console.ReadLine();
} }
if (username is null) if (login is null)
{ {
Console.WriteLine("Login is invalid!"); Console.WriteLine("Login is invalid!");
goto loginStage; goto loginStage;
@ -31,7 +37,7 @@ namespace TelegramMessageCounter
Console.ForegroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Waiting to login..."); Console.WriteLine("Waiting to login...");
DoLogin(username).Wait(); DoLogin(login).Wait();
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[DONE]"); //Check logged Console.WriteLine("[DONE]"); //Check logged
@ -40,29 +46,27 @@ 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)
{ {
Console.WriteLine($"[WARN]User {user.id} failed to analyze! Skipping..."); Console.WriteLine($"User {user.id} not found! Skipping...");
continue; continue;
} }
Console.WriteLine($"MessageMultiplier {Client.User}/{res.TargetUsername} is: {res.MessageMultiplier} of {res.UserMessageCount}/{res.TargetMessageCount} and total {res.FullMessageCount} 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);
} }
SaveAndAddStats(infos, dataRequest.Path); if(path is not null)
SaveAndAddStats(infos, path);
else
SaveAndAddStats(infos);
} }
static CounterInfo? GetInfo(long targetId) static CounterInfo? GetInfo(long targetId)
{ {
var dialogs = Client.Messages_GetAllDialogs().Result; var dialogs = Client.Messages_GetAllDialogs().Result;
int userMsgCount = 0; int myCounter = 0;
int userSymbolsCount = 0; int targetCounter = 0;
int targetMsgCount = 0;
int targetSymbolsCount = 0;
User? peer; User? peer;
try try
{ {
@ -73,7 +77,7 @@ namespace TelegramMessageCounter
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[DONE]"); Console.WriteLine("[DONE]");
Console.WriteLine($"Username is: {peer?.username}"); Console.WriteLine($"Username is: {(peer)?.username}");
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -84,7 +88,7 @@ namespace TelegramMessageCounter
} }
List<Messages_MessagesBase> messagesList = []; List<Messages_MessagesBase> messagesList = [];
var fullMsgCount = 0; var messageCount = 0;
try try
{ {
var res = Client.Messages_GetHistory((InputPeer)peer).Result; var res = Client.Messages_GetHistory((InputPeer)peer).Result;
@ -104,7 +108,7 @@ namespace TelegramMessageCounter
// ignored // ignored
} }
} }
fullMsgCount = res.Count; messageCount =res.Count;
} }
catch (Exception) catch (Exception)
{ {
@ -121,14 +125,9 @@ namespace TelegramMessageCounter
{ {
if (msg.from_id != null) if (msg.from_id != null)
{ {
userMsgCount++; myCounter++;
userSymbolsCount += msg.message.Length;
}
else
{
targetMsgCount++;
targetSymbolsCount += msg.message.Length;
} }
else targetCounter++;
} }
} }
} }
@ -137,13 +136,10 @@ namespace TelegramMessageCounter
Console.ForegroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.White;
return new( return new(
(float)userMsgCount / targetMsgCount, (float)myCounter / targetCounter,
(float)userSymbolsCount / targetSymbolsCount, targetCounter,
userMsgCount, myCounter,
targetMsgCount, messageCount,
userSymbolsCount,
targetSymbolsCount,
fullMsgCount,
string.IsNullOrEmpty(peer?.username ?? "") ? peer?.id.ToString() ?? "unknown" : $"@{peer?.username}"); string.IsNullOrEmpty(peer?.username ?? "") ? peer?.id.ToString() ?? "unknown" : $"@{peer?.username}");
} }
@ -151,19 +147,17 @@ namespace TelegramMessageCounter
{ {
Console.ForegroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("Saving results..."); Console.Write("Saving results...");
File.Create("results.txt");
string fileData = ""; string fileData = "";
float multiplier = 0; float multiplier = 0;
foreach (CounterInfo info in infos) foreach (CounterInfo info in infos)
{ {
fileData += "username: " + info.TargetUsername + "\n" + fileData += "username: " + info.TargetUsername + "\n" +
"message multiplier (You/Target): " + info.MessageMultiplier + "\n" + "multiplier: " + info.Multiplier + "\n" +
"symbol multiplier (You/Target): " + info.SymbolsMultiplier + "\n" + "total messages: " + info.FullMsg + "\n" +
"total messages: " + info.FullMessageCount + "\n" + "your messages: " + info.MyMsg + "\n" +
"your messages: " + info.UserMessageCount + "\n" + "target messages: " + info.TargetMsg + "\n-----\n";
"target messages: " + info.TargetMessageCount + "\n" + multiplier += info.Multiplier;
"your symbols in messages: " + info.UserSymbolsCount + "\n" +
"target symbols in messages: " + info.TargetSymbolsCount + "\n-----\n";
multiplier += info.MessageMultiplier;
} }
multiplier /= infos.Count; multiplier /= infos.Count;
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;

View File

@ -6,10 +6,9 @@ Program for calculate statistics of messages sended in telegram with your friend
## Usage ## Usage
.\TelegramMessageCounter.exe --login (phone number) --user (username) <path> .\TelegramMessageCounter.exe <login (phone number)> <path>
where where
- `--login (-L)` - Phone number of telegram. If argument is empty, waiting for Keyboard interrupt - `login` - 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
@ -17,9 +16,9 @@ To invoke this text use
.\TelegramMessageCounter.exe --help .\TelegramMessageCounter.exe --help
### Example ### Example
.\TelegramMessageCounter.exe --login +14928587194 .\TelegramMessageCounter.exe +14928587194
.\TelegramMessageCounter.exe -L +14928587194 D:\Results\results.txt .\TelegramMessageCounter.exe +14928587194 D:\Results\results.txt
.\TelegramMessageCounter.exe -L +14928587194 --user lisoveliy .\TelegramMessageCounter.exe
### Results ### Results

View File

@ -9,7 +9,7 @@
Console.WriteLine("/__ \\/\\/\\ / __\\"); Console.WriteLine("/__ \\/\\/\\ / __\\");
Console.WriteLine(" / /\\/ \\ / / "); Console.WriteLine(" / /\\/ \\ / / ");
Console.WriteLine(" / / / /\\/\\ \\/ /___ "); Console.WriteLine(" / / / /\\/\\ \\/ /___ ");
Console.WriteLine(" \\/ \\/ \\/\\____/ v1.4 ꞵeta"); Console.WriteLine(" \\/ \\/ \\/\\____/ v1.3 ꞵeta");
Console.WriteLine("Telegram Message Counter by Lisoveliy"); Console.WriteLine("Telegram Message Counter by Lisoveliy");
} }
} }