chore: refresh gramsrv public release

This commit is contained in:
A 2026-06-30 14:37:43 +08:00
parent 75cebe8dbf
commit 70b6820474
1274 changed files with 378751 additions and 59919 deletions

View file

@ -0,0 +1,64 @@
package rpc
import (
"context"
"unicode/utf8"
"github.com/gotd/td/tg"
"github.com/gotd/td/tgerr"
"telesrv/internal/domain"
)
func startParamInvalidErr() error { return tgerr.New(400, "START_PARAM_INVALID") }
// onMessagesStartBot 处理 messages.startBot深链 telesrv.net/bot?start=payload 与「启动 bot」
// 入口)。语义:向 bot 发送一条可见的 "/start" 或 "/start <param>" 普通私聊消息,走标准
// SendPrivateText 双盒+outbox返回真实 UpdatesI7。bot 经此收到 start_param。
// P3 仅私聊启动peer 为群(加 bot 进群后移P4群内 bot
func (r *Router) onMessagesStartBot(ctx context.Context, req *tg.MessagesStartBotRequest) (tg.UpdatesClass, error) {
if req.RandomID == 0 {
return nil, randomIDEmptyErr()
}
userID, _, err := r.currentUserID(ctx)
if err != nil {
return nil, internalErr()
}
if userID == 0 {
return nil, peerIDInvalidErr()
}
if utf8.RuneCountInString(req.StartParam) > domain.MaxStartParamLen {
return nil, startParamInvalidErr()
}
bot, found, err := r.userFromInput(ctx, userID, req.Bot)
if err != nil {
return nil, botInvalidErr()
}
if !found || !bot.Bot {
return nil, botInvalidErr()
}
// P3 仅私聊启动peer 必须解析为该 bot深链 start 的 peer=bot。群启动加 bot
// 进群)属 P4 群内 bot此处拒绝而非静默改写语义。
peer, err := r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer)
if err != nil {
return nil, err
}
if peer.Type != domain.PeerTypeUser || peer.ID != bot.ID {
return nil, peerIDInvalidErr()
}
if err := r.checkSendRateLimit(ctx, userID, 1); err != nil {
return nil, err
}
body := "/start"
if req.StartParam != "" {
body += " " + req.StartParam
}
updates, _, err := r.sendOutgoing(ctx, userID, peer, outgoingSend{
randomID: req.RandomID,
message: body,
})
if err != nil {
return nil, err
}
return updates, nil
}