WIP contacts
This commit is contained in:
parent
fe3e2551f5
commit
ef91665a3f
|
@ -39,11 +39,14 @@ namespace telegram
|
||||||
new OpenCommand(),
|
new OpenCommand(),
|
||||||
new UnreadsCommand(),
|
new UnreadsCommand(),
|
||||||
new CloseUnreadCommand(),
|
new CloseUnreadCommand(),
|
||||||
|
new ListChatsCommand(),
|
||||||
new ListSecretChatsCommand(),
|
new ListSecretChatsCommand(),
|
||||||
new OpenSecretCommand(),
|
new OpenSecretCommand(),
|
||||||
new OpenSecretDirectCommand(),
|
new OpenSecretDirectCommand(),
|
||||||
new NewSecretChatCommand(),
|
new NewSecretChatCommand(),
|
||||||
new CloseSecretChatCommand(),
|
new CloseSecretChatCommand(),
|
||||||
|
new SearchUserCommand(),
|
||||||
|
new AddContactCommand(),
|
||||||
new QuitCommand(),
|
new QuitCommand(),
|
||||||
new HelpCommand(),
|
new HelpCommand(),
|
||||||
new LogoutCommand(),
|
new LogoutCommand(),
|
||||||
|
@ -476,6 +479,94 @@ namespace telegram
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ListChatsCommand : Command
|
||||||
|
{
|
||||||
|
public ListChatsCommand() : base("lc", "", "lists all chats, optionally filtered", "[query]", -1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Handler(List<string> inputParams)
|
||||||
|
{
|
||||||
|
var chats = GetChats();
|
||||||
|
|
||||||
|
lock (@lock)
|
||||||
|
{
|
||||||
|
if (inputParams.Count > 0)
|
||||||
|
{
|
||||||
|
var query = inputParams.Aggregate((current, param) => current + " " + param).Trim();
|
||||||
|
chats = chats.FindAll(p => p.Title.ToLower().Contains(query.ToLower()));
|
||||||
|
}
|
||||||
|
|
||||||
|
messageQueue.Add($"{Ansi.Yellow}[tgcli] Listing {chats.Count} chats.");
|
||||||
|
chats.ForEach(chat =>
|
||||||
|
{
|
||||||
|
string line;
|
||||||
|
if (chat.UnreadCount == 0)
|
||||||
|
line = $"{Ansi.Bold}{Ansi.Blue}[0] {chat.Title}";
|
||||||
|
else
|
||||||
|
line = $"{Ansi.Bold}{Ansi.Green}[{chat.UnreadCount}] {chat.Title}";
|
||||||
|
messageQueue.Add(line);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SearchUserCommand : Command
|
||||||
|
{
|
||||||
|
public SearchUserCommand() : base("su", "", "searches user globally", "<query>", -1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Handler(List<string> inputParams)
|
||||||
|
{
|
||||||
|
if (inputParams.Count == 0)
|
||||||
|
return; //TODO do something
|
||||||
|
|
||||||
|
var query = inputParams.Aggregate((current, param) => current + " " + param).Trim();
|
||||||
|
|
||||||
|
var chats = SearchChatsGlobal(query);
|
||||||
|
chats = chats.FindAll(p => p.Type is TdApi.ChatType.ChatTypePrivate);
|
||||||
|
|
||||||
|
lock (@lock)
|
||||||
|
{
|
||||||
|
messageQueue.Add($"{Ansi.Yellow}[tgcli] Listing {chats.Count} chats.");
|
||||||
|
chats.ForEach(chat =>
|
||||||
|
{
|
||||||
|
string line;
|
||||||
|
var type = (TdApi.ChatType.ChatTypePrivate) chat.Type;
|
||||||
|
var user = GetUser(type.UserId);
|
||||||
|
line = $"{Ansi.Bold}{Ansi.Yellow}@{user.Username} {Ansi.Magenta}{chat.Title}";
|
||||||
|
messageQueue.Add(line);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AddContactCommand : Command
|
||||||
|
{
|
||||||
|
public AddContactCommand() : base("ac", "", "adds user to contact list", "<username>", 1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Handler(List<string> inputParams)
|
||||||
|
{
|
||||||
|
var query = inputParams[0];
|
||||||
|
|
||||||
|
var chat = GetChatByUsernameGlobal(query);
|
||||||
|
|
||||||
|
if (chat.Type is TdApi.ChatType.ChatTypePrivate type)
|
||||||
|
{
|
||||||
|
lock (@lock)
|
||||||
|
messageQueue.Add($"AddUserToContacts({type.UserId}, {chat.Title});");
|
||||||
|
var user = SearchContacts("@" + GetUser(type.UserId).Username);
|
||||||
|
lock (@lock)
|
||||||
|
messageQueue.Add($"{user}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return; //TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class ListSecretChatsCommand : Command
|
public class ListSecretChatsCommand : Command
|
||||||
{
|
{
|
||||||
public ListSecretChatsCommand() : base("ls", "", "displays all open secret chats", "", 0)
|
public ListSecretChatsCommand() : base("ls", "", "displays all open secret chats", "", 0)
|
||||||
|
|
|
@ -147,6 +147,57 @@ namespace telegram
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Chat> GetChats()
|
||||||
|
{
|
||||||
|
var response = client.ExecuteAsync(new GetChats
|
||||||
|
{
|
||||||
|
OffsetOrder = long.MaxValue,
|
||||||
|
Limit = int.MaxValue
|
||||||
|
}).Result;
|
||||||
|
return response.ChatIds.Select(GetChat).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Chat> SearchChatsGlobal(string query)
|
||||||
|
{
|
||||||
|
if (query.TrimStart('@').Length < 5)
|
||||||
|
{
|
||||||
|
return new List<Chat>();
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = client.ExecuteAsync(new SearchPublicChats
|
||||||
|
{
|
||||||
|
Query = query
|
||||||
|
}).Result;
|
||||||
|
return response.ChatIds.Select(GetChat).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Chat GetChatByUsernameGlobal(string username)
|
||||||
|
{
|
||||||
|
var response = client.ExecuteAsync(new SearchPublicChat
|
||||||
|
{
|
||||||
|
Username = username
|
||||||
|
}).Result;
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddUserToContacts(int userId, string name)
|
||||||
|
{
|
||||||
|
//TODO this is broken
|
||||||
|
var response = client.ExecuteAsync(new ImportContacts
|
||||||
|
{
|
||||||
|
Contacts = new[]
|
||||||
|
{
|
||||||
|
new Contact
|
||||||
|
{
|
||||||
|
UserId = userId,
|
||||||
|
FirstName = name,
|
||||||
|
LastName = "",
|
||||||
|
PhoneNumber = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).Result;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Chat> GetSecretChats()
|
public static List<Chat> GetSecretChats()
|
||||||
{
|
{
|
||||||
var response = client.ExecuteAsync(new GetChats
|
var response = client.ExecuteAsync(new GetChats
|
||||||
|
@ -305,7 +356,8 @@ namespace telegram
|
||||||
|
|
||||||
if (query.StartsWith("@"))
|
if (query.StartsWith("@"))
|
||||||
return results.ChatIds.First(p =>
|
return results.ChatIds.First(p =>
|
||||||
GetChat(p).Type is ChatType.ChatTypePrivate type && GetUser(type.UserId).Username == query.Substring(1));
|
GetChat(p).Type is ChatType.ChatTypePrivate type &&
|
||||||
|
GetUser(type.UserId).Username == query.Substring(1));
|
||||||
return results.ChatIds.First();
|
return results.ChatIds.First();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -326,9 +378,9 @@ namespace telegram
|
||||||
Limit = 5
|
Limit = 5
|
||||||
}).Result;
|
}).Result;
|
||||||
|
|
||||||
if (query.StartsWith("@"))
|
return query.StartsWith("@")
|
||||||
return results.UserIds.First(p => GetUser(p).Username == query.Substring(1));
|
? results.UserIds.First(p => GetUser(p).Username == query.Substring(1))
|
||||||
return results.UserIds.First();
|
: results.UserIds.First();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,14 +14,14 @@ namespace telegram
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* TODO:
|
* TODO:
|
||||||
* waaay more error messages instead of just doing nothing or crashing (search for "do something")
|
* waaay more error messages instead of just doing nothing or crashing (search for TODOs and "do something")
|
||||||
* add option to disable terminal bell
|
|
||||||
* command /sg -> search globally, some way to add contacts?
|
* command /sg -> search globally, some way to add contacts?
|
||||||
* command /sc -> search in chat list & list matching chats, archived, muted indicator
|
|
||||||
* mute,unmute chats
|
* mute,unmute chats
|
||||||
* photo & document download & show externally
|
* photo & document download & show externally
|
||||||
* publish AUR package
|
* publish AUR package
|
||||||
* maybe cursor input nav (cmd+del, left/right, up for last inputs, etc)
|
* cursor input nav (up/down history, (alt +) left/right)
|
||||||
|
* ref: http://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html#cursor-navigation
|
||||||
|
* ref: https://en.wikipedia.org/wiki/ANSI_escape_code#Escape_sequences
|
||||||
* refactor everything
|
* refactor everything
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -41,11 +41,15 @@ namespace telegram
|
||||||
public static volatile List<string> messageQueue = new List<string>();
|
public static volatile List<string> messageQueue = new List<string>();
|
||||||
public static volatile List<string> missedMessages = new List<string>();
|
public static volatile List<string> missedMessages = new List<string>();
|
||||||
public static volatile string prefix = "[tgcli";
|
public static volatile string prefix = "[tgcli";
|
||||||
|
public static volatile bool silent = false;
|
||||||
|
|
||||||
public static volatile object @lock = new object();
|
public static volatile object @lock = new object();
|
||||||
|
|
||||||
private static void Main()
|
private static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
if (args.Length == 1 && args[0] == "-s")
|
||||||
|
silent = true;
|
||||||
|
|
||||||
dbdir =
|
dbdir =
|
||||||
$"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}{Path.DirectorySeparatorChar}.tgcli";
|
$"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}{Path.DirectorySeparatorChar}.tgcli";
|
||||||
if (!Directory.Exists(dbdir))
|
if (!Directory.Exists(dbdir))
|
||||||
|
@ -197,7 +201,7 @@ namespace telegram
|
||||||
{
|
{
|
||||||
ClearCurrentConsoleLine();
|
ClearCurrentConsoleLine();
|
||||||
messageQueue.ForEach(p => Console.WriteLine(p + Ansi.ResetAll));
|
messageQueue.ForEach(p => Console.WriteLine(p + Ansi.ResetAll));
|
||||||
if (messageQueue.Count > 0)
|
if (messageQueue.Count > 0 && !silent)
|
||||||
Console.Write("\a"); //ring terminal bell
|
Console.Write("\a"); //ring terminal bell
|
||||||
messageQueue.Clear();
|
messageQueue.Clear();
|
||||||
var status = GetFormattedStatus(currentUserRead);
|
var status = GetFormattedStatus(currentUserRead);
|
||||||
|
|
Loading…
Reference in a new issue