我是WTelegramClient C#库的新手,已经习惯了TLSharp (不再工作了)
我试图了解在收到更新后如何获取用户信息,我有一个示例代码,可以监听更新并将其写入控制台,但我不明白如何响应发送消息的用户(新的更新)。
我想我需要用户id/access_hash来向发送者发送消息,但我不明白如何发送。
以下是我如何获得新消息,但它只能获得用户名或名称/id
private static void DisplayMessage(MessageBase messageBase, bool edit = false)
{
if (edit) Console.Write("(Edit): ");
switch (messageBase)
{
case Message m: Console.WriteLine($"{Peer(m.from_id) ?? m.post_author} in {Peer(m.peer_id)}> {m.message}"); break;
case MessageService ms: Console.WriteLine($"{Peer(ms.from_id)} in {Peer(ms.peer_id)} [{ms.action.GetType().Name[13..]}]"); break;
}
}在这里,我可以获得发件人的名称或用户名(如果有)和消息本身MessageService ('user‘不是频道或组),例如,只给我取名字和姓
如何获取发送者的所有信息或聊天本身(我想尝试标记为阅读消息)
我习惯了TLSharp,而新的库WTelegramClient就不一样了。
谢谢!
发布于 2022-02-10 01:35:54
下面是一个关于如何修改DisplayMessage以对用户私下发送的消息作出反应的快速示例,获取有关该用户的详细信息,验证它是谁以及发送给我们的文本,然后向他发送一条消息。
备注:
DisplayMessage现在是async Task,以便使用awaituser来发送消息,因为类User被隐式转换为InputPeerUser (带有用户id/access_hash)。PeerChat/PeerChannel类和_chats字典获取聊天详细信息。private static async Task DisplayMessage(MessageBase messageBase, bool edit = false)
{
if (edit) Console.Write("(Edit): ");
switch (messageBase)
{
case Message m:
Console.WriteLine($"{Peer(m.from_id) ?? m.post_author} in {Peer(m.peer_id)}> {m.message}");
if (m.flags.HasFlag(Message.Flags.out_))
break; // ignore our own outgoing messages
if (m.Peer is PeerUser pu) // got a message in a direct chat with a user
{
if (_users.TryGetValue(pu.user_id, out var user)) // get user details
{
if (user.username == "Wiz0u" && m.message == "hello")
{
await Client.SendMessageAsync(user, $"hi {user.first_name}, I'm {My.first_name}");
}
}
}
break;
case MessageService ms:
Console.WriteLine($"{Peer(ms.from_id)} in {Peer(ms.peer_id)} [{ms.action.GetType().Name[13..]}]");
break;
}
}https://stackoverflow.com/questions/71046258
复制相似问题