Receive emoji reactions (#11)
This commit is contained in:
parent
65b83a6cd9
commit
9bab0102e8
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue