Receive emoji reactions (#11)

This commit is contained in:
Laura Hausmann 2023-01-18 03:32:49 +01:00
parent 65b83a6cd9
commit 9bab0102e8
Signed by: zotan
GPG key ID: D044E84C5BE01605

View file

@ -51,9 +51,7 @@ namespace tgcli {
if (!Directory.Exists(dbdir))
Directory.CreateDirectory(dbdir);
client.Send(new SetLogStream {
LogStream = new LogStream.LogStreamFile { Path = Path.Combine(dbdir, "tdlib.log"), MaxFileSize = 10000000 }
});
client.Send(new SetLogStream { LogStream = new LogStream.LogStreamFile { Path = Path.Combine(dbdir, "tdlib.log"), MaxFileSize = 10000000 } });
client.Send(new SetLogVerbosityLevel { NewVerbosityLevel = 2 });
@ -62,9 +60,7 @@ namespace tgcli {
client.UpdateReceived += HandleUpdate;
OnAuthUpdate(new Update.UpdateAuthorizationState {
AuthorizationState = new AuthorizationState.AuthorizationStateWaitTdlibParameters()
});
OnAuthUpdate(new Update.UpdateAuthorizationState { AuthorizationState = new AuthorizationState.AuthorizationStateWaitTdlibParameters() });
while (!authorized) {
Thread.Sleep(1);
@ -100,6 +96,9 @@ namespace tgcli {
}
});
break;
case Update.UpdateMessageUnreadReactions message:
Task.Run(() => AddMessageToQueue(message));
break;
case Update.UpdateMessageSendSucceeded sentMsg:
lastMessage = sentMsg.Message;
break;
@ -315,7 +314,7 @@ namespace tgcli {
HandleCommand(currentChatId == 0 ? "q" : "c");
ScreenUpdate();
return;
// input navigation
case ConsoleKey.U when key.Modifiers.HasFlag(ConsoleModifiers.Control):
SetInputLine("");
@ -357,9 +356,9 @@ namespace tgcli {
UseSecretChats = true
});
break;
// case AuthorizationState.AuthorizationStateWaitEncryptionKey _:
// client.Send(new Td.TdApi.CheckDatabaseEncryptionKey());
// break;
// case AuthorizationState.AuthorizationStateWaitEncryptionKey _:
// client.Send(new Td.TdApi.CheckDatabaseEncryptionKey());
// break;
case AuthorizationState.AuthorizationStateWaitPhoneNumber _: {
Console.Write("[tgcli] login> ");
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();
if (!isReply) {
finalOutput += arrows + lines.First();
@ -471,7 +478,7 @@ namespace tgcli {
var username = TruncateString(GetFormattedUsername(msg.SenderId), 10);
var time = FormatTime(msg.Date);
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;
chat.Title = TruncateString(chat.Title, 20);
@ -508,6 +515,7 @@ namespace tgcli {
var time = FormatTime(message.EditDate);
var isChannel = message.IsChannelPost;
var isPrivate = chat.Type is ChatType.ChatTypePrivate;
chat.Title = TruncateString(chat.Title, 20);
return $"{Ansi.Bold}{Ansi.Green}[{time}] {Ansi.Cyan}{chat.Title} "
+ $"{(isPrivate || isChannel ? "" : $"{Ansi.Yellow}{username} ")}"
@ -515,6 +523,33 @@ namespace tgcli {
+ $"{text}"
+ $"{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) {
//handle muted
@ -554,5 +589,24 @@ namespace tgcli {
messageQueue.Add(formattedMessage);
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();
}
}
}