After Hours is in active development. Commands change often, and some will break. That's expected at this stage. The whole point of the alpha is to find those breakages before a stable release. If you run the tests below and report what goes wrong, every report makes the next build steadier. Thanks for helping.
How to report a bug
If any test below fails or behaves differently than the expected result, message @vasucoded on Discord directly.
Include three things so the bug can actually be fixed:
1. What you ran: the exact command and options (e.g. /coinflip amount:50 side:heads).
2. What you expected: what the checklist said should happen.
3. What actually happened: the real result, including any error text like "The application did not respond." A screenshot helps.
No tests match your filter.
This checklist covers only the commands that are live in the current build. Planned commands that aren't implemented yet are left out on purpose, because there's nothing to test there. Run each one in a server where After Hours is installed. Where an Edge case is listed, please test it too. Those are the situations most likely to expose a bug.
Economy & Jobs
/balance
Action/balance
Expected An embed shows your current Rokda balance. The very first time you run it, your wallet is created with a starting balance instead of an error.
Action/balance user:@anotherperson
Expected Shows that person's balance instead of yours.
/daily
Action/daily
Expected Your balance goes up by somewhere between 150 and 400 Rokda, and an embed confirms the amount and your current daily streak.
Edge case/daily again right away
Expected It refuses and tells you how long until you can claim again. Your balance does not change. You cannot claim twice in one day.
/weekly
Action/weekly
Expected Your balance goes up by 1000–2000 Rokda once, and a 7-day cooldown starts.
Edge case/weekly again right away
Expected Cooldown message with time remaining. No second payout.
/job list
Action/job list
Expected Lists every available job, each with its payout range and cooldown.
/job apply
Action/job apply name: then pick a job from the dropdown
Expected You're assigned that job and get a confirmation. The job comes from a dropdown, so you can't type a job name that doesn't exist.
/job stats
Action/job stats
Expected Shows your current job, your XP, and your payout bonus tier. If you haven't applied for a job yet, it tells you to apply first rather than erroring.
/work
Action/work
Expected You earn Rokda for your current job and your balance rises. If you have no job, it prompts you to apply for one first.
Edge case/work again right away
Expected A per-job cooldown message. No extra pay until the cooldown is up.
/shop, /buy, /inventory
Action/shop, then /buy item: and pick a badge, a title, and a booster.
Expected The shop lists items grouped into badges, titles, and boosters. Each buy debits the exact price. A badge then shows on your /rank; a booster shows a 2× XP timer.
Action/inventory, then use the dropdown to equip a title, then /rank.
Expected Inventory lists what you own and the active booster; equipping a title makes it appear next to your name on /rank.
Edge case Buy the same badge twice, and try a purchase you can't afford.
Expected The second badge buy is refused with "already own"; an unaffordable buy is refused and does not change your balance.
/bank
Action/bank deposit (no amount), then /bank balance, then /bank withdraw amount:100.
Expected Deposit with no amount moves your whole wallet into the bank; balance shows wallet vs bank vs net worth; withdraw moves Rokda back to the wallet.
Edge case/bank withdraw amount:999999999 (more than banked).
Expected Refused with how much you actually have banked. Nothing moves.
/rob
Action/rob user:@someone who has Rokda in their wallet.
Expected Either you steal a slice of their wallet, or you get caught and pay them a fine. A 1-hour cooldown starts.
Edge case/rob again right away; and rob someone who banked all their Rokda.
Expected The repeat is refused with a cooldown timer; robbing someone with an empty wallet says they're not worth robbing (their bank is untouchable).
/quests
Action/quests, complete one (e.g. claim /daily or send messages), then /quests again and click Claim.
Expected Three daily quests with progress bars. Progress advances as you play; a completed quest becomes claimable and pays Rokda + XP once. The same three stay all day.
/grind & /crime
Action/grind fish without a rod, then buy 🎣 Fishing Rod from /shop and try again. Then /grind beg and /crime.
Expected Fishing is refused until you own the rod. With it, you catch something and earn Rokda on a cooldown. Beg sometimes finds nothing; crime either pays big or fines you.
Edge case/grind fish twice in a row.
Expected The second is refused with a cooldown timer, and no double reward.
Functional shop tools
Action Buy 🛡️ Shield, have someone /rob you. Buy 💼 Briefcase, then /work.
Expected The Shield blocks one rob and then disappears from /inventory. Briefcase gives a visible 1.5× on work payouts. (No Discord roles are ever granted.)
Gambling
/coinflip
Action/coinflip amount:50 side:heads
Expected Your balance drops by 50 if you lose, or you net +50 (the bet is doubled) if you win. A result embed appears either way, with no "application did not respond" error.
Edge case/coinflip amount:999999 side:heads (more than you own)
Expected Rejected for not having enough Rokda; your balance is unchanged. Amounts below 10 or above 250,000 are blocked by Discord before the command even runs.
/slots
Action/slots amount:50
Expected Three reels are shown, your bet is deducted, and you're paid out when symbols match. The embed shows the reels and whether you won or lost.
/blackjack
Action/blackjack amount:100, then use the Hit / Stand buttons
Expected You're dealt a hand against the dealer with working Hit and Stand buttons. The hand resolves to a win, loss, or push and your balance updates. A natural blackjack pays 3:2.
Edge case Start a hand, then run /blackjack amount:100 again before finishing the first
Expected The second attempt is blocked. Only one hand at a time. Separately, if you start a hand and just wait, it auto-resolves after 60 seconds instead of getting stuck.
/dice
Action/dice amount:50 mode:higher number:10
Expected A hidden 20-sided die is rolled. You win even money if it lands higher than 10, otherwise you lose. The embed shows the roll.
Action/dice amount:50 mode:exact number:7
Expected You only win if the roll is exactly 7, but the payout multiplier is much bigger than a higher/lower guess.
Expected A straight-up bet on 17 pays 35:1 if the wheel lands on 17.
Edge case/roulette amount:50 bet_type:number with no value
Expected It tells you a number is required and the bet is not placed, and your balance stays the same.
/crash
Action/crash amount:50, then press Cash Out
Expected A multiplier climbs from 1.00x. Pressing Cash Out pays your bet times the multiplier at that instant. The embed shows where you cashed out.
Edge case/crash amount:50 and never press Cash Out
Expected When the multiplier crashes you lose your bet, with no payout, and the message resolves cleanly rather than hanging.
/lottery buy
Action/lottery buy tickets:1
Expected The ticket cost is deducted, a confirmation shows how many tickets you now hold and the current pool size. The draw happens weekly.
Edge case/lottery buy tickets:99999 (beyond your balance or the per-purchase cap)
Expected Rejected: either the ticket count is capped by Discord or you're told you can't afford it. Your balance is unchanged.
/race
Action/race bet amount:50 horse: then pick a horse
Expected Your bet is placed on that horse and a betting round opens for the server.
Action/race start
Expected Betting closes, the race animates to a finish, and backers of the winning horse are paid.
Edge case/race start with no bets placed, or place a bet and never start
Expected Starting with no open race tells you there's nothing to start. If a round is left unstarted, it auto-cancels after a short wait and refunds everyone who bet.
/elimination
Action/elimination start, then react to join
Expected A join message appears; reacting enters you and deducts the entry fee. After the join window, entrants are removed one at a time until one player remains and takes the pot.
Edge case Start an event where fewer than 2 people join
Expected The event cancels and everyone who joined is refunded their entry fee.
Action/elimination config enabled:true
Expected Only works if you have the Manage Server permission; it turns the short-timeout penalty for eliminated players on or off. Members without that permission get a permission error instead.
/heist
Action/heist buyin:500, have a second person click "Join the crew", then let the timer end (or the host clicks "Start now").
Expected A lobby shows the crew, pot, and success chance (which rises as more people join). At the end the crew either wins a multiplied pot split evenly, or busts and loses their buy-ins.
Edge case Start a heist that nobody joins; try to join without enough Rokda.
Expected With a solo crew it cancels and refunds the host. A join you can't afford is refused privately and doesn't add you.
/rps
Action/rps user:@someone bet:100; the other person clicks Accept, then both pick rock/paper/scissors.
Expected Both stakes are held; picks stay hidden until both lock in. The winner gets the whole pot, a tie refunds both. Declining or timing out refunds the challenger.
/highlow & /scratch
Action/highlow bet:100, click Higher/Lower. Then /scratch a few times.
Expected Highlow reveals the next card and pays 2× on a correct call; scratch shows a 3×3 grid and pays up to 20× on three-of-a-kind. With a 🍀 Lucky Charm owned, some losses are voided/refunded with a note.
Fun & Social
/owo <at|uwu|fight|leaderboard>
Action/owo at user:@someone a few times, /owo uwu, /owo fight user:@someone, then /owo leaderboard.
Expected OwO/UwU post flavour and ping only the target (not everyone). Your OwO counter climbs and the leaderboard ranks the top OwO-ers.
/gag & /text
Action/gag pp, /gag iq user:@someone, /gag simp. Then /text clap text:hello world, /text reverse, /text emojify.
Expected Gag ratings are the same every time for the same user (deterministic joke). Text transformers clap/reverse/emojify the input and never ping anyone.
/td
Action/td
Expected The bot picks a random truth or dare and posts it with a Reroll button.
Action/td mode:dare, then press Reroll a few times
Expected Forces a dare. Reroll swaps in a new one, but stops working after 3 rerolls on the same message.
/activechat
Action/activechat
Expected Posts a random conversation starter. Occasionally (roughly a quarter of the time) it posts a light truth instead, for variety.
/pickup
Action/pickup
Expected Returns a random pickup line.
Action/pickup category: then pick a style
Expected Returns a line from the chosen style category.
/joke
Action/joke
Expected Returns a random joke.
Action/joke category: then pick a style
Expected Returns a joke from the chosen category.
/8ball
Action/8ball question:will I win the next coinflip
Expected Replies with a random yes / no / maybe style answer.
/roast
Action/roast user:@someone
Expected Posts a random templated roast aimed at the mentioned user.
/compliment
Action/compliment user:@someone
Expected Posts a random templated compliment aimed at the mentioned user.
/ship
Action/ship user1:@a user2:@b
Expected Shows a compatibility percentage for the pair.
Edge case Run the exact same pair again
Expected You get the same percentage every time. The result is deterministic for a given pair.
/rate
Action/rate thing:my chances of hitting the jackpot
Expected Returns a 0–100 rating for whatever you typed, with a short flavor comment.
/wyr
Action/wyr, then react with one of the two options
Expected Posts a would-you-rather with two reaction options, tallies votes for about 30 seconds, then reveals the split.
Moderation
These commands only appear in Discord's slash-command list for members who hold the matching permission (e.g. Ban Members for /ban). If you can't see a command at all, that's the permission gate working correctly, not a bug. Ask a server admin to grant you a staff role with the needed permissions before testing the rest of this section. Test these on a throwaway account or a member who's expecting it, not a real regular.
/warn
Action/warn user:@testaccount reason:testing
Expected A private reply confirms the warning number, and an entry appears in the mod-log channel (if one is configured).
Edge case Run /warn on the same user 3 times total
Expected On the 3rd warning, the bot also applies a 10-minute timeout automatically and says so in the reply, as long as your role is above the target's.
Edge case/warn user:@yourself reason:testing
Expected Rejected: you can't warn yourself.
/warnings
Action/warnings user:@testaccount (after giving them at least one warning)
Expected Lists each warning with its reason, who issued it, and when, showing the most recent 15 if there are more.
Edge case/warnings user:@someoneneverwarned
Expected Says the user has no warnings, instead of an empty or broken embed.
/kick
Action/kick user:@testaccount reason:testing
Expected The member is removed from the server, you get a private confirmation, and it's logged to the mod-log channel.
Edge case/kick user:@someonewithahigherrole
Expected Rejected with a message about role hierarchy, and nobody gets kicked.
/ban and /unban
Action/ban user:@testaccount reason:testing
Expected The member is banned, you get a private confirmation, and it's logged.
Action/unban user-id:<their ID> reason:testing
Expected The ban is lifted and confirmed. You'll need the numeric user ID, not their username.
Edge case/unban user-id:<an ID that was never banned>
Expected Says that user isn't banned, with no error and no false success.
Expected The member can't send messages or react for 5 minutes; the reply confirms the duration and shows when it lifts.
Edge case/timeout user:@yourself duration:5
Expected Rejected: you can't time yourself out.
/purge
Action Post a few throwaway messages, then /purge amount:5
Expected The 5 most recent messages in the channel disappear and the bot confirms how many were deleted.
Edge case/purge amount:150
Expected Discord blocks the option before the command runs. 100 is the max.
/slowmode
Action/slowmode seconds:10, then try sending two messages quickly
Expected Discord itself enforces a 10-second gap between your messages in that channel. The bot's confirmation posts publicly (not just to you), since it's a visible channel setting.
Action/slowmode seconds:0
Expected Slowmode is disabled and the bot confirms it.
/lock and /unlock
Action/lock reason:testing in a test channel
Expected @everyone can no longer send messages in that channel; the bot posts a public embed confirming the lock.
Action/unlock reason:testing in the same channel
Expected @everyone can send messages again; a public embed confirms the unlock.
/lockdown and /unlockdown
Action/lockdown reason:testing, then press Confirm
Expected A warning prompt appears first, listing how many channels will be affected. After confirming, every text/announcement/forum channel locks and the bot reports how many succeeded.
Action/unlockdown reason:testing, then press Confirm
Expected Same flow in reverse. Every channel unlocks.
Edge case Run /lockdown again, but press Cancel (or just let the prompt sit for 30 seconds)
Expected Cancel: nothing is locked, and the bot says so. Timeout: same outcome after 30 seconds pass with no click.
/nickname reset
Action Set a nickname on a test account, then /nickname reset user:@testaccount
Expected The nickname clears back to their username, and the bot confirms it privately.
Expected Says that member doesn't have a nickname set, so nothing changes.
/modlog set
Action/modlog set channel:#mod-log
Expected Confirms the channel is set. Running any moderation command afterward (warn, kick, ban, etc.) should now post a log entry there.
Edge case/modlog set channel: pointed at a channel the bot can't post in
Expected Rejected with a message saying the bot can't send messages there, so the setting isn't saved.
Leveling & Leaderboards
/rank
Action Send a few messages, then /rank
Expected An embed with your level, server rank, total XP, and a progress bar to the next level.
/leaderboard
Action/leaderboard type:level
Expected Top 10 by level. Without type, it ranks by Rokda balance instead.
/achievements
Action/achievements, then trigger one (e.g. a big gambling win or reaching a balance milestone) and check /rank.
Expected Lists unlocked and locked milestones with an X / total counter. Unlocking one posts a short celebration, and the badge then appears on your /rank.
Image & Meme Tools
These were previously broken and are now fixed. Please confirm each actually returns an image.
/action
Action/action type:hug user:@someone, then a solo one like /action type:dance
Expected An anime reaction GIF with a caption. Solo reactions ignore the target.
/image <subcommand>
Action Run each subcommand: /image deepfry, pixelate, wasted, jail, glitch, caption, ship-card, wanted, pfp-card, achievement, ascii, on yourself or another member.
Expected A rendered image (or ASCII text for ascii). No "invalid size" errors, because that bug is fixed. All eleven effects are now under the one /image command.
Edge case/image wanted with no user, and /image ship-card user1:@a user2:@b
Expectedwanted uses your own avatar with a bounty from your Rokda; ship-card renders both avatars with a compatibility %.
Community & Engagement
/mc
Action/mc status, then /mc whitelist name:YourMcName, then /mc me.
Expected Status lists who's online (or says the server is offline, without erroring). Whitelisting confirms and you can then join. me shows the name you claimed.
Edge case Try /mc whitelist name:bad name!, then claim a second name, then have someone else claim the name you already took.
Expected An invalid username is refused before anything is sent to the server. You can only claim one name, and a name already claimed by someone else is refused.
Action In the bridge channel, send a message that mentions someone, and one with an image.
Expected In game it reads [Discord] Name: @TheirUsername, not a raw <@123456…> id. Images appear as an [attachment] link. Game chat, joins, leaves, deaths and server up/down come back to Discord.
/counting
Action/counting set channel:#counting, then in that channel post 1, have someone else post 2, then 3.
Expected Each correct number gets a ✅. A new record also gets a 🎉.
Edge case Post the next number twice in a row yourself; then post a wrong number; then post hello and 5 nice.
Expected Counting twice in a row is ❌ and resets to 0. A wrong number is ❌, resets, and calls out who broke it and at what. Non-numbers are ignored completely: no ❌, no reset. /counting stats shows the record surviving the reset.
/story
Action/story start, then take turns posting single words with someone else, then /story see.
Expected Each accepted word gets a ✅ and see reads the story back in order.
Edge case Post two words in a row yourself; post two words; then /story end and post another word.
Expected A second word in a row gets ⏳ and is not added. A multi-word message is ignored entirely. After end, words stop being added but /story see still shows the finished story.
/reactionrole add
Action/reactionrole add with a message link, an emoji, and a role, then react on that message.
Expected The bot reacts to the message; reacting gives you the role, un-reacting removes it. Works on old messages too.
/welcome set & /goodbye set
Action Set both channels, then have someone join/leave.
Expected A welcome / goodbye embed posts with the live member count. (Needs the Server Members Intent.)
/autorole set
Action/autorole set role:@Member, then have someone join.
Expected New members get the role automatically. The role must sit below the bot's top role.
/poll & /suggest
Action/poll with 2–4 options; /suggest text:...
Expected Poll posts with numbered reactions; suggest posts with 👍/👎 pre-added.
/giveaway start
Action/giveaway start duration:2m prize:Test, react 🎉, wait ~2 min.
Expected After the timer, a winner is drawn from the reactors and announced.
/starboard set
Action/starboard set channel:#starboard threshold:3, then ⭐ a message 3 times.
Expected The message is reposted to the starboard with a live ⭐ count; drops off if it falls below the threshold.
/remind & /reminders
Action/remind when:2m text:test, then /reminders
Expected Confirms it's set and lists it; ~2 min later the bot pings you. Survives a bot restart.
/afk
Action/afk reason:brb, have someone mention you, then send a message yourself.
Expected The bot tells whoever pings you that you're AFK; your next message clears it.
/confess & /confess-settings panel
Action Set the channel, run /confess-settings panel, click the button, submit; also try /confess.
Expected A numbered anonymous confession posts to the channel. Your side is private; the post never shows who sent it.
Expected A modern card (accent bar + your avatar) shows your tree. Adopt/friend/brother/sister use accept buttons; the tree lists Children, Friends, Brothers, Sisters, derived Siblings, and your partner. /family unsibling removes a sibling.
Action/family marry user:@someone (they click Accept), then /family marriage, then /family divorce.
Expected Marrying asks the partner to accept with a button; marriage shows the couple and how long married; /daily pays a +10% bonus while married. These used to be /marriage and now live under /family.
Edge case/family view on a big family; try to adopt yourself or an ancestor.
Expected Listing many members does not ping them all. Adopting yourself or one of your own ancestors is refused (no family-tree loops).
/pet
Action/pet adopt species: pick one, then /pet feed and /pet status.
Expected Adopting costs Rokda and creates one pet. Feeding costs Rokda, fills hunger, and the first feed of the day pays a companion bonus. Status shows hunger dropping over time.
Edge case Adopt a second pet; feed with no pet.
Expected A second adopt is refused (one pet per member); feeding with no pet prompts you to adopt first, with no error.
/rep
Action/rep give user:@someone, then /rep check and /rep leaderboard.
Expected The target's rep goes up by 1. Check shows a member's rep; the leaderboard ranks the most-repped members.
Edge case Give rep twice in a day; rep yourself.
Expected The second give is refused with a cooldown timer; repping yourself is refused.
Music (Last.fm)
/fm set & /fm np
Action/fm set username:yourLastfm, play something, then /fm np (or .fm).
Expected Shows now-playing with current + previous track and scrobble counts.
/fm top & /fm whoknows
Action/fm top type:artists; with a couple members linked, /fm whoknows artist:...
Expected Top list for the period; whoknows ranks linked server members by plays for that artist.
Fun & Utility Extras
/define & /gif
Action/define word:serendipity; /gif search:cat then hit 🔀 Another.
Expected A definition embed; a GIF that reshuffles on the button. (Both also work as .define / prefix.)
/help
Action/help
Expected An embed listing every command grouped by category.