owpengram-server/internal/rpc/messages_games.go

96 lines
2.6 KiB
Go

package rpc
import (
"context"
"github.com/iamxvbaba/td/tg"
)
func (r *Router) onMessagesGetEmojiGameInfo(ctx context.Context) (tg.MessagesEmojiGameInfoClass, error) {
if _, _, err := r.currentUserID(ctx); err != nil {
return nil, internalErr()
}
return &tg.MessagesEmojiGameUnavailable{}, nil
}
func (r *Router) onMessagesGetGameHighScores(ctx context.Context, req *tg.MessagesGetGameHighScoresRequest) (*tg.MessagesHighScores, error) {
botID, err := r.callerBotID(ctx)
if err != nil {
return nil, err
}
if req.ID <= 0 {
return nil, messageIDInvalidErr()
}
if _, err := r.checkedDomainPeerFromInputPeer(ctx, botID, req.Peer); err != nil {
return nil, err
}
if err := r.validateInputUser(ctx, req.UserID); err != nil {
return nil, err
}
return nil, messageIDInvalidErr()
}
func (r *Router) onMessagesGetInlineGameHighScores(ctx context.Context, req *tg.MessagesGetInlineGameHighScoresRequest) (*tg.MessagesHighScores, error) {
if _, err := r.callerBotID(ctx); err != nil {
return nil, err
}
if err := validateInputBotInlineMessageID(req.ID); err != nil {
return nil, err
}
if err := r.validateInputUser(ctx, req.UserID); err != nil {
return nil, err
}
return nil, messageIDInvalidErr()
}
func (r *Router) onMessagesSetGameScore(ctx context.Context, req *tg.MessagesSetGameScoreRequest) (tg.UpdatesClass, error) {
botID, err := r.callerBotID(ctx)
if err != nil {
return nil, err
}
if req.ID <= 0 {
return nil, messageIDInvalidErr()
}
if req.Score < 0 {
return nil, scoreInvalidErr()
}
if _, err := r.checkedDomainPeerFromInputPeer(ctx, botID, req.Peer); err != nil {
return nil, err
}
if err := r.validateInputUser(ctx, req.UserID); err != nil {
return nil, err
}
return nil, messageIDInvalidErr()
}
func (r *Router) onMessagesSetInlineGameScore(ctx context.Context, req *tg.MessagesSetInlineGameScoreRequest) (bool, error) {
if _, err := r.callerBotID(ctx); err != nil {
return false, err
}
if err := validateInputBotInlineMessageID(req.ID); err != nil {
return false, err
}
if req.Score < 0 {
return false, scoreInvalidErr()
}
if err := r.validateInputUser(ctx, req.UserID); err != nil {
return false, err
}
return false, messageIDInvalidErr()
}
func validateInputBotInlineMessageID(id tg.InputBotInlineMessageIDClass) error {
switch v := id.(type) {
case *tg.InputBotInlineMessageID:
if v.ID == 0 || v.AccessHash == 0 {
return messageIDInvalidErr()
}
case *tg.InputBotInlineMessageID64:
if v.OwnerID == 0 || v.ID <= 0 || v.AccessHash == 0 {
return messageIDInvalidErr()
}
default:
return messageIDInvalidErr()
}
return nil
}