merged with fixes

This commit is contained in:
onysd 2026-09-09 02:49:30 +03:00
parent a9e758b712
commit 2f1818d656
176 changed files with 9000 additions and 907 deletions

View file

@ -806,10 +806,13 @@ func tgGlobalSearchMessages(viewerUserID int64, limit int, private domain.Messag
return &tg.MessagesMessages{Messages: messages, Chats: chats, Users: users}
}
func (r *Router) messageFilterFromHistoryRequest(userID int64, req *tg.MessagesGetHistoryRequest) (domain.MessageFilter, bool) {
peer, ok := r.domainPeerFromInputPeer(userID, req.Peer)
if !ok {
return domain.MessageFilter{}, false
func (r *Router) messageFilterFromHistoryRequest(ctx context.Context, userID int64, req *tg.MessagesGetHistoryRequest) (domain.MessageFilter, error) {
if err := validateMessageReadBounds(req.Limit, req.OffsetID, req.MaxID, req.MinID); err != nil {
return domain.MessageFilter{}, err
}
peer, err := r.checkedMessageReadPeer(ctx, userID, req.Peer, false)
if err != nil {
return domain.MessageFilter{}, err
}
limit := req.Limit
if limit > 50 {
@ -825,10 +828,13 @@ func (r *Router) messageFilterFromHistoryRequest(userID int64, req *tg.MessagesG
MaxID: req.MaxID,
MinID: req.MinID,
Hash: req.Hash,
}, true
}, nil
}
func (r *Router) messageFilterFromSearchRequest(ctx context.Context, userID int64, req *tg.MessagesSearchRequest) (domain.MessageFilter, error) {
if err := validateMessageReadBounds(req.Limit, req.OffsetID, req.MaxID, req.MinID); err != nil {
return domain.MessageFilter{}, err
}
limit := req.Limit
if limit > 500 {
limit = 500
@ -840,6 +846,7 @@ func (r *Router) messageFilterFromSearchRequest(ctx context.Context, userID int6
MaxDate: req.MaxDate,
AddOffset: domain.ClampMessageHistoryAddOffset(req.AddOffset),
Limit: limit,
CountOnly: req.Limit == 0,
MaxID: req.MaxID,
MinID: req.MinID,
Hash: req.Hash,
@ -850,10 +857,21 @@ func (r *Router) messageFilterFromSearchRequest(ctx context.Context, userID int6
filter.PhoneCallsOnly = true
filter.MissedPhoneCallsOnly = phoneCalls.Missed
}
if peer, ok := r.domainPeerFromInputPeer(userID, req.Peer); ok {
if empty, ok := req.Peer.(*tg.InputPeerEmpty); !ok || empty == nil {
peer, err := r.checkedMessageReadPeer(ctx, userID, req.Peer, false)
if err != nil {
return domain.MessageFilter{}, err
}
filter.HasPeer = true
filter.Peer = peer
}
if req.FromID != nil {
from, err := r.checkedMessageReadPeer(ctx, userID, req.FromID, true)
if err != nil {
return domain.MessageFilter{}, err
}
filter.SenderUserID = from.ID
}
savedReactions, hasSavedReactions := req.GetSavedReaction()
// An empty optional vector carries no reaction-filtering semantics. Some TL
// clients emit flags.3 with a zero-length vector on ordinary peer searches.