Most tutorials for monetizing a Discord bot assume you'll integrate Stripe or LemonSqueezy directly into the bot.
I went a different route, manual grants via Ko-fi. Here's why and how.
The problem with payment APIs in bots
For a new bot with low volume, integrating a full payment API means:
- Webhook endpoints to maintain
- Subscription management logic
- Refund handling
- Failed payment handling
That's a lot of complexity for a bot that might have 10 paying customers at launch.
The Ko-fi manual grant approach
Instead, I set up Ko-fi as the payment page and handle grants manually:
- Customer buys on Ko-fi
- I get a notification
- I run /grant guild_id:123456 days:30 in my admin server
- Bot updates the database and unlocks paid features
python@app_commands.command(name="grant")
async def grant_paid(self, interaction, guild_id: str, days: int = 30):
if not await is_bot_owner(interaction):
return
expires_at = int(time.time()) + (days * 86400)
await upsert_subscription(self.db, guild_id=guild_id,
tier="paid", expires_at=expires_at)
When to upgrade to automated payments
Once you hit ~20-30 paying customers, the manual process gets tedious. That's when it makes sense to add Ko-fi webhooks (requires Ko-fi Gold) or switch to Stripe.
For now, manual is fine, and it means I talk to every single customer personally.
The result
Clean, simple, zero ongoing maintenance cost. Works well for early stage.
Full bot: https://ko-fi.com/semtione
Top comments (0)