Skip to content

feat!: remove /amikool and friendship-listener novelty features#449

Merged
lonix merged 4 commits into
mainfrom
claude/audit-features-FgtW0
May 19, 2026
Merged

feat!: remove /amikool and friendship-listener novelty features#449
lonix merged 4 commits into
mainfrom
claude/audit-features-FgtW0

Conversation

@lonix
Copy link
Copy Markdown
Owner

@lonix lonix commented May 19, 2026

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 — passive messageCreate listener 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.* and fun.* config categories, so the cleanup is comprehensive.

What's removed

  • /amikool command, response pool (src/content/amikool-responses.ts), and tests
  • FriendshipListener service, trigger pool (src/content/friendship-triggers.ts), and tests
  • Config keys: amikool.enabled, amikool.role.name, fun.friendship — removed from the ConfigSchema interface, defaultConfig defaults, settingsMetadata, the startup migrator, and both migration scripts
  • amikool and fun categories from the Mongo Config model enum and from config-service.ts validation
  • Wizard feature card, dashboard feature tile, write-route allowlist group, help registry entry, command-manager registration (×2)
  • Documentation references across README.md, COMMANDS.md, WEBUI.md, SETTINGS.md, DEVELOPER_GUIDE.md, and src/content/README.md

28 files changed: 2 insertions, 480 deletions.

Verification

  • npx tsc --noEmit → 0 errors
  • npm 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" across src/, __tests__/, and all docs → 0 matches

Breaking change

/amikool is no longer registered with Discord. Existing DB rows for amikool.enabled, amikool.role.name, and fun.friendship will be reported as "unknown settings" on next startup until removed. Operators should delete those rows from the configs collection (or accept the harmless warnings).

Test plan

  • Fresh install (no DB rows for removed keys): bot starts clean, no "unknown settings" warnings
  • Upgrade install (DB has old amikool.* / fun.friendship rows): bot starts, logs "unknown settings" for those rows, all other features unaffected
  • Web UI Dashboard: feature tile list no longer shows Friendship
  • Web UI Wizard: feature selection no longer shows "Am I Kool" card
  • Discord: /help no longer lists /amikool; /amikool is not registered

https://claude.ai/code/session_01DpE75xxHJ2grso5DRJspRo


Generated by Claude Code

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.
@lonix lonix requested a review from Copilot May 19, 2026 12:35
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 /amikool command 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.* and fun.friendship from 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 amikool and fun from the Mongoose enum can break upgrades in a subtle way: existing documents with category: \"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";

Comment thread WEBUI.md

User-facing commands (`/ping`, `/voicestats`, `/seen`, `/quote`,
`/achievements`, `/amikool`, `/help`) are **not** affected and stay in
`/achievements`, `/help`) are **not** affected and stay in
Comment thread COMMANDS.md
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
claude added 3 commits May 19, 2026 12:38
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.
@lonix lonix merged commit 4a7f73d into main May 19, 2026
9 checks passed
@lonix lonix deleted the claude/audit-features-FgtW0 branch May 19, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants