Skip to content

Commit ba626dc

Browse files
authored
[Core] fix MentionEntity parse (#105)
1 parent 1d831af commit ba626dc

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

Lagrange.Core/Message/Entities/MentionEntity.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Lagrange.Core.Message.Entities;
77

88
public class MentionEntity(long uin, string? display) : IMessageEntity
99
{
10-
public long Uin { get; } = uin;
10+
public long Uin { get; private set; } = uin;
1111

1212
public string? Display { get; private set; } = display;
1313

@@ -40,6 +40,16 @@ async Task IMessageEntity.Preprocess(BotContext context, BotMessage message)
4040
Uid = contact.Uid;
4141
}
4242
}
43+
44+
Task IMessageEntity.Postprocess(BotContext context, BotMessage message)
45+
{
46+
if (Uin == 0 && Uid != null)
47+
{
48+
Uin = context.CacheContext.ResolveUin(Uid);
49+
}
50+
51+
return Task.CompletedTask;
52+
}
4353

4454
string IMessageEntity.ToPreviewString() => Display ?? "";
4555

@@ -71,7 +81,12 @@ Elem[] IMessageEntity.Build()
7181
if (target.Text is { Attr6Buf.Length: > 0, PbReserve: { Length: > 0 } reserve })
7282
{
7383
var attr = ProtoHelper.Deserialize<TextResvAttr>(reserve.Span);
74-
return new MentionEntity((long)attr.AtMemberUin, target.Text.TextMsg);
84+
var entity = new MentionEntity((long)attr.AtMemberUin, target.Text.TextMsg);
85+
if (attr.AtType == 2) // AtType: 1 = mention_all, 2 = mention specific user
86+
{
87+
entity.Uid = attr.AtMemberUid;
88+
}
89+
return entity;
7590
}
7691

7792
return null;

0 commit comments

Comments
 (0)