feat!: remove /amikool and friendship-listener novelty features#449
Merged
Conversation
The /amikool command (random reply gated on a "Kool" role) and the passive friendship-listener (auto-reply on "best ship" / "worst ship" mentions) were pure novelty surface that didn't earn their maintenance cost. They're orphaned from the bot's voice-tracking-and-gamification core and were the last carriers of the amikool.* and fun.* config categories. Removes: - /amikool command, content pool, and tests - FriendshipListener service, trigger pool, and tests - amikool.enabled / amikool.role.name / fun.friendship config keys (interface, defaults, metadata, migrator entries) - amikool and fun categories from the Mongo Config enum - Wizard card, dashboard tile, write-route group, help registry - Documentation references across README, COMMANDS, WEBUI, SETTINGS, DEVELOPER_GUIDE, and src/content/README.md BREAKING CHANGE: /amikool is no longer registered with Discord and the amikool.* / fun.friendship settings are no longer recognised. Existing DB rows for these keys become inert and will be reported as "unknown settings" until removed.
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Removes the deprecated /amikool command and friendship-listener feature end-to-end (commands/services/content/tests/docs) and cleans up associated config keys/categories across the bot and web UI.
Changes:
- Deleted
/amikoolcommand implementation, content pool, and tests; removed related command registrations/help/docs. - Deleted
FriendshipListener, its trigger content, and tests; removed web UI feature tile and initializer wiring. - Removed
amikool.*andfun.friendshipfrom config schema/defaults/metadata/migration scripts and from config validation/category lists.
Reviewed changes
Copilot reviewed 28 out of 28 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/web/write-routes.ts | Removes wizard feature settings + ordering for amikool. |
| src/web/read-only-routes.ts | Removes the “Friendship” feature tile from the read-only dashboard list. |
| src/web/admin-views.ts | Removes wizard copy/labels for amikool. |
| src/services/startup-migrator.ts | Removes env-to-config migrations and default comparisons for removed keys. |
| src/services/friendship-listener.ts | Deletes the passive message listener implementation. |
| src/services/config-service.ts | Removes legacy env keys and disallows removed categories in validation. |
| src/services/config-schema.ts | Removes schema keys/defaults/metadata for amikool.* and fun.friendship. |
| src/services/command-manager.ts | Removes /amikool from command registration lists. |
| src/scripts/update-settings-references.ts | Removes settings reference updates for removed env keys. |
| src/scripts/migrate-config.ts | Removes migration entries for removed env keys. |
| src/models/config.ts | Removes amikool + fun from the Mongo config category enum. |
| src/index.ts | Removes FriendshipListener initialization wiring. |
| src/content/index.ts | Stops exporting removed content modules. |
| src/content/friendship-triggers.ts | Deletes friendship trigger phrases. |
| src/content/amikool-responses.ts | Deletes /amikool response pools. |
| src/content/README.md | Removes documentation rows for deleted content files. |
| src/commands/index.ts | Removes /amikool import and dispatch handler. |
| src/commands/help.ts | Removes /amikool from /help registry. |
| src/commands/amikool.ts | Deletes the /amikool command implementation. |
| tests/services/settings-metadata.test.ts | Updates expected categories list to remove amikool and fun. |
| tests/services/friendship-listener.test.ts | Deletes tests for the removed listener. |
| tests/services/config-schema.test.ts | Removes assertions for deleted config keys. |
| tests/commands/amikool.test.ts | Deletes tests for the removed command. |
| WEBUI.md | Updates docs to remove /amikool mention in command list. |
| SETTINGS.md | Removes settings/docs sections for amikool.* and fun.friendship. |
| README.md | Removes /amikool from top-level command list. |
| DEVELOPER_GUIDE.md | Removes amikool.ts from project structure listing. |
| COMMANDS.md | Removes /amikool documentation and references from command index/permissions/examples. |
Comments suppressed due to low confidence (1)
src/models/config.ts:1
- Dropping
amikoolandfunfrom the Mongoose enum can break upgrades in a subtle way: existing documents withcategory: \"amikool\"/\"fun\"will still read, but any code path that re-saves those docs (directly or indirectly) will fail enum validation. If the PR’s intent is to allow old rows to linger with only warnings, consider keeping\"amikool\"and\"fun\"in the enum for backward compatibility (similar to\"gamification\"), and instead treat the keys as unknown/unused; or alternatively add a migration/cleanup step that deletes those category rows before any save occurs.
import mongoose, { Document, Schema } from "mongoose";
|
|
||
| User-facing commands (`/ping`, `/voicestats`, `/seen`, `/quote`, | ||
| `/achievements`, `/amikool`, `/help`) are **not** affected and stay in | ||
| `/achievements`, `/help`) are **not** affected and stay in |
| KoolBot's slash-command surface is intentionally small. All | ||
| **day-to-day chat interaction** stays in Discord (`/ping`, `/voicestats`, | ||
| `/seen`, `/quote`, `/achievements`, `/amikool`, `/help`). All | ||
| `/seen`, `/quote`, `/achievements`, `/help`). All |
Reviewer flagged that removing these from the enum would make any re-save of an existing config row with those categories fail Mongoose enum validation. Match the existing gamification pattern: keep the enum entries with a backward-compat comment so legacy rows remain operable until ops cleans them up. The keys themselves are still gone from the schema/defaults/migrator, so they'll continue to surface as unknown-setting warnings on startup.
Resolves conflicts from #448 (name→ID config renames). Drops the amikool.role.name → amikool.role_id rename and its supporting entries in name-id-migrator and config-service since amikool is being removed entirely. Preserves the voicetracking.announcements.channel → channel_id rename and the new name-id-migrator module.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Drops two orphan novelty features that didn't earn their maintenance cost:
/amikool— random reply gated on a "Kool" role. Magic-8-ball-with-a-role-check that wasn't connected to voice tracking, quotes, achievements, or any other core surface.friendship-listener— passivemessageCreatelistener that auto-replied to "best ship" / "worst ship" mentions. Ran on every message in every guild text channel.Both were the last carriers of the
amikool.*andfun.*config categories, so the cleanup is comprehensive.What's removed
/amikoolcommand, response pool (src/content/amikool-responses.ts), and testsFriendshipListenerservice, trigger pool (src/content/friendship-triggers.ts), and testsamikool.enabled,amikool.role.name,fun.friendship— removed from theConfigSchemainterface,defaultConfigdefaults,settingsMetadata, the startup migrator, and both migration scriptsamikoolandfuncategories from the MongoConfigmodel enum and fromconfig-service.tsvalidationREADME.md,COMMANDS.md,WEBUI.md,SETTINGS.md,DEVELOPER_GUIDE.md, andsrc/content/README.md28 files changed: 2 insertions, 480 deletions.
Verification
npx tsc --noEmit→ 0 errorsnpm run lint→ 0 errors (104 pre-existing warnings unchanged)npm test→ 76 suites pass, 721 tests pass (was 723; the two deleted test files account for the delta)grep -rn "amikool\|friendship\|fun\.friendship\|FriendshipListener\|cool_role_name\|enable_amikool"acrosssrc/,__tests__/, and all docs → 0 matchesBreaking change
/amikoolis no longer registered with Discord. Existing DB rows foramikool.enabled,amikool.role.name, andfun.friendshipwill be reported as "unknown settings" on next startup until removed. Operators should delete those rows from theconfigscollection (or accept the harmless warnings).Test plan
amikool.*/fun.friendshiprows): bot starts, logs "unknown settings" for those rows, all other features unaffected/helpno longer lists/amikool;/amikoolis not registeredhttps://claude.ai/code/session_01DpE75xxHJ2grso5DRJspRo
Generated by Claude Code