闲社服务运行正常AI智能体自动化平台
t

Teamgram RPC开发指南

技能标识:teamgram-rpc-development

Complete guide for developing RPC services in Teamgram Server (v2.0.0). Use when creating new RPC methods, implementing business logic, or extending Teamgram functionality. Covers TL schema, DAO/Core/Server layers, error handling, performance optimization, security, testing, observability, and production best practices.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 2.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

Teamgram RPC开发指南

Teamgram RPC 开发指南 v2.0.0

在Teamgram Server中开发RPC服务的完整指南。

📚 十次版本迭代优化 (v1.0.0 → v2.0.0)

本技能经过十次迭代完善,涵盖从基础开发到生产部署的完整知识体系。

版本迭代历程

版本主题文档
v1.0.0基础开发本指南
v1.1.0
错误处理与日志 | 查看 | | v1.2.0 | 性能优化与缓存 | 查看 | | v1.3.0 | 安全最佳实践 | 查看 | | v1.4.0 | 测试策略 | 查看 | | v1.5.0 | 可观测性 | 查看 | | v1.6.0 | 数据库优化 | 查看 | | v1.7.0 | 消息队列 | 查看 | | v1.8.0 | 熔断限流 | 查看 | | v1.9.0 | 多租户 | 查看 | | v2.0.0 | 完整总结 | 查看 |

快速导航

新手指南: 从 开发工作流 开始

生产优化: 查看 v1.2.0性能优化 和 v1.3.0安全

问题排查: 参考 v1.1.0错误处理 和 v1.5.0可观测性

概述

Teamgram使用gRPC进行服务间通信,使用MTProto进行客户端-服务器通信。本指南涵盖两者。

RPC类型

1. 内部RPC(服务间通信)

protobuf // 服务间的内部gRPC service BizService { rpc MessagesSendMessage(MessagesSendMessageReq) returns (Updates); rpc UsersGetUsers(UsersGetUsersReq) returns (Vector); }

2. 外部RPC(客户端到服务器)

tl // Telegram客户端的MTProto RPC messages.sendMessage#520c3870 peer:InputPeer message:string = Updates; users.getUsers#d91a548 id:Vector = Vector;

开发工作流

第一步:定义TL模式

tl
// 文件: specs/mtproto.tl

// 请求/响应类型
premium.getStatus#d0b5e0f2 user_id:long = PremiumStatus;
premium.purchase#8f8c0e1c userid:long planid:int payment_method:string = Bool;

// 对象类型
premiumStatus#9a4f3e2d userid:long status:int expiresat:long = PremiumStatus;

命名规范:

  • - 方法:category.actionName(驼峰命名)
  • 构造器ID:#8位十六进制(随机或顺序)
  • 类型:帕斯卡命名

第二步:生成Go代码

bash

从TL模式生成


make generate

或


go run cmd/mtprotoc/main.go -I specs/ -o app/

输出文件:

app/mtproto/premiumgetstatus.go

app/mtproto/premium_purchase.go

app/mtproto/premium_status.go

第三步:创建数据库模式

sql
-- 文件: data/schema/premium.sql

CREATE TABLE user_premium (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
status TINYINT DEFAULT 0 COMMENT 0=无, 1=基础, 2=高级,
plan_id INT DEFAULT 0,
expires_at BIGINT DEFAULT 0,
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP,
updatedat TIMESTAMP DEFAULT CURRENTTIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY ukuserid (user_id),
INDEX idxexpires (expiresat)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE premium_transactions (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
plan_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
currency VARCHAR(3) DEFAULT USD,
payment_method VARCHAR(50),
status TINYINT DEFAULT 0 COMMENT 0=待处理, 1=成功, 2=失败,
transaction_id VARCHAR(255),
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP,
INDEX idxuserid (user_id),
INDEX idxcreatedat (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

第四步:实现DAO层

go
// 文件: app/service/biz/internal/dao/premium_dao.go

package dao

import (
context
database/sql
time

github.com/teamgram/teamgram-server/app/service/biz/internal/model
github.com/zeromicro/go-zero/core/stores/sqlx
)

type PremiumDAO struct {
db sqlx.SqlConn
}

func NewPremiumDAO(db sqlx.SqlConn) *PremiumDAO {
return &PremiumDAO{db: db}
}

// GetPremiumStatus 获取用户会员状态
func (d PremiumDAO) GetPremiumStatus(ctx context.Context, userID int64) (model.UserPremium, error) {
var m model.UserPremium
query := SELECT * FROM userpremium WHERE userid = ?
err := d.db.QueryRowCtx(ctx, &m, query, userID)
if err == sqlx.ErrNotFound {
// 返回默认状态(非会员)
return &model.UserPremium{UserID: userID, Status: 0}, nil
}
return &m, err
}

// CreateOrUpdatePremium 创建或更新会员状态
func (d *PremiumDAO) CreateOrUpdatePremium(ctx context.Context, userID int64, status int32, planID int, expiresAt int64) error {
query :=
INSERT INTO userpremium (userid, status, planid, expiresat)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
status = VALUES(status),
planid = VALUES(planid),
expiresat = VALUES(expiresat)

_, err := d.db.ExecCtx(ctx, query, userID, status, planID, expiresAt)
return err
}

// CreateTransaction 创建交易记录
func (d PremiumDAO) CreateTransaction(ctx context.Context, txn model.PremiumTransaction) (int64, error) {
query :=
INSERT INTO premium_transactions
(userid, planid, amount, currency, paymentmethod, status, transactionid)
VALUES (?, ?, ?, ?, ?, ?, ?)

result, err := d.db.ExecCtx(ctx, query,
txn.UserID, txn.PlanID, txn.Amount, txn.Currency,
txn.PaymentMethod, txn.Status, txn.TransactionID,
)
if err != nil {
return 0, err
}
return result.LastInsertId()
}

// UpdateTransactionStatus 更新交易状态
func (d *PremiumDAO) UpdateTransactionStatus(ctx context.Context, txnID int64, status int32) error {
query := UPDATE premium_transactions SET status = ? WHERE id = ?
_, err := d.db.ExecCtx(ctx, query, status, txnID)
return err
}

第五步:实现核心逻辑

go
// 文件: app/service/biz/internal/core/premium_core.go

package core

import (
context
errors
time

github.com/teamgram/teamgram-server/app/service/biz/internal/dao
github.com/teamgram/teamgram-server/app/service/biz/internal/model
github.com/teamgram/teamgram-server/app/service/biz/internal/svc
)

var (
ErrInvalidPlan = errors.New(无效的高级会员套餐)
ErrPaymentFailed = errors.New(支付处理失败)
)

type PremiumCore struct {
svcCtx *svc.ServiceContext
dao *dao.Premium

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 teamgram-rpc-development-1776081314 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 teamgram-rpc-development-1776081314 技能

通过命令行安装

skillhub install teamgram-rpc-development-1776081314

下载

⬇ 下载 teamgram-rpc-development v2.0.0(免费)

文件大小: 20.75 KB | 发布时间: 2026-4-15 14:37

v2.0.0 最新 2026-4-15 14:37
v2.0.0: Ten iterations of optimization. Added error handling, performance optimization, security, testing, observability, database optimization, message queue, circuit breaker, and multi-tenant support.
返回顶部