教程

如何使用 Stripe 打造 Discord 付费墙机器人

Josselin Liebe profile Josselin Liebe
发表于 2025年3月19日 更新于 2025年8月12日

Discord 服务器早已不只是聊天工具—它们成为提供有价值内容和服务的繁荣社区。随着管理员寻求变现方式,构建可靠的付费墙系统尤为关键。我们的 Stripe Discord 机器人正是为此打造,完全 免费开源

Donatebot.io 等传统方案 不同,我们的机器人直接与 Stripe 通信,省去中间抽成,带来更顺畅的支付与访问体验。

技术栈

[
    { name: 'Node.js', version: 'v16+' },
    { name: 'PostgreSQL', version: 'v13+' },
    { name: 'Discord.js', version: 'latest' },
    { name: 'Stripe API', version: 'latest' },
    { name: 'TypeORM', version: 'latest' },
    { name: 'Sentry', version: 'latest' }
]

功能亮点

这款免费机器人实现了稳健的订阅系统,从注册到管理一应俱全:

  • 订阅成功立即分配角色
  • 带正则校验的邮箱验证
  • 支持循环订阅与终生订阅
  • 自动化订阅状态检查
  • 针对即将到期的渐进式提醒

机器人会每日检查订阅状态,并根据结果自动管理用户角色。

友好的命令体系

我们设计了直观的命令系统,兼容 Slash 命令与传统消息命令,方便成员自行管理订阅:

// subscribe 命令示例
export const commands = [
    {
        name: "subscribe",
        description: "Subscribe or claim your active subscription!",
        options: [
            {
                name: "email",
                description: "Your email address",
                type: ApplicationCommandOptionType.String,
                required: false
            }
        ]
    }
];

包含的常用命令:

  • /subscribe:将 Discord 账号与 Stripe 订阅关联
  • /status:查看订阅状态
  • /cancel:取消订阅
  • /admin-access:管理员权限管理(仅管理员可用)

所有命令都限制在指定频道使用,保持服务器整洁。例如,只能在特定频道执行订阅操作。

验证系统

机器人内建完善的验证机制,每日执行检查:

export const crons = [
   '0 0 1 * * *'
];

const getExpiredEmbed = (daysLeft: 0 | 1 | 2): EmbedBuilder => {
    const title = daysLeft > 0 ? 'Your subscription is about to expire' : 'Your subscription is expired';
    const embed = new EmbedBuilder()
        .setTitle(title)
        .setURL(process.env.STRIPE_PAYMENT_LINK)
        .setColor(process.env.EMBED_COLOR)
        .setDescription(`Please visit ${process.env.STRIPE_PAYMENT_LINK} to keep your exclusive access! ${daysLeft > 0 ? `Your subscription expires within ${daysLeft * 24} hours.` : ''}`);
    return embed;
}

主要特性:

  • 每日验证订阅状态
  • 渐进式提醒(到期前 3/2/1 天)
  • 自动角色管理
  • 详尽的管理员日志
  • 支持终生订阅

Stripe 集成

与 Stripe 的直接集成,确保高可靠性的支付处理:

export const findSubscriptionsFromCustomerId = async (customerId: string) => {
    const subscriptions = await queue.add(async () =>
        await fetch(`https://api.stripe.com/v1/subscriptions?customer=${customerId}`, {
            headers: {
                Authorization: `Bearer ${process.env.STRIPE_API_KEY}`
            }
        }).json()
    );
    return subscriptions.data || [];
}

export const findActiveSubscriptions = (subscriptions: any[]) => {
    return subscriptions.filter(sub =>
        sub.status === 'active' ||
        sub.status === 'trialing' ||
        (sub.cancel_at && sub.current_period_end > Date.now() / 1000)
    );
}

安装步骤

部署机器人非常简单:

  1. 安装 Node.js 与 PostgreSQL
  2. 创建并配置数据库
  3. 安装依赖项
  4. 构建项目
  5. 配置环境变量
  6. 使用 PM2 或其他进程管理器部署

总结

我们的 Stripe Discord 机器人为服务器提供了强大、安全、高效的付费墙解决方案。借助 Stripe 的直接集成、自动化验证系统和全面的管理控制,它是希望实现社区变现的服务器管理员的理想工具。

源代码可在此获取:GitHub 仓库

准备好把热爱变成收入了吗?

加入数千位已经通过 Sublyna 赚钱的创作者。
免费开始 无需信用卡,无需复杂设置。
号召性横幅图片