owpengram-server/internal/rpc/stories.go
2026-06-04 01:37:39 +08:00

49 lines
1.8 KiB
Go

package rpc
import (
"context"
"github.com/gotd/td/tg"
"telesrv/internal/compat/tdesktop"
"telesrv/internal/domain"
)
// registerStories 注册第一阶段 TDesktop 启动所需 stories.* RPC 兼容响应。
func (r *Router) registerStories(d *tg.ServerDispatcher) {
d.OnStoriesGetAllStories(func(ctx context.Context, req *tg.StoriesGetAllStoriesRequest) (tg.StoriesAllStoriesClass, error) {
return tdesktop.AllStories(), nil
})
d.OnStoriesGetStoriesArchive(func(ctx context.Context, req *tg.StoriesGetStoriesArchiveRequest) (*tg.StoriesStories, error) {
return tdesktop.StoriesArchive(), nil
})
d.OnStoriesGetPinnedStories(func(ctx context.Context, req *tg.StoriesGetPinnedStoriesRequest) (*tg.StoriesStories, error) {
return tdesktop.PinnedStories(), nil
})
d.OnStoriesGetAlbums(func(ctx context.Context, req *tg.StoriesGetAlbumsRequest) (tg.StoriesAlbumsClass, error) {
return tdesktop.StoryAlbums(), nil
})
d.OnStoriesSendReaction(r.onStoriesSendReaction)
}
func (r *Router) onStoriesSendReaction(ctx context.Context, req *tg.StoriesSendReactionRequest) (tg.UpdatesClass, error) {
if req.StoryID <= 0 || req.StoryID > domain.MaxMessageBoxID {
return nil, storyIDInvalidErr()
}
userID, _, err := r.currentUserID(ctx)
if err != nil {
return nil, internalErr()
}
if _, err := r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer); err != nil {
return nil, err
}
if err := validateReactionClass(req.Reaction); err != nil {
return nil, err
}
if parsed, err := domainMessageReactionFromTL(req.Reaction); err == nil {
if err := r.recordMessageReactionUse(ctx, userID, []domain.MessageReaction{parsed}, req.GetAddToRecent(), int(r.clock.Now().Unix())); err != nil {
return nil, internalErr()
}
}
return tgEmptyUpdates(int(r.clock.Now().Unix())), nil
}