fix(messages): sync recognize configured app link entities
This commit is contained in:
parent
35d3908660
commit
c9371c6048
12 changed files with 327 additions and 72 deletions
|
|
@ -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_to,saved_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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue