Running Activities
Guide for running lotteries, football betting, NFT/SFT auctions, and Rock Paper Scissors games
This section covers how to set up and run different activities for your community.
Lotteries
Lotteries allow users to buy tickets with a chance to win prizes.
Creating a Lottery
/create-lottery winning-numbers total-numbers token ticket-price drawing-frequency [house-commission] [channel] [initial-prize-pool]Parameters Explained
winning-numbers: How many numbers users need to match to win (e.g.,3)total-numbers: Total pool of numbers to choose from (e.g.,50)token: Token ticker for tickets (e.g.,REWARD-cf6eac)ticket-price: Price per ticket in tokens (e.g.,10)drawing-frequency: When to draw winners:hourly- every 1 hourdaily- Every 24 hoursweekly- Once per weekmonthly- Once per month
house-commission(Optional): Percentage the house takes (e.g.,5for 5%)channel(Optional): Channel to post lottery (default: current channel)initial-prize-pool(Optional): Starting prize pool from Lottery House
Example
This creates:
Match 3 out of 50 numbers
10 REWARD tokens per ticket
Daily drawings
5% house commission
Posted in #lottery channel
1000 tokens initial prize pool (from Lottery House)
How Lotteries Work
Users Buy Tickets: Users purchase tickets using their Virtual Account balance
Prize Pool Grows: Each ticket purchase adds to the prize pool
House Commission: A percentage goes to Lottery House
Drawing: At the scheduled time, winning numbers are drawn
Winners: Users with matching numbers split the prize pool (minus commission)
Rollover: If no winners, prize pool rolls over to next drawing
Managing Lotteries
View Active Tickets: Click button to see the list of current live tickets (in-play)
View Results: Click button to see results (works only when lottery ends)
/my-lottery-stats- Shows lottery statistics/my-expired-tickes- Shows all expired tickets ever bought/my-active-tickets- same as using button View Active Tickets
Using House Balance for Lotteries (Admins Only)
When creating a lottery, you can fund the initial prize pool from Lottery House by specifying initial-prize-pool. The bot will:
Check Lottery House balance for that token
Deduct the amount from Lottery House
Add it to the lottery's prize pool
This allows you to seed lotteries with funds from previous lottery commissions.
Updating Lotteries
Admins can update active lotteries using the /update-lottery command:
Parameters Explained
lottery_id(Required): Select the lottery to update (autocomplete available)topup_prize_pool(Optional): Amount to add to the prize pool from Lottery House balanceupdate_ticket_price(Optional): New ticket price for future ticket purchases
Important Notes
Only LIVE lotteries can be updated
Prize pool top-ups are deducted from Lottery House balance for the lottery's token
Ticket price updates only affect new ticket purchases (existing tickets remain unchanged)
At least one update option (
topup_prize_poolorupdate_ticket_price) must be provided
Example
This updates the lottery by:
Adding 500 tokens to the prize pool from Lottery House
Changing the ticket price to 15 tokens for new purchases
Football Betting
Football betting allows users to bet on real football matches.
Creating Football Fixtures
Parameters Explained
competition: Competition code (e.g.,PLfor Premier League,CLfor Champions League)token: Token ticker for bets (e.g.,REWARD-cf6eac)amount: Bet amount per match (e.g.,100)channel(Optional): Channel to post matches (default: current channel)
Example
This creates betting opportunities for all Premier League matches with:
100 REWARD tokens per bet
Posted in #betting channel
How Football Betting Works
Admin Creates Fixtures: Bot fetches upcoming matches from Football-Data.org API
Matches Posted: Each match gets its own thread with betting options
Users Place Bets: Users bet on Home Win, Draw, or Away Win using Virtual Account balance
Match Ends: Bot automatically processes results
Winners Paid: Winners split the pot equally
No Winners: If no one bet correctly, all bets go to Betting House
Betting Options
Users can bet on:
Home Win (1) - Home team wins
Draw (X) - Match ends in a draw
Away Win (2) - Away team wins
Viewing Statistics
Leaderboard:
/football-leaderboard-all- Top bettorsFiltered Leaderboard:
/football-leaderboard-filtered- By date range or competitionYour Stats:
/my-football-stats- Your betting statistics and PNL
House Balance Integration
When a match has no winners, all bets go to the Betting House. This balance can be:
Used to fund prizes for special matches
Tipped to users via
/house-tipViewed with
/house-balance
Updating Football Matches
Admins can top up the bonus pot (prize pool) for active football matches to create a larger prize pool:
Parameters Explained
game_id(Required): Select the match to update (autocomplete available)topup-pot-size(Required): Amount to add to the bonus pot (prize pool)
Important Notes
Only matches with status SCHEDULED, TIMED, or IN_PLAY can be updated
This adds to the existing bonus pot, increasing the total prize pool for winners
The bonus pot is distributed to winning bettors when the match concludes
The match must be available in your server
Example
This adds 200 tokens to the bonus pot, increasing the total prize pool for this match.
NFT Staking
NFT staking allows users to stake their NFTs from their Virtual Account to earn rewards. Pool creators set up staking pools with reward tokens, and users can stake eligible NFTs to earn daily rewards.
Creating a Staking Pool
Admins can create NFT staking pools using:
Note: All required parameters must be provided. Optional parameters can be omitted.
Parameters Explained
collection_ticker(Required): Collection identifier for NFTs that can be stakedreward_token_identifier(Required): Token identifier for staking rewards (e.g.,REWARD-cf6eac)initial_supply(Required): Initial reward supply amount (e.g.,10000)reward_per_nft_per_day(Required): Daily reward amount per NFT (e.g.,10)duration_months(Required): Pool duration in months (1-12)pool_name(Optional): Display name for the pool (defaults to collection name)staking_total_limit(Optional): Maximum NFTs that can be staked in the poolstaking_limit_per_user(Optional): Maximum NFTs a single user can stake
Example
This creates a staking pool with:
Collection: COLLECTION-abc123
Reward token: REWARD-cf6eac
Initial supply: 10,000 tokens
Daily reward: 10 tokens per NFT
Pool name: "My Staking Pool"
Total limit: 1,000 NFTs
Per-user limit: 50 NFTs
Duration: 6 months
How NFT Staking Works
Pool Creation: Admin creates a staking pool with reward configuration
Users Stake NFTs: Users select NFTs from their Virtual Account to stake
Rewards Accumulate: Rewards accumulate daily based on
reward_per_nft_per_dayReward Distribution: Rewards are distributed automatically every 24 hours
Unstaking: Users can unstake their NFTs at any time (no lock period)
Pool Closure: Pool creator can close the pool, which returns all NFTs and distributes final rewards
Staking NFTs
Users interact with staking pools through the pool embed:
Stake Button: Click to select NFTs from your Virtual Account to stake
Unstake Button: Click to unstake your NFTs and claim rewards
View Staked NFTs: See which NFTs you have staked in the pool
Requirements:
NFTs must be in your Virtual Account (not staked elsewhere)
NFTs must match the pool's collection ticker
NFTs must meet any trait filter requirements (if set)
Pool must have available slots (if total limit is set)
You must not exceed your personal limit (if set)
Updating Staking Pools
Pool creators can update their staking pools:
Update Options
topup_staking_pool: Add more reward tokens to the pool supplychange_reward_per_nft: Update the daily reward per NFTincrease_nft_pool_limit: Increase the total NFT limit (must be higher than current)increase_user_staking_limit: Increase the per-user staking limit (must be higher than current)trait_filter_action: Manage trait filters (add,remove, orclear)trait_filter_type: Trait type to filter (when adding filters)trait_filter_value: Specific trait value (optional, leave empty for any value)trait_filter_index: Filter index to remove (when removing filters)
Example
This updates the pool by:
Adding 5,000 tokens to the reward supply
Changing daily reward to 15 tokens per NFT
Closing Staking Pools
Pool creators can close their staking pools:
What happens when a pool is closed:
All staked NFTs are automatically returned to users' Virtual Accounts
Final rewards (last 24 hours) are automatically distributed to all stakers
Pool status changes to CLOSED
Users can no longer stake or unstake
Note: Only the pool creator can close their pool.
Trait Filtering
Staking pools can include trait filters to restrict which NFTs can be staked:
Add Filter: Restrict staking to NFTs with specific traits
Remove Filter: Remove a specific trait filter
Clear Filters: Remove all trait filters (allow all NFTs)
Example: A pool might only allow NFTs with "Rarity: Legendary" to be staked.
Pool Status
Staking pools can have the following statuses:
ACTIVE: Pool is open and accepting stakes
PAUSED: Pool is temporarily paused (no new stakes, rewards still accumulate)
CLOSED: Pool is closed (no new stakes, NFTs returned, final rewards distributed)
NFT Auctions
NFT auctions allow users to sell NFTs and SFTs (Semi-Fungible Tokens) to the highest bidder.
Note: The bot supports both NFTs and SFTs. SFTs are similar to NFTs but have a quantity (amount) field. All NFT-related commands work with both NFTs and SFTs.
Creating an Auction
Parameters Explained
collection: NFT/SFT collection identifier (e.g.,COLLECTION-abc123)nft-name: Specific NFT/SFT name (e.g.,NFT-NAME-1)starting-amount: Starting bid amount (e.g.,100)duration: Auction duration in hours (e.g.,24)token(Optional): Token for bidding (default: Community Fund token)min-bid-increase(Optional): Minimum bid increase (e.g.,10)title(Optional): Auction titledescription(Optional): Auction descriptionamount(Optional): Quantity for SFTs (default: 1 for NFTs)
Example
For SFTs with quantity:
How Auctions Work
Auction Created: Admin creates auction with starting bid
Users Bid: Users place bids using Virtual Account balance
Bid Validation: Each bid must exceed previous bid + minimum increase
Auction Ends: Automatically closes at end time
Winner Pays: Highest bidder's balance is deducted
Seller Receives: Payment goes to Auction House (for Project Auctions) or seller (Virtual Account Auctions)
NFT/SFT Transferred: NFT or SFT sent to winner's wallet (with specified amount for SFTs)
Bidding
Users click "Place Bid" button on auction embed and enter bid amount in modal.
Users click "Quick Bid" button on auction embed to increase by
minimum-bid-increaseamount
House Balance Integration
When an NFT or SFT is sold at auction, the sale amount goes to Auction House. This balance can be:
Used to pay NFT/SFT sellers
Tipped to users via
/house-tipViewed with
/house-balance
Rock Paper Scissors
Rock Paper Scissors allows users to challenge each other with token prizes. The Community Fund wallet acts as a secure middleman (like a smart contract), holding both players' deposits until a winner is determined.
How RPS Works
1. Challenge Creation
Challenger: Initiates the game by choosing a token and amount to wager
The challenger uses
/challenge-rpscommand with:The Discord tag of the user they want to challenge
The token ticker (e.g.,
REWARD-cf6eac)The bet amount
Optional memo
The bet amount is automatically deducted from the challenger's Virtual Account balance
2. Challenge Notification
The challenged user is notified in the channel and via DM (if their DMs are open)
The notification includes the token, amount, and instructions to join
3. Accepting the Challenge
The challenged user reviews the token and amount
If they accept, they use
/join-rpscommand (or click the "Join Challenge" button)The bot automatically deducts the matching bet amount from their Virtual Account balance
The bot verifies that both deposits match in token and amount
4. Game Play
Once both players have joined and deposited, the game becomes active
Players take turns making their moves (rock, paper, or scissors) using the
/play-rpscommandThe winner is determined by standard RPS rules:
Rock beats Scissors
Scissors beats Paper
Paper beats Rock
If both pick the same, it's a draw and a new round starts
5. Prize Distribution
The winner receives the total prize (both players' deposits) directly to their Virtual Account
The bot announces the winner in the channel and sends a DM (if possible)
Game Rules & Dynamics
Both players must deposit the same amount and token. The bot enforces this automatically
No self-challenges: You cannot challenge yourself
Virtual Account Integration: All bets use Virtual Account balance - no blockchain transactions needed for gameplay
Timeout & Refunds: If the challenged user does not join within 30 minutes, the challenge expires and the challenger is automatically refunded to their Virtual Account
Transparency: All moves, results, and prize transfers are announced in the channel for fairness
Creating a Challenge
Example
Joining a Challenge
The challenged user can join by:
Clicking the "Join Challenge" button on the challenge embed (opens a modal)
Or using
/join-rpscommand with the challenge ID
No transaction hash needed! The bot uses Virtual Account balance automatically.
Viewing Challenges
Shows all active and waiting challenges.
Virtual Account Integration
RPS challenges use Virtual Account balance, so users don't need to:
Provide transaction hashes
Wait for blockchain confirmations
Pay gas fees for each game
Make on-chain transfers
The bot automatically:
Deducts from Virtual Accounts when challenges are created and joined
Credits the winner's Virtual Account with the prize
Refunds expired challenges automatically
DROP Game
The DROP Game is an automated engagement system that runs hourly rounds where users can participate by reacting with a πͺ emoji. Winners are selected randomly from participants, and weekly leaderboard winners receive airdrops based on their points and supporter status multiplier.
How DROP Game Works
1. Game Setup (Admin Only)
Admins start the DROP Game automation using:
Parameters Explained:
token-ticker(Required): Token identifier for airdrop rewards (e.g.,REWARD-cf6eac)base-amount(Required): Base amount per point for weekly airdrops (e.g.,10)min-droppers(Required): Minimum number of participants required to close a round (e.g.,5)collection-identifier(Optional): NFT collection identifier for supporter status calculationnft-collection-multiplier(Optional): Enable NFT-based multiplier system (trueorfalse)
Example:
This creates a DROP Game with:
Reward token: REWARD (REWARD-cf6eac)
Base amount: 10 tokens per point
Minimum droppers: 5 participants
NFT collection: COLLECTION-abc123 (for multiplier calculation)
Multiplier enabled: Yes
2. Hourly Rounds
Round Creation: Every hour, the bot automatically creates a new DROP round
Embed Display: A Discord embed is posted showing:
Round information and countdown timer
Current number of participants
Reward token for airdrops
Supporter status multiplier (if enabled)
Instructions to join
Joining: Users react with πͺ emoji to enter the round
Countdown: The embed shows a live countdown until the round closes
3. Round Closure
Minimum Participants: A round only closes if the minimum number of "droppers" (participants) is met
Insufficient Participants: If minimum is not met:
Embed turns orange
Shows how many more participants are needed
Round stays open until minimum is reached
Sufficient Participants: When minimum is met:
Round closes automatically
Winner is selected randomly from all participants
Winner receives 1 point added to their weekly leaderboard score
4. Winner Selection
Random Selection: One winner is chosen randomly from all participants
Point Award: Winner receives 1 point added to their weekly leaderboard
Announcement: Winner is announced via a new embed
Next Round: A new round embed is automatically created for the next hour
5. Weekly Leaderboard & Airdrops
Leaderboard Period: Weekly leaderboard runs from Sunday 18:00 ECT (European Central Time) to the following Sunday 18:00 ECT
Point Tracking: Each win adds 1 point to the user's weekly total
Airdrop Distribution: Every Sunday at 18:00 ECT, weekly airdrops are automatically distributed
Airdrop Calculation:
Supporter Status Multiplier
If NFT collection multiplier is enabled, users receive multipliers based on their NFT ownership:
Mega Whale
500+ NFTs
Γ10
Whale
250-499 NFTs
Γ8
Shark
100-249 NFTs
Γ5
Dolphin
50-99 NFTs
Γ4
Crab
25-49 NFTs
Γ3
Fish
10-24 NFTs
Γ2
Plankton
1-9 NFTs
Γ1
Example Calculation:
User has 275 NFTs (Whale status = Γ8 multiplier)
User won 24 rounds in the week (24 points)
Base amount: 10 tokens
Airdrop: 24 Γ 10 Γ 8 = 1,920 tokens
Commands
Admin Commands
/start-drop-game-automation Start the DROP Game automation system.
/stop-drop-game-automation Stop the active DROP Game automation.
/show-drop-game-leaderboard Display the current weekly leaderboard with points and rankings.
User Participation
Users participate by simply reacting with πͺ emoji on the DROP Game embed. No commands needed!
Game Rules & Dynamics
Automated System: Game runs automatically once started - no manual intervention needed
Hourly Rounds: New rounds start every hour automatically
Minimum Participants: Rounds require minimum participants before closing
Fair Selection: Winners are selected randomly from all participants
Weekly Reset: Leaderboard resets every Sunday at 18:00 ECT
House Balance: Airdrops are funded from Drop House balance (top up using
/virtual-house-topupwith house typedrop)Virtual Account Integration: All airdrops are credited directly to users' Virtual Accounts
Guild Segregation: Each Discord server has its own independent DROP Game
Managing DROP Game
Starting a Game
Stopping a Game
Viewing Leaderboard
The leaderboard shows:
Current week's top participants
Points earned
Supporter status (if multiplier enabled)
Rankings
House Balance Integration
DROP Game airdrops are funded from Drop House balance. Admins can:
Top Up: Use
/virtual-house-topupwith house typedropto add fundsView Balance: Use
/house-balanceto see Drop House balanceMonitor: Track earnings and spending for the drop category
Best Practices
Set Reasonable Minimums: Choose a minimum participant count that ensures engagement but isn't too high
Base Amount: Set base amount based on your community size and available funds
NFT Multiplier: Enable multiplier system to reward loyal NFT holders
Monitor House Balance: Ensure Drop House has sufficient funds for weekly airdrops
Weekly Cutoff: Remember airdrops distribute every Sunday at 18:00 ECT
Troubleshooting
Round Not Closing:
Check if minimum participants requirement is met
Verify the game is still active (not stopped)
Airdrops Not Distributing:
Verify it's Sunday 18:00 ECT
Check Drop House balance has sufficient funds
Ensure game is still active
Leaderboard Not Showing:
Verify game is active
Check if any rounds have been completed in the current week
Cleanup Feature
The bot automatically cleans up old messages to keep channels tidy:
Finished Listings: NFT listings that are sold, canceled, or expired are automatically deleted
Ended Auctions: Completed auctions are automatically removed
Expired Challenges: RPS challenges that expired are cleaned up
Football Matches: Football betting embeds are retained for history (not cleaned up)
This helps maintain clean, organized channels and makes it easier for users to find active listings and activities.
π‘ Tip: The cleanup feature runs automatically. You don't need to manually delete old messages.
Best Practices
For NFT/SFT Listings (Forum Channels)
Recommended Setup: Use Discord Forum Channels for NFT and SFT listings
Create a Forum Channel: Set up a forum channel (not a regular text channel)
Create Posts per Collection: Make a separate post for each NFT/SFT collection
List NFTs/SFTs in Posts: Users can list NFTs and SFTs using
/sell-nftin the collection postClean Browsing: With the cleanup feature, finished listings are automatically removed, keeping each collection post clean and organized
Benefits:
β Clean, organized browsing of all listings
β Easy to find NFTs by collection
β Automatic cleanup keeps posts tidy
β Better user experience
Limitations:
β No threads are created (users can't comment directly on listings)
β Offers are made via DM (not in comments)
Example Structure:
For Lotteries
Start with a reasonable ticket price
Set appropriate house commission (5-10% is common)
Use House Balance to seed initial prize pools
Monitor ticket sales and adjust frequency if needed
For Football Betting
Choose popular competitions for better engagement
Set reasonable bet amounts
Monitor House Balance from no-winner matches
Use filtered leaderboards to track performance
For Auctions
Set realistic starting bids
Use appropriate minimum bid increases
Provide clear descriptions and titles
Monitor Auction House balance
Use Forum Channels: Create a forum channel and make posts for each NFT/SFT collection (see best practices below)
SFT Support: When auctioning SFTs, specify the
amountparameter to set the quantity being auctioned
For RPS
Encourage fair play
Set reasonable bet amounts
Monitor challenge activity
Use Virtual Accounts for seamless gameplay
Troubleshooting
Lottery Not Drawing
Check if drawing frequency is set correctly
Verify lottery is still active
Use manual draw button if needed
Football Matches Not Appearing
Check Football-Data.org API connectivity:
/test-football-apiVerify channel permissions (Create Public Threads)
Check competition code is valid
Auction Not Closing
Verify auction end time
Check if auction is still active
Manually close if needed
RPS Challenge Not Working
Verify both users have sufficient Virtual Account balance
Check Community Fund is set up
Ensure users have registered wallets
For more detailed information on each activity, refer to the specific sections in the documentation.
Last updated