A Discord bot for depositing sats from an EVM network (Mezo), and tipping, distributing, and dropping them to other users.
- Link wallet: Link your EVM address so deposits are credited to your Discord account
- Deposit: Send tBTC (or configured token) from your linked wallet to the bot's treasury
- Withdraw: Withdraw sats to any EVM address
- Tip: Send sats to another user
- Distribute: Split sats among multiple users (e.g.
@user1 @user2 @user3) - Drop: Create a drop — first N users to
/claimget sats (rain/airdrop style)
- Go to Discord Developer Portal
- New Application → Create a Bot
- Copy the Bot Token and Application ID
- Enable MESSAGE CONTENT INTENT if needed
- Invite the bot with scopes:
bot,applications.commands
cp .env.example .env
# Edit .env with your values| Variable | Description |
|---|---|
DISCORD_TOKEN |
Bot token from Developer Portal |
DISCORD_CLIENT_ID |
Application ID |
RPC_URL |
EVM RPC (e.g. https://rpc.mezo.org) |
CHAIN_ID |
Chain ID (Mezo mainnet: 31612) |
TOKEN_CONTRACT |
ERC20 token address (tBTC on Mezo: 0x18084fbA666a33d37592fA2633fD49a74DD93a88) |
TOKEN_DECIMALS |
Token decimals (tBTC: 18) |
TREASURY_PRIVATE_KEY |
Private key of wallet that holds and sends funds |
The bot's treasury wallet must hold the token for withdrawals. Users deposit to this same address; the bot credits their balance when it sees transfers from linked wallets.
npm install
npm run build
npm startFor development:
npm run dev| Command | Description |
|---|---|
/link <address> |
Link your EVM wallet |
/deposit |
Get deposit address and instructions |
/balance |
Check your sats balance |
/withdraw <amount> <address> |
Withdraw sats to an address |
/tip <user> <amount> |
Tip another user |
/distribute <amount> <@users> |
Split sats among multiple users |
/drop <total> <per_claim> <max_claims> |
Create a claimable drop |
/claim <drop_id> |
Claim from an active drop |
All amounts use sats and support decimals (e.g. 100.5, 0.25) for easier denomination. Precision: 6 decimal places.
- User runs
/link 0xYourAddressto link their wallet - User runs
/depositto get the treasury address - User sends tokens from their linked wallet to the treasury
- The bot watches for
Transferevents to the treasury from linked addresses - When detected, the user's balance is credited
Important: Only transfers from linked wallets are credited. Unlinked transfers are ignored.
Default config targets Mezo mainnet (tBTC). To use another EVM chain:
- Set
RPC_URLandCHAIN_IDfor your chain - Set
TOKEN_CONTRACTto the ERC20 address (or native ETH with minor code changes) - Adjust
TOKEN_DECIMALS(8 for WBTC-style, 18 for most ERC20s)
MIT