[{"data":1,"prerenderedAt":138},["ShallowReactive",2],{"project-cerberus-bot":3},{"id":4,"title":5,"available":6,"badges":7,"body":9,"client":121,"date":122,"description":123,"development":6,"duration":121,"extension":124,"image":125,"meta":126,"navigation":127,"path":128,"preview_type":121,"privacy":121,"role":121,"seo":129,"short_description":130,"status":131,"stem":132,"technology":133,"url":135,"weight":136,"__hash__":137},"projects/projects/cerberus-bot.md","Cerberus BOT",false,[8],"code",{"type":10,"value":11,"toc":117},"minimark",[12,41,44,73,88,103,114],[13,14,15,18,19,22,23,26,27,26,30,26,33,36,37,40],"p",{},[16,17,5],"strong",{}," is a multi-purpose Discord bot I built on top of ",[16,20,21],{},"discord.js v13"," as a way to learn the Discord API and play with the modular command-handler pattern. It's organized around five command categories - ",[16,24,25],{},"Fun",", ",[16,28,29],{},"Games",[16,31,32],{},"Moderation",[16,34,35],{},"Music",", and ",[16,38,39],{},"Utility"," - each loaded dynamically from its own folder by a custom command handler.",[13,42,43],{},"The command set is intentionally eclectic, because the goal was to cover as many parts of the Discord API as possible:",[45,46,47,53,58,63,68],"ul",{},[48,49,50,52],"li",{},[16,51,25],{}," - dice rolls, coin flips, random number generation, an Urban Dictionary lookup, and a calculator that evaluates expressions in chat",[48,54,55,57],{},[16,56,29],{}," - small text-based games like a Who Wants to Be a Millionaire clone and a drinking game",[48,59,60,62],{},[16,61,32],{}," - warning system that persists user infractions per-server",[48,64,65,67],{},[16,66,35],{}," - Spotify integration for \"now playing\" lookups",[48,69,70,72],{},[16,71,39],{}," - server config commands, message clearing, COVID-19 stats lookup, daily reminders, scheduled notifications, ping/latency checks, and a custom echo",[13,74,75,76,79,80,83,84,87],{},"State is persisted to a local ",[16,77,78],{},"SQLite database"," (via ",[8,81,82],{},"quick.db"," / ",[8,85,86],{},"json.sqlite","), which keeps things zero-config: no external database server, no migrations, just a file that grows with the bot.",[13,89,90,91,94,95,98,99,102],{},"Architecturally, the bot uses a ",[16,92,93],{},"handler-based loader",": ",[8,96,97],{},"src/handlers/"," walks each command and event folder at startup, registers everything dynamically, and listens for interactions. Adding a new command means dropping a single ",[8,100,101],{},".js"," file into the right folder - no central registry to update. This is the pattern most discord.js tutorials of that era pushed, and it held up well even as the command count grew.",[13,104,105,106,109,110,113],{},"Built with Node.js and JavaScript. Uses ",[8,107,108],{},"dotenv"," for the bot token and a ",[8,111,112],{},"config.js"," for per-server defaults. The repository is archived now - it was a learning project, not something I wanted to maintain long-term as discord.js evolved (v13 → v14 introduced breaking slash-command changes that would've meant rewriting most of the handlers).",[13,115,116],{},"I further developed this project and wrote more bots, including ones supporting music listening and general Discord usage, but that is already in a private repository.",{"title":118,"searchDepth":119,"depth":119,"links":120},"",2,[],null,"2021-06-24","Cerberus BOT is a multi-purpose Discord bot I built on top of discord.js v13 as a way to learn the Discord API and play with the modular command-handler pattern. It's organized around five command categories - Fun, Games, Moderation, Music, and Utility - each loaded dynamically from its own folder by a custom command handler.","md","cerberusbot.png",{},true,"/projects/cerberus-bot",{"title":5,"description":123},"Multi-purpose Discord bot built with discord.js v13","Archived","projects/cerberus-bot",[134],"javascript","https://github.com/gitFoxCode/cerberus-bot",8,"fMbdNB24FVBzRNJLTNg6L9HqmSLCdn7Slw0ln1u7LAU",1776886072794]