chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
120
internal/rpc/messages_delete.go
Normal file
120
internal/rpc/messages_delete.go
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gotd/td/tg"
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
func (r *Router) onMessagesDeleteMessages(ctx context.Context, req *tg.MessagesDeleteMessagesRequest) (*tg.MessagesAffectedMessages, error) {
|
||||
authKeyID, _ := AuthKeyIDFrom(ctx)
|
||||
userID, _, err := r.currentUserID(ctx)
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
if len(req.ID) == 0 || r.deps.Messages == nil {
|
||||
return r.affectedMessages(ctx, authKeyID, userID)
|
||||
}
|
||||
if len(req.ID) > domain.MaxDeleteMessageIDs {
|
||||
return nil, limitInvalidErr()
|
||||
}
|
||||
// 官方对私聊 revoke 不做 block 限制:被对方拉黑后撤回自己的消息仍
|
||||
// 双向生效;客户端删除请求的 fail handler 是静默的,服务端报错只会
|
||||
// 造成"本地已删、服务端未删"的复活错乱。
|
||||
sessionID, _ := SessionIDFrom(ctx)
|
||||
res, err := r.deps.Messages.DeleteMessages(ctx, userID, domain.DeleteMessagesRequest{
|
||||
OwnerUserID: userID,
|
||||
IDs: req.ID,
|
||||
Revoke: req.GetRevoke(),
|
||||
Date: int(r.clock.Now().Unix()),
|
||||
OriginAuthKeyID: authKeyID,
|
||||
OriginSessionID: sessionID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
self := res.Self()
|
||||
if len(self.MessageIDs) == 0 || self.Event.Pts == 0 {
|
||||
return r.affectedMessages(ctx, authKeyID, userID)
|
||||
}
|
||||
return &tg.MessagesAffectedMessages{Pts: self.Event.Pts, PtsCount: self.Event.PtsCount}, nil
|
||||
}
|
||||
|
||||
func (r *Router) onMessagesDeleteHistory(ctx context.Context, req *tg.MessagesDeleteHistoryRequest) (*tg.MessagesAffectedHistory, error) {
|
||||
authKeyID, _ := AuthKeyIDFrom(ctx)
|
||||
userID, _, err := r.currentUserID(ctx)
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
peer, err := r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if peer.Type == domain.PeerTypeChannel {
|
||||
if r.deps.Channels == nil {
|
||||
return r.affectedHistory(ctx, authKeyID, userID, 0)
|
||||
}
|
||||
if req.MaxID < 0 || req.MaxID > domain.MaxMessageBoxID {
|
||||
return nil, messageIDInvalidErr()
|
||||
}
|
||||
res, err := r.deps.Channels.DeleteHistory(ctx, userID, domain.DeleteChannelHistoryRequest{
|
||||
UserID: userID,
|
||||
ChannelID: peer.ID,
|
||||
MaxID: req.MaxID,
|
||||
ForEveryone: req.GetRevoke(),
|
||||
Date: int(r.clock.Now().Unix()),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, channelDeleteErr(err)
|
||||
}
|
||||
if res.Event.Pts != 0 {
|
||||
r.enqueueChannelFanout(ctx, channelFanoutMembers, userID, res.Channel.ID, res.Event.Pts, res.Recipients, func(_ context.Context, viewerUserID int64) *tg.Updates {
|
||||
return r.channelDeleteMessagesUpdates(viewerUserID, res.Channel, res.Event)
|
||||
})
|
||||
return &tg.MessagesAffectedHistory{Pts: res.Event.Pts, PtsCount: res.Event.PtsCount, Offset: res.Offset}, nil
|
||||
}
|
||||
if res.AvailableMinID > 0 {
|
||||
event := r.recordChannelAvailableMessages(ctx, userID, res.Channel.ID, res.AvailableMinID)
|
||||
updates := r.channelAvailableMessagesUpdates(userID, res.Channel, event.MaxID)
|
||||
updates.Updates = appendAuxPtsBookkeeping(updates.Updates, event)
|
||||
r.pushUserUpdates(ctx, userID, updates)
|
||||
if event.Pts != 0 {
|
||||
return &tg.MessagesAffectedHistory{Pts: event.Pts, PtsCount: event.PtsCount, Offset: res.Offset}, nil
|
||||
}
|
||||
}
|
||||
return &tg.MessagesAffectedHistory{Pts: res.Channel.Pts, PtsCount: 0, Offset: res.Offset}, nil
|
||||
}
|
||||
if peer.Type != domain.PeerTypeUser {
|
||||
return nil, peerIDInvalidErr()
|
||||
}
|
||||
if r.deps.Messages == nil {
|
||||
return r.affectedHistory(ctx, authKeyID, userID, 0)
|
||||
}
|
||||
sessionID, _ := SessionIDFrom(ctx)
|
||||
minDate, _ := req.GetMinDate()
|
||||
maxDate, _ := req.GetMaxDate()
|
||||
res, err := r.deps.Messages.DeleteHistory(ctx, userID, domain.DeleteHistoryRequest{
|
||||
OwnerUserID: userID,
|
||||
Peer: peer,
|
||||
MaxID: req.MaxID,
|
||||
MinDate: minDate,
|
||||
MaxDate: maxDate,
|
||||
JustClear: req.GetJustClear(),
|
||||
Revoke: req.GetRevoke(),
|
||||
Date: int(r.clock.Now().Unix()),
|
||||
OriginAuthKeyID: authKeyID,
|
||||
OriginSessionID: sessionID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
self := res.Self()
|
||||
if len(self.MessageIDs) == 0 || self.Event.Pts == 0 {
|
||||
return r.affectedHistory(ctx, authKeyID, userID, 0)
|
||||
}
|
||||
return &tg.MessagesAffectedHistory{
|
||||
Pts: self.Event.Pts,
|
||||
PtsCount: self.Event.PtsCount,
|
||||
Offset: res.Offset,
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue