Receive emoji reactions (#11)
This commit is contained in:
parent
65b83a6cd9
commit
9bab0102e8
|
@ -51,9 +51,7 @@ namespace tgcli {
|
||||||
if (!Directory.Exists(dbdir))
|
if (!Directory.Exists(dbdir))
|
||||||
Directory.CreateDirectory(dbdir);
|
Directory.CreateDirectory(dbdir);
|
||||||
|
|
||||||
client.Send(new SetLogStream {
|
client.Send(new SetLogStream { LogStream = new LogStream.LogStreamFile { Path = Path.Combine(dbdir, "tdlib.log"), MaxFileSize = 10000000 } });
|
||||||
LogStream = new LogStream.LogStreamFile { Path = Path.Combine(dbdir, "tdlib.log"), MaxFileSize = 10000000 }
|
|
||||||
});
|
|
||||||
|
|
||||||
client.Send(new SetLogVerbosityLevel { NewVerbosityLevel = 2 });
|
client.Send(new SetLogVerbosityLevel { NewVerbosityLevel = 2 });
|
||||||
|
|
||||||
|
@ -62,9 +60,7 @@ namespace tgcli {
|
||||||
|
|
||||||
client.UpdateReceived += HandleUpdate;
|
client.UpdateReceived += HandleUpdate;
|
||||||
|
|
||||||
OnAuthUpdate(new Update.UpdateAuthorizationState {
|
OnAuthUpdate(new Update.UpdateAuthorizationState { AuthorizationState = new AuthorizationState.AuthorizationStateWaitTdlibParameters() });
|
||||||
AuthorizationState = new AuthorizationState.AuthorizationStateWaitTdlibParameters()
|
|
||||||
});
|
|
||||||
|
|
||||||
while (!authorized) {
|
while (!authorized) {
|
||||||
Thread.Sleep(1);
|
Thread.Sleep(1);
|
||||||
|
@ -100,6 +96,9 @@ namespace tgcli {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case Update.UpdateMessageUnreadReactions message:
|
||||||
|
Task.Run(() => AddMessageToQueue(message));
|
||||||
|
break;
|
||||||
case Update.UpdateMessageSendSucceeded sentMsg:
|
case Update.UpdateMessageSendSucceeded sentMsg:
|
||||||
lastMessage = sentMsg.Message;
|
lastMessage = sentMsg.Message;
|
||||||
break;
|
break;
|
||||||
|
@ -315,7 +314,7 @@ namespace tgcli {
|
||||||
HandleCommand(currentChatId == 0 ? "q" : "c");
|
HandleCommand(currentChatId == 0 ? "q" : "c");
|
||||||
ScreenUpdate();
|
ScreenUpdate();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// input navigation
|
// input navigation
|
||||||
case ConsoleKey.U when key.Modifiers.HasFlag(ConsoleModifiers.Control):
|
case ConsoleKey.U when key.Modifiers.HasFlag(ConsoleModifiers.Control):
|
||||||
SetInputLine("");
|
SetInputLine("");
|
||||||
|
@ -357,9 +356,9 @@ namespace tgcli {
|
||||||
UseSecretChats = true
|
UseSecretChats = true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
// case AuthorizationState.AuthorizationStateWaitEncryptionKey _:
|
// case AuthorizationState.AuthorizationStateWaitEncryptionKey _:
|
||||||
// client.Send(new Td.TdApi.CheckDatabaseEncryptionKey());
|
// client.Send(new Td.TdApi.CheckDatabaseEncryptionKey());
|
||||||
// break;
|
// break;
|
||||||
case AuthorizationState.AuthorizationStateWaitPhoneNumber _: {
|
case AuthorizationState.AuthorizationStateWaitPhoneNumber _: {
|
||||||
Console.Write("[tgcli] login> ");
|
Console.Write("[tgcli] login> ");
|
||||||
var phone = Console.ReadLine();
|
var phone = Console.ReadLine();
|
||||||
|
@ -449,7 +448,15 @@ namespace tgcli {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var rest = $"{text}{(msg.EditDate == 0 ? "" : $"{Ansi.Yellow}*")}";
|
var rest = $"{text}{(msg.EditDate == 0 ? "" : $"{Ansi.Yellow}*")}";
|
||||||
|
|
||||||
|
if (msg.InteractionInfo.Reactions.Any(p => p.Type is ReactionType.ReactionTypeEmoji)) {
|
||||||
|
rest = $"{rest} {Ansi.Cyan}<--";
|
||||||
|
foreach (var reaction in msg.InteractionInfo.Reactions)
|
||||||
|
if (reaction.Type is ReactionType.ReactionTypeEmoji emoji)
|
||||||
|
rest += $" {reaction.TotalCount} {emoji.Emoji}";
|
||||||
|
}
|
||||||
|
|
||||||
var lines = rest.Split("\n").ToList();
|
var lines = rest.Split("\n").ToList();
|
||||||
if (!isReply) {
|
if (!isReply) {
|
||||||
finalOutput += arrows + lines.First();
|
finalOutput += arrows + lines.First();
|
||||||
|
@ -471,7 +478,7 @@ namespace tgcli {
|
||||||
var username = TruncateString(GetFormattedUsername(msg.SenderId), 10);
|
var username = TruncateString(GetFormattedUsername(msg.SenderId), 10);
|
||||||
var time = FormatTime(msg.Date);
|
var time = FormatTime(msg.Date);
|
||||||
var isChannel = msg.IsChannelPost;
|
var isChannel = msg.IsChannelPost;
|
||||||
var isPrivate = chat.Type is ChatType.ChatTypePrivate || chat.Type is ChatType.ChatTypeSecret;
|
var isPrivate = chat.Type is ChatType.ChatTypePrivate or ChatType.ChatTypeSecret;
|
||||||
var isSecret = chat.Type is ChatType.ChatTypeSecret;
|
var isSecret = chat.Type is ChatType.ChatTypeSecret;
|
||||||
|
|
||||||
chat.Title = TruncateString(chat.Title, 20);
|
chat.Title = TruncateString(chat.Title, 20);
|
||||||
|
@ -508,6 +515,7 @@ namespace tgcli {
|
||||||
var time = FormatTime(message.EditDate);
|
var time = FormatTime(message.EditDate);
|
||||||
var isChannel = message.IsChannelPost;
|
var isChannel = message.IsChannelPost;
|
||||||
var isPrivate = chat.Type is ChatType.ChatTypePrivate;
|
var isPrivate = chat.Type is ChatType.ChatTypePrivate;
|
||||||
|
chat.Title = TruncateString(chat.Title, 20);
|
||||||
|
|
||||||
return $"{Ansi.Bold}{Ansi.Green}[{time}] {Ansi.Cyan}{chat.Title} "
|
return $"{Ansi.Bold}{Ansi.Green}[{time}] {Ansi.Cyan}{chat.Title} "
|
||||||
+ $"{(isPrivate || isChannel ? "" : $"{Ansi.Yellow}{username} ")}"
|
+ $"{(isPrivate || isChannel ? "" : $"{Ansi.Yellow}{username} ")}"
|
||||||
|
@ -515,6 +523,33 @@ namespace tgcli {
|
||||||
+ $"{text}"
|
+ $"{text}"
|
||||||
+ $"{Ansi.Yellow}*";
|
+ $"{Ansi.Yellow}*";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string FormatMessage(Update.UpdateMessageUnreadReactions msg) {
|
||||||
|
string text;
|
||||||
|
|
||||||
|
var message = GetMessage(msg.ChatId, msg.MessageId);
|
||||||
|
if (message.Content is MessageContent.MessageText messageText)
|
||||||
|
text = messageText.Text.Text;
|
||||||
|
else
|
||||||
|
text = $"[unsupported {message.Content.DataType}]";
|
||||||
|
var chat = GetChat(msg.ChatId);
|
||||||
|
var username = TruncateString(GetFormattedUsername(message.SenderId), 10);
|
||||||
|
var time = FormatTime(message.Date);
|
||||||
|
var isChannel = message.IsChannelPost;
|
||||||
|
var isPrivate = chat.Type is ChatType.ChatTypePrivate;
|
||||||
|
chat.Title = TruncateString(chat.Title, 20);
|
||||||
|
|
||||||
|
text = $"{text}{Ansi.Yellow} <-- ";
|
||||||
|
foreach (var reaction in msg.UnreadReactions)
|
||||||
|
if (reaction.Type is ReactionType.ReactionTypeEmoji emoji)
|
||||||
|
text += $"{emoji.Emoji} ({GetFormattedUsername(reaction.SenderId)})";
|
||||||
|
|
||||||
|
return $"{Ansi.Bold}{Ansi.Green}[{time}] {Ansi.Cyan}{chat.Title} "
|
||||||
|
+ $"{(isPrivate || isChannel ? "" : $"{Ansi.Yellow}{username} ")}"
|
||||||
|
+ $"{(message.IsOutgoing ? $"{Ansi.Blue}»»»" : $"{Ansi.Magenta}«««")} "
|
||||||
|
+ $"{(message.EditDate == 0 ? "" : $"{Ansi.Yellow}*")}"
|
||||||
|
+ $"{text}";
|
||||||
|
}
|
||||||
|
|
||||||
public static void AddMessageToQueue(Message msg) {
|
public static void AddMessageToQueue(Message msg) {
|
||||||
//handle muted
|
//handle muted
|
||||||
|
@ -554,5 +589,24 @@ namespace tgcli {
|
||||||
messageQueue.Add(formattedMessage);
|
messageQueue.Add(formattedMessage);
|
||||||
ScreenUpdate();
|
ScreenUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void AddMessageToQueue(Update.UpdateMessageUnreadReactions msg) {
|
||||||
|
//handle muted
|
||||||
|
if (GetChat(msg.ChatId).NotificationSettings.MuteFor > 0 && currentChatId != msg.ChatId)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!msg.UnreadReactions.Any(p => p.Type is ReactionType.ReactionTypeEmoji))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var formattedMessage = FormatMessage(msg);
|
||||||
|
|
||||||
|
if (currentChatId != 0 && msg.ChatId != currentChatId)
|
||||||
|
lock (@lock)
|
||||||
|
missedMessages.Add(formattedMessage);
|
||||||
|
else
|
||||||
|
lock (@lock)
|
||||||
|
messageQueue.Add(formattedMessage);
|
||||||
|
ScreenUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue