{"id":30292629,"url":"https://github.com/arithefirst/whisker","last_synced_at":"2025-08-17T00:35:17.890Z","repository":{"id":308610789,"uuid":"1033418207","full_name":"arithefirst/whisker","owner":"arithefirst","description":"A all-purpose discord bot developed by arithefirst and thatmagicalcat","archived":false,"fork":false,"pushed_at":"2025-08-10T10:33:13.000Z","size":84,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-15T12:48:53.383Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arithefirst.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-06T19:32:38.000Z","updated_at":"2025-08-10T10:33:16.000Z","dependencies_parsed_at":"2025-08-06T22:18:56.271Z","dependency_job_id":"1064312a-d245-49c6-a44e-36e0f3e66d46","html_url":"https://github.com/arithefirst/whisker","commit_stats":null,"previous_names":["arithefirst/whisker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arithefirst/whisker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arithefirst%2Fwhisker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arithefirst%2Fwhisker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arithefirst%2Fwhisker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arithefirst%2Fwhisker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arithefirst","download_url":"https://codeload.github.com/arithefirst/whisker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arithefirst%2Fwhisker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270791277,"owners_count":24645781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-17T00:35:16.016Z","updated_at":"2025-08-17T00:35:17.879Z","avatar_url":"https://github.com/arithefirst.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Whisker\n\nA multi-purpose discord bot built by [thatmagicalcat](https://thatmagicalcat.pages.dev) and [arithefirst](https://arithefirst.com)\n\n## Features\n\nWhisker is a versatile Discord bot designed to enhance your server experience with fun commands, utility tools, and moderation features. A checkbox next to a command means it is implemented. An unchecked box means that we're currently working on implementing that command.\n\n### 🧰 Utility Commands\n\n#### XP System\n- [ ] **XP System** - Non-intrusive XP tracking with opt-in/out notifications\n- [ ] **Leaderboard** - View server XP leaderboard\n- [ ] **Rank** - Check your XP rank\n\n#### Moderation\n- [x] **Kick** - Kick users from server\n- [x] **Ban** - Ban users from server\n- [ ] **Mute** - Mute users in channels\n- [x] **Warn** - Warn users\n- [ ] **Warn Log** - View user warnings\n- [ ] **Snipe** - Show last deleted message\n- [ ] **Edit Snipe** - Show last edited message\n- [x] **Purge** - Mass delete messages\n- [ ] **Message Logging** - Log message edits and deletions\n\n#### General Utilities\n- [ ] **Remind Me** - Set personal reminders\n- [X] **Urban Dictionary** - Look up definitions\n- [ ] **LaTeX** - Render LaTeX expressions\n- [x] **Typst** - Render Typst documents\n- [ ] **Wolfram Alpha** - Query Wolfram Alpha\n- [ ] **Calculator** - Mathematical calculations\n- [ ] **Time Zone** - Display time zones\n- [x] **Avatar** - Get user avatars\n- [X] **Banner** - Get user banners\n- [ ] **Image Processing** - Rotate, crop, zoom, flip images\n- [ ] **Meme Generator** - Create memes with captions and templates\n\n### 🎉 Fun Commands\n\n#### Social/Relationship\n- [ ] **Ship** - Calculate compatibility between users\n- [ ] **Marry** - Marry another user\n- [ ] **Divorce** - End a marriage\n- [ ] **Adopt** - Adopt another user\n- [ ] **Exes** - View relationship history\n\n#### Games \u0026 Randomness\n- [ ] **8Ball** - Ask the magic 8-ball a question\n- [ ] **Trivia** - Play trivia questions (with XP rewards)\n- [ ] **Fortune** - Get fortune cookie wisdom\n- [ ] **Coinflip** - Flip a coin (XP gambling)\n- [ ] **Slot Machine** - Play slots (XP gambling)\n- [ ] **Roulette** - Play roulette (XP gambling)\n- [ ] **Blackjack** - Single-player blackjack (XP gambling)\n- [ ] **Guess the Number** - Number guessing game (XP gambling)\n- [ ] **Rock Paper Scissors** - Play RPS (XP gambling)\n\n#### Text Tools\n- [ ] **Leet Speak** - Convert text to leet speak\n- [ ] **ASCII Art** - Generate ASCII art\n- [ ] **Mad Libs** - Generate Mad Libs stories\n\n#### Animal Images\n- [X] **Fox** - Random fox images\n- [X] **Cat** - Random cat images\n- [X] **Dog** - Random dog images\n\n## Contributing\n\n### Rules for adding a command\n\nFor the following, this assumes the name of your command is `examplecommand`\n\n- The command definition must be at the top of the file, and be formatted as:\n  File `examplecommand.go`\n\n  ```go\n    var DefineExamplecommnd = \u0026discordgo.ApplicationCommand{\n    Name:        \"examplecommand\",\n    Description: \"An example command\",\n    Options: []*discordgo.ApplicationCommandOption{\n      // put command options here\n    },\n  }\n\n  // The command implementation must be below the definition, and be formatted as\n\n  // or func Ping(s *discrodgo.Session, i *discordgo.InteractionCreate, db *pgxpool.Pool)\n  // if it requires a database connection\n\n  func Ping(s *discordgo.Session, i *discordgo.InteractionCreate) {\n\n    // Command Logic \u0026 Option parsing goes here\n\n    // Stuff for the response goes below\n    s.InteractionRespond(i.Interaction, \u0026discordgo.InteractionResponse{\n      Type: discordgo.InteractionResponseChannelMessageWithSource,\n      Data: \u0026discordgo.InteractionResponseData{\n        Content: \"Pong!\",\n      },\n    })\n  }\n  ```\n\n- Every time a command is added, you must add it's definition and impl to [definitions.go](/commands/definitions.go).\n  For example:\n\n  ```go\n  var commandRegistry = []Command{\n    // other definitions\n    {\n      Definition: DefineExamplecommnd,\n      Handler:    SimpleHandlerFn(Ping), // or DBAwareHandlerFn(Ping)\n    }\n    // ...\n  }\n  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farithefirst%2Fwhisker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farithefirst%2Fwhisker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farithefirst%2Fwhisker/lists"}