技能标识:telegram-premium-features
Complete implementation guide for Telegram/Teamgram premium features and monetization (v2.0.0). Use when building membership systems, payment integration, subscription lifecycle, coupons, analytics, and global payment solutions. Covers ten iterations of optimization from basic implementation to production-ready systems.
在兼容Telegram的后端实现变现功能的完整指南。
📚 十次版本迭代优化 (v1.0.0 → v2.0.0)
本技能经过十次迭代完善,从基础会员系统到全球化支付解决方案的完整知识体系。
| 版本 | 主题 | 文档 |
|---|---|---|
| v1.0.0 | 基础实现 | 本指南 |
| v1.1.0 |
基础搭建: 从 会员系统 开始
支付集成: 查看 v1.1.0支付网关
运营优化: 参考 v1.3.0优惠券 和 v1.7.0数据分析
全球化: 查看 v1.9.0国际化
本指南涵盖即时通讯平台常见的付费功能:
┌─────────────────────────────────────────────────────────┐
│ 功能检查流程 │
├─────────────────────────────────────────────────────────┤
│ 1. 用户请求功能(例如:发送大文件) │
│ 2. 系统检查用户等级(免费/付费) │
│ 3. 如果是付费用户 → 允许 │
│ 4. 如果是免费用户 → 检查配额 │
│ 5. 如果配额超限 → 显示升级提示 │
└─────────────────────────────────────────────────────────┘
| 等级 | 功能 | 价格 |
|---|---|---|
| 免费 | 基础消息,100MB文件限制,1个月历史 | 免费 |
| 基础 |
sql
-- 用户订阅状态
CREATE TABLE user_subscriptions (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
tier ENUM(free, basic, premium, business) DEFAULT free,
status ENUM(active, expired, cancelled) DEFAULT active,
started_at BIGINT DEFAULT 0,
expires_at BIGINT DEFAULT 0,
auto_renew BOOLEAN DEFAULT FALSE,
payment_method VARCHAR(50),
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP,
updatedat TIMESTAMP DEFAULT CURRENTTIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY ukuserid (user_id),
INDEX idxexpires (expiresat),
INDEX idx_status (status)
) ENGINE=InnoDB;
-- 订阅计划
CREATE TABLE subscription_plans (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
tier ENUM(basic, premium, business) NOT NULL,
price_monthly DECIMAL(10,2) NOT NULL,
price_yearly DECIMAL(10,2) NOT NULL,
features JSON,
is_active BOOLEAN DEFAULT TRUE,
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP
) ENGINE=InnoDB;
-- 插入默认计划
INSERT INTO subscriptionplans (name, tier, pricemonthly, price_yearly, features) VALUES
(基础, basic, 4.99, 49.99, {filelimit: 536870912, historymonths: 6, ads: false}),
(高级, premium, 9.99, 99.99, {filelimit: 2147483648, historymonths: -1, priority_support: true}),
(商务, business, 19.99, 199.99, {filelimit: 4294967296, historymonths: -1, custom_domain: true});
sql
-- 用户配额(每日/每月限制)
CREATE TABLE user_quotas (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
quota_type VARCHAR(50) NOT NULL,
limit_value BIGINT DEFAULT 0,
used_value BIGINT DEFAULT 0,
reset_at BIGINT DEFAULT 0,
UNIQUE KEY ukusertype (userid, quotatype)
) ENGINE=InnoDB;
-- 配额类型:messagesdaily, filesdaily, storage_used
go
// subscription_manager.go
type SubscriptionManager struct {
db *sqlx.DB
redis *redis.Client
}
// CheckUserTier 检查用户等级
func (m *SubscriptionManager) CheckUserTier(ctx context.Context, userID int64) (Tier, error) {
// 尝试缓存
cacheKey := fmt.Sprintf(user:tier:%d, userID)
cached, err := m.redis.Get(ctx, cacheKey).Result()
if err == nil {
return Tier(cached), nil
}
// 查询数据库
var sub UserSubscription
err = m.db.GetContext(ctx, &sub,
SELECT * FROM usersubscriptions WHERE userid = ?, userID)
if err == sql.ErrNoRows {
return TierFree, nil
}
if err != nil {
return TierFree, err
}
// 检查过期
if sub.Status == expired || (sub.ExpiresAt > 0 && sub.ExpiresAt < time.Now().Unix()) {
m.ExpireSubscription(ctx, userID)
return TierFree, nil
}
// 缓存结果
m.redis.Set(ctx, cacheKey, string(sub.Tier), 5*time.Minute)
return Tier(sub.Tier), nil
}
// CheckFeatureAccess 检查功能访问权限
func (m *SubscriptionManager) CheckFeatureAccess(ctx context.Context, userID int64, feature string) (bool, error) {
tier, err := m.CheckUserTier(ctx, userID)
if err != nil {
return false, err
}
// 功能需求映射
requirements := map[string]Tier{
large_files: TierBasic,
unlimited_history: TierPremium,
custom_domain: TierBusiness,
priority_support: TierPremium,
}
requiredTier, exists := requirements[feature]
if !exists {
return true, nil // 功能不需要等级限制
}
return tier >= requiredTier, nil
}
// CheckQuota 检查配额
func (m *SubscriptionManager) CheckQuota(ctx context.Context, userID int64, quotaType string) (bool, int64, error) {
tier, _ := m.CheckUserTier(ctx, userID)
// 获取等级限制
limits := m.getTierLimits(tier)
limit := limits[quotaType]
if limit < 0 {
return true, -1, nil // 无限制
}
// 获取当前使用量
var quota UserQuota
err := m.db.GetContext(ctx, "a,
SELECT * FROM userquotas WHERE userid = ? AND quota_type = ?,
userID, quotaType)
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 telegram-premium-features-1776081304 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 telegram-premium-features-1776081304 技能
skillhub install telegram-premium-features-1776081304
文件大小: 15.01 KB | 发布时间: 2026-4-15 14:38