fix(messages): sync recognize configured app link entities

This commit is contained in:
iamxvbaba 2026-08-01 00:12:02 +08:00
parent 35d3908660
commit c9371c6048
12 changed files with 327 additions and 72 deletions

View file

@ -65,6 +65,12 @@ func (r *Router) onMessagesSendMessage(ctx context.Context, req *tg.MessagesSend
sendErr = internalErr()
return nil, sendErr
}
// 自动实体必须在普通/频道/monoforum 分流前完成,保证所有文本写路径持久化同一份
// 服务端补全结果。指纹仍基于原始请求,派生实体不改变 random_id 幂等语义。
entities := req.Entities
if req.RichMessage == nil {
entities = r.augmentAutoEntities(req.Message, entities)
}
suggestedInput, hasSuggestedPost := req.GetSuggestedPost()
// monoforum 普通用户发送不带 reply_tosaved_peer 必须由服务端推导为自己;管理员回复才必须
// 显式携带 monoforum_peer_id。仅凭 reply_to 判路由会把用户请求误送进普通 megagroup 路径。
@ -127,7 +133,7 @@ func (r *Router) onMessagesSendMessage(ctx context.Context, req *tg.MessagesSend
IdempotencyFingerprint: idempotencyFingerprint,
IdempotencyPreflighted: replay.checked,
Message: req.Message,
Entities: domainMessageEntities(req.Entities),
Entities: domainMessageEntities(entities),
ReplyTo: replyTo,
Silent: req.Silent,
NoForwards: req.Noforwards,
@ -198,16 +204,11 @@ func (r *Router) onMessagesSendMessage(ctx context.Context, req *tg.MessagesSend
sendErr = messageEmptyErr()
return nil, sendErr
}
// 自动实体高亮:客户端未带 url/@mention/#hashtag/bot command 等「可自动识别」实体时,服务端
// 检测原文补充(官方服务端行为),否则 @username/链接等不渲染为可点蓝色。富文本走独立结构,不处理。
if richMessage == nil {
req.Entities = augmentAutoEntities(req.Message, req.Entities)
}
// 链接预览:纯文本消息(私聊或频道)含可预览 URL 且未抑制时,挂 pending 占位,异步解析回填。
// 富文本消息有独立媒体语义,不叠加。
var previewMedia *domain.MessageMedia
if richMessage == nil {
previewMedia = r.webPageMediaFromText(ctx, req.Message, req.Entities, req.NoWebpage, req.InvertMedia)
previewMedia = r.webPageMediaFromText(ctx, req.Message, entities, req.NoWebpage, req.InvertMedia)
}
if req.ScheduleDate != 0 && !scheduleDateIsImmediate(req.ScheduleDate, int(r.clock.Now().Unix())) {
updates, err := r.scheduleOutgoing(ctx, userID, peer, outgoingSend{
@ -215,7 +216,7 @@ func (r *Router) onMessagesSendMessage(ctx context.Context, req *tg.MessagesSend
idempotencyFingerprint: idempotencyFingerprint,
idempotencyPreflighted: replay.checked,
message: req.Message,
entities: req.Entities,
entities: entities,
media: previewMedia,
silent: req.Silent,
noforwards: req.Noforwards,
@ -236,7 +237,7 @@ func (r *Router) onMessagesSendMessage(ctx context.Context, req *tg.MessagesSend
idempotencyFingerprint: idempotencyFingerprint,
idempotencyPreflighted: replay.checked,
message: req.Message,
entities: req.Entities,
entities: entities,
media: previewMedia,
silent: req.Silent,
noforwards: req.Noforwards,