fix for gif and emojies categories
This commit is contained in:
parent
cf23b184d2
commit
5e18bd3830
6 changed files with 179 additions and 14 deletions
|
|
@ -78,9 +78,16 @@ func (r *Router) onMessagesGetInlineBotResults(ctx context.Context, req *tg.Mess
|
|||
return nil, err
|
||||
}
|
||||
}
|
||||
peer, err := r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
// inputPeerEmpty 是合法输入:客户端在未绑定具体聊天的全局搜索场景(如 GIF 面板的
|
||||
// 类目/搜索,尚未选定发送目标)会这样发。之前这里无条件走 checkedDomainPeerFromInputPeer,
|
||||
// 把它当无效 peer 拒绝(PEER_ID_INVALID),导致 Android 的 GIF 类目/搜索请求每次都
|
||||
// 400,客户端只能一直转圈——真实 Telegram 服务端接受这种"无聊天上下文"的查询。
|
||||
var peer domain.Peer
|
||||
if _, empty := req.Peer.(*tg.InputPeerEmpty); !empty {
|
||||
peer, err = r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// 内置(进程内)service bot 分支:@gif 没有 MTProto session、也没有 Bot API 消费者,
|
||||
// 走下面的「推 updateBotInlineQuery + 挂起 25s」必然超时,故同步问 responder。
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"github.com/iamxvbaba/td/tg"
|
||||
"github.com/iamxvbaba/td/tgerr"
|
||||
"sort"
|
||||
"telesrv/internal/domain"
|
||||
"unicode/utf8"
|
||||
|
|
@ -25,6 +26,25 @@ func (r *Router) onMessagesSearchStickerSets(ctx context.Context, req *tg.Messag
|
|||
}, nil
|
||||
}
|
||||
|
||||
// onMessagesSearchEmojiStickerSets 之前完全未注册,Android 的 emoji 分类点击/搜索会
|
||||
// 无限重试这个方法(每次都拿 NOT_IMPLEMENTED,客户端不认为这是终态错误,一直重发),
|
||||
// 表现为分类点击后结果区永远不出来。和 onMessagesSearchStickerSets 同策略,返回合法空结果。
|
||||
func (r *Router) onMessagesSearchEmojiStickerSets(ctx context.Context, req *tg.MessagesSearchEmojiStickerSetsRequest) (tg.MessagesFoundStickerSetsClass, error) {
|
||||
if _, _, err := r.currentUserID(ctx); err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
if utf8.RuneCountInString(req.Q) > maxStickerSearchQLength {
|
||||
return nil, limitInvalidErr()
|
||||
}
|
||||
if req.Hash != 0 {
|
||||
return &tg.MessagesFoundStickerSetsNotModified{}, nil
|
||||
}
|
||||
return &tg.MessagesFoundStickerSets{
|
||||
Hash: 0,
|
||||
Sets: []tg.StickerSetCoveredClass{},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *Router) onMessagesSearchStickers(ctx context.Context, req *tg.MessagesSearchStickersRequest) (tg.MessagesFoundStickersClass, error) {
|
||||
if _, _, err := r.currentUserID(ctx); err != nil {
|
||||
return nil, internalErr()
|
||||
|
|
@ -52,6 +72,28 @@ func (r *Router) onMessagesSearchStickers(ctx context.Context, req *tg.MessagesS
|
|||
}, nil
|
||||
}
|
||||
|
||||
func emoticonEmptyErr() error { return tgerr.New(400, "EMOTICON_EMPTY") }
|
||||
|
||||
// onMessagesSearchCustomEmoji 目前没有按 emoticon 反查自定义 emoji 的索引,故与
|
||||
// onMessagesSearchStickers/onMessagesSearchStickerSets 同策略:返回合法的空结果而非
|
||||
// NOT_IMPLEMENTED——之前完全未注册此方法时,Android 的 emoji 分类/搜索会拿到
|
||||
// notImplementedErr(),表现为一直转圈(客户端没有为这个具体错误重置搜索 UI 状态)。
|
||||
func (r *Router) onMessagesSearchCustomEmoji(ctx context.Context, req *tg.MessagesSearchCustomEmojiRequest) (tg.EmojiListClass, error) {
|
||||
if _, _, err := r.currentUserID(ctx); err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
if req.Emoticon == "" {
|
||||
return nil, emoticonEmptyErr()
|
||||
}
|
||||
if utf8.RuneCountInString(req.Emoticon) > maxStickerSearchQLength {
|
||||
return nil, limitInvalidErr()
|
||||
}
|
||||
if req.Hash != 0 {
|
||||
return &tg.EmojiListNotModified{}, nil
|
||||
}
|
||||
return &tg.EmojiList{Hash: 0, DocumentID: []int64{}}, nil
|
||||
}
|
||||
|
||||
func (r *Router) onMessagesGetSearchResultsCalendar(ctx context.Context, req *tg.MessagesGetSearchResultsCalendarRequest) (*tg.MessagesSearchResultsCalendar, error) {
|
||||
if req.OffsetID < 0 || req.OffsetID > domain.MaxMessageBoxID || req.OffsetDate < 0 {
|
||||
return nil, limitInvalidErr()
|
||||
|
|
|
|||
|
|
@ -363,6 +363,12 @@ func (r *Router) registerMessages(d *tlprofile.Dispatcher) {
|
|||
registerRPC[*tg.MessagesSearchStickersRequest](d, tlprofile.SemanticMethodMessagesSearchStickers, func(ctx context.Context, layerRequest *tg.MessagesSearchStickersRequest) (any, error) {
|
||||
return r.onMessagesSearchStickers(ctx, layerRequest)
|
||||
})
|
||||
registerRPC[*tg.MessagesSearchCustomEmojiRequest](d, tlprofile.SemanticMethodMessagesSearchCustomEmoji, func(ctx context.Context, layerRequest *tg.MessagesSearchCustomEmojiRequest) (any, error) {
|
||||
return r.onMessagesSearchCustomEmoji(ctx, layerRequest)
|
||||
})
|
||||
registerRPC[*tg.MessagesSearchEmojiStickerSetsRequest](d, tlprofile.SemanticMethodMessagesSearchEmojiStickerSets, func(ctx context.Context, layerRequest *tg.MessagesSearchEmojiStickerSetsRequest) (any, error) {
|
||||
return r.onMessagesSearchEmojiStickerSets(ctx, layerRequest)
|
||||
})
|
||||
registerRPC[*tg.MessagesGetAttachMenuBotsRequest](d, tlprofile.SemanticMethodMessagesGetAttachMenuBots, func(ctx context.Context, layerRequest *tg.MessagesGetAttachMenuBotsRequest) (any, error) {
|
||||
return r.onMessagesGetAttachMenuBots(ctx, layerRequest.
|
||||
Hash)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue