Commit graph

58 commits

Author SHA1 Message Date
Viktor
2df0d504d0 docs: add per-cog README files for all 8 cogs
Generated comprehensive README documentation for each cog:
- dashboard (EveDash): Web dashboard setup & commands
- newhelpmenu: Components V2 help system
- nexuscore: All-in-one management (tickets, mod, economy, etc.)
- selfbotguard: 14-layer selfbot detection
- serverwhitelist: Server join management
- userslash: User-installable slash commands
- voicemeister: Temporary voice channels
- wormhole: Cross-server relay (100+ commands)

Each README includes: features, installation, commands, data statement.
2026-05-14 20:38:04 +00:00
Viktor
d20f988a93 fix: rename commands.py to slash_bridge.py to stop import shadowing
The file userslash/commands.py shadowed redbot.core.commands when Python
registered the submodule on the parent package, causing:

    AttributeError: module 'userslash.commands' has no attribute 'Cog'

Renaming the file to slash_bridge.py avoids the collision entirely.

Also adds a user-install whitelist feature:
- [p]userslash whitelist enable/disable
- [p]userslash whitelist add/remove @user
- [p]userslash whitelist list
- [p]userslash whitelist clear

When enabled, only whitelisted users may use the bot via user-install
(DMs, group DMs, non-member guilds).  Guild-installed usage is unaffected.
2026-05-14 20:30:06 +00:00
everestmcarthur
5c7046ff7c feat(serverwhitelist): v4.0 — the ultimate server management cog
New features:
- Whitelist Request System with DM button + approve/deny
- Server Notes & Tags
- Invite Audit via Discord audit logs
- Temporary Whitelist with auto-expiry
- Server Requirements (min/max members)
- Trusted Inviters for auto-whitelist
- Owner DM Alerts toggle
- Backup & Restore (full config JSON)
- Search command
- All v3 features preserved
2026-05-14 20:24:53 +00:00
everestmcarthur
8858470392 feat: add UserSlash cog — user-installable slash commands for every Red command
Replaces OneTrueSlash with full user-install support:
- Single proxy slash command bridges all text commands
- Works in servers, DMs, and group DMs
- REST API patcher sets integration_types & contexts on all global commands
- Owner commands: [p]userslash sync/patch/status
- Fuzzy autocomplete (rapidfuzz)
- Enhanced InterContext/InterMessage for non-guild contexts
2026-05-14 20:14:33 +00:00
everestmcarthur
004d1d61ea revert: remove self-ban code (Discord API does not allow self-banning) 2026-05-14 20:11:28 +00:00
everestmcarthur
07a84d2ff0 feat: self-ban on auto-ban — bot bans itself from blacklisted servers 2026-05-14 20:06:35 +00:00
everestmcarthur
086d8fc973 ServerWhitelist v3.0 — owner DM, auto-ban, attempt tracking, rich logging 2026-05-14 20:01:12 +00:00
Viktor AI
2ad7a7b691 fix: wire up missing feature enforcement in relay
- Mirror channels now receive relayed messages (was blocked from sending but never sent to)
- Server allowlist enforced in relay (allowlist_servers gate check)
- Silent mode suppresses status broadcasts (_status respects 'silent' flag)
- Welcome message sent when channel joins via 'wh open'
2026-05-14 19:33:58 +00:00
Viktor AI
4bc143b26f fix: group all commands under 'wh' parent — no more flat wh-xxx commands
Commands now show as 'wh create', 'wh staff add', 'wh set relaymode'
instead of 'wh-create', 'wh-staff add', 'wh-set relaymode'.

- Added commands/_base.py with root 'wh' group and all 20 subgroup stubs
- All 13 command mixins inherit from WormholeBase
- Decorators changed: @commands.hybrid_command(name='wh-X') → @WormholeBase.wh.command(name='X')
- Subgroup commands: @wh_X.command() → @WormholeBase.wh_X.command()
- Removed duplicate 'wh' group from core.py (now in _base.py)
- Fixed alias: 'wh-color' → 'color' for colour command
2026-05-14 19:24:37 +00:00
Viktor AI
5a4421fb6c fix: remove duplicate slash command registrations causing CommandAlreadyRegistered
The hybrid_command decorator on mixin classes already auto-registers
slash commands. The manual registrations in _register_context_menus
clashed, causing 'wh-list already registered' on load. Removed all
manual slash commands — only context menus remain.
2026-05-14 19:12:55 +00:00
everestmcarthur
81ce516964
Merge pull request #5 from everestmcarthur/refactor/modular-hierarchy
refactor: Wormhole v4.0.0 — Modular Architecture + Hierarchical Staff
2026-05-14 15:09:51 -04:00
Viktor AI
0b028e7bb9 refactor: Wormhole v4.0.0 — full modular architecture with hierarchical staff
BREAKING: Complete cog restructure from monolithic wormhole.py into modular architecture.

## Architecture
- models/permissions.py — Role IntEnum (MEMBER→OWNER), requires_role() decorator
- models/config.py — DEFAULT_NETWORK/DEFAULT_GLOBAL with 80+ config keys
- models/message_map.py — MessageMap class (extracted from _MessageMap)
- services/emoji.py — Foreign emoji resolution and relay
- ui/views.py — Reply jump button view
- ui/modals.py — Report modal
- core.py — Main Wormhole class, helpers, background loops, context menus
- commands/ — 13 command modules as mixin classes
- listeners/ — relay pipeline, edit/delete/reaction sync, typing/pin sync

## Staff System (new)
Per-network hierarchical roles replacing flat owner/staff:
  Bot Owner (Red built-in) — global override
  └─ Network Owner → Admin → Moderator → Helper → Member
  Each role assigned per-network. Higher roles can assign lower.
  Legacy staff_ids auto-migrated to ADMIN role.

## Enhanced Moderation
- Server-level ban/mute (not just user-level)
- Allowlist mode (only whitelisted servers can send)
- Mod edit and nuke (delete N messages by user)
- Anti-raid detector with auto-freeze
- Expanded automod: anti-zalgo, anti-emote-spam, anti-newline-spam

## Commands (100+)
network, settings, staff, moderation, filters, social, dm, mentions,
tos, reports, bridge, advanced (polls/afk/auto-responses/scheduled/
analytics/quiet-hours/colours/invites/announcements/blackout/portal),
debug (health/trace/testsend/relaydebug/backup/restore/version)

## Files
- 30 Python files, 5,274 lines total (was 4,782 in monolith)
- Original wormhole.py preserved for reference
- utils.py unchanged (all helpers reused)
2026-05-14 19:07:49 +00:00
Viktor
f48f755223 fix(wormhole): add emoji thumbnails to embed relay mode
Embed mode was missing foreign emoji support. Now all three relay
modes (webhook, embed, compact) show unknown emojis as embed
thumbnails via attachment:// scheme.
2026-05-14 16:11:15 +00:00
Viktor
bd0f55b243 fix(wormhole): show foreign emojis as embed thumbnails (~80px) not full-size
File attachments render as massive images in Discord regardless of
source size. Switch to embed thumbnails via the attachment:// scheme:

1. Download emoji from CDN at 48px
2. Attach as a File to the message
3. Reference via attachment://name.png in a minimal embed's thumbnail
4. Thumbnails render at ~80×80 px — much closer to emoji size

Fresh File/Embed objects are built per channel (consumed on send).
Bumps to v3.4.6.
2026-05-14 16:00:09 +00:00
Viktor
f74e9b7897 fix(wormhole): use inline links for foreign emojis instead of file attachments
File attachments render as massive images in Discord. Replace the
download-and-attach approach with clickable [:name:](cdn_url) inline
links — keeps foreign emojis compact and inline with the message text.

Removes aiohttp dependency and simplifies the helper to synchronous.
Bumps to v3.4.5.
2026-05-14 15:53:01 +00:00
Viktor
424403cf4f feat(wormhole): relay unknown custom emojis as 64px image attachments
Custom emojis the bot can't see (bot.get_emoji returns None) are now:
1. Replaced with :name: in message text
2. Downloaded from Discord CDN at 64px
3. Attached as small image files to the relay message

Known emojis (from any server the bot is in) keep the <:name:id>
syntax and render normally. Up to 5 emoji images per message.

Works in webhook and compact relay modes. Bumps to v3.4.4.
2026-05-14 15:40:36 +00:00
Viktor
2acee87123 fix(wormhole): resolve reply button to local copy, not original server
The forward map only stores relay targets — the source channel (where
the original message was typed) was never included. When someone in
Server B replied to a relayed message, the button for Server A fell
back to the fallback URL pointing at Server B instead of Server A.

Fix: after building the relay-target URLs, identify the source channel
by finding network channels not present in the forward map, and map
them to the original message ID.
2026-05-14 15:23:27 +00:00
Viktor
2a14a08801 fix(wormhole): only pass view kwarg when reply button exists
Passing view=None to wh.send() on every message caused all relays
to fail. Now uses **_view_kw dict unpacking so the view parameter
is only included when there is actually a reply-jump button to show.
2026-05-14 15:18:51 +00:00
everestmcarthur
e1d61b6eec
Merge pull request #4 from everestmcarthur/feat/enhanced-reply-buttons
feat(wormhole): Jump to replied message button on relayed replies
2026-05-14 11:15:38 -04:00
Viktor
13b28d3800 feat(wormhole): add 'Jump to replied message' button on relayed replies
When a reply is relayed across servers, each copy now includes a URL
button underneath the quoted reply text:

- If the referenced message has a relayed copy in the target channel,
  the button links to that local copy (so users stay in their own server).
- Otherwise, it falls back to the original message URL.

Works across all relay modes (webhook, embed, compact) and leverages
the existing msg_map to resolve per-channel message IDs.

Bumps version to 3.4.3.
2026-05-14 15:13:20 +00:00
everestmcarthur
0413fbcb66
feat: add ServerWhitelist cog (#3)
Ultimate owner-only server management with whitelist, blacklist,
interactive browser, purge, lock mode, logging, export & more.

Co-authored-by: Viktor <viktor@getviktor.com>
2026-05-12 23:07:11 -04:00
Viktor AI
bbf427284e feat: per-network mention config + user opt-in/out for pings
- Migration now uses a _mention_migrated flag so it only forces mentions
  off once. After that, admins can freely toggle per-network settings
  with 'wh mentions set <network> <type> <true/false>'

- New mention_optout_users list per network: users can opt out of being
  @pinged through the relay even when user mentions are enabled
  network-wide. Their <@ID> mentions are stripped; everyone else's pass
  through. Default: opted in.

- New commands:
  • wh mentions optout <network>  — stop receiving relay pings
  • wh mentions optin <network>   — start receiving relay pings again
  • wh mentions mystatus <network> — check your current ping status

- apply_mention_policy() now accepts optout_users set and selectively
  strips only opted-out users' mentions when user mentions are globally
  allowed

- Updated 'wh mentions status' to show opt-out count and correct
  defaults
2026-05-12 15:49:56 +00:00
Viktor AI
8c5b422d83 fix: migrate existing networks to strip all mentions + revert empty-prefix guard
- On cog load, all existing networks are migrated to disable every
  mention type (user, role, everyone, here) — changing the default
  only affected new networks, not existing ones
- Reverted the v3.4.2 'and ctx.prefix' guard in the command filter —
  the real relay bug was the regex crash, not the empty prefix.
  ctx.valid alone correctly identifies registered commands even with
  an empty-string prefix
2026-05-12 15:21:08 +00:00
Viktor AI
9e8650c01a feat: strip all mentions from relayed messages by default (v3.4.3)
- Default mention_policy now disables all mention types including user
  mentions (previously allow_user_mentions defaulted to True)
- Blocked mentions are now removed entirely instead of replaced with
  ZWSP placeholders — '@mention HI!' becomes 'HI!' on the other side
- Trailing whitespace from removed mentions is cleaned up
- Updated both apply_mention_policy() and sanitise_mentions()
2026-05-12 14:55:56 +00:00
Viktor AI
f1c8970d3d fix: raw string in mention_policy regex crashes every relay (v3.4.3)
Root cause: apply_mention_policy() in utils.py used raw strings for
re.sub replacement arguments:
  re.sub(r'<@&(\d+)>', r'@\u200brole', content)

The r-prefix makes \u200b literal backslash-u instead of Unicode ZWSP.
Python's re.sub always validates the replacement template, so \u at
position 1 raises re.error on EVERY message — even without matches.

Since _DEFAULT_NETWORK sets mention_policy.allow_role_mentions=False,
this code path runs for all networks, causing _do_relay to throw on
every single message. The exception was caught by on_message's
try/except, silently killing relay with total_messages stuck at 0.

Fix: remove r-prefix from replacement strings so \u200b is correctly
interpreted as the Unicode zero-width space character.
2026-05-12 14:52:22 +00:00
Viktor AI
39188d9f4e feat: add relay diagnostic commands (relaydebug, testsend, tracemode)
Added three diagnostic tools to help debug relay issues:

- wh relaydebug: static check of all on_message gates against the
  current channel — reports which checks pass/fail
- wh testsend [text]: bypasses on_message entirely and sends a test
  message directly through the webhook to verify connectivity
- wh tracemode: toggles live tracing for the channel — when enabled,
  every message produces a diagnostic embed showing exactly which
  gate-check blocked it or that the relay succeeded

Also added trace checkpoints at every early-return in on_message so
tracemode can pinpoint the exact check that blocks a message.
2026-05-12 13:38:15 +00:00
Viktor AI
9598f752c1 fix: Wormhole v3.4.2 — empty-prefix command filter bug
The v3.4.1 command filter used bot.get_context() to detect commands,
but an empty-string prefix ('') matched EVERY message, causing
ctx.valid to return True for any message whose first word happened
to be a registered command.  With enough built-in commands (help,
ping, info, set, etc.) this silently dropped most or all relay
traffic (total_messages stayed at 0).

Fix: require ctx.prefix to be truthy (non-empty) before skipping
a message as a command.  Empty-prefix matches are now ignored,
so only messages with a real prefix (!, @bot, etc.) are filtered.

Also re-added the empty-prefix warning to 'wh debug' output so
users know to clean up their bot prefix configuration.
2026-05-12 12:53:18 +00:00
Viktor AI
5ece19dae7 fix: Wormhole v3.4.1 — relay engine hardening 2026-05-12 12:24:44 +00:00
everestmcarthur
a4ba2040ec fix: Critical bugfixes for VoiceMeister
1. CRITICAL: Permission overwrites now properly merge instead of replace.
   set_permissions with keyword args REPLACES the entire overwrite,
   so Lock→Hide would undo the Lock. Now uses overwrites_for() to
   fetch existing state and modify only the target field.
   Affects: Lock, Unlock, Hide, Unhide, Ghost, Reveal (buttons & commands)

2. CRITICAL: Removed broken async generator in any() for game rename check.
   await in generator expression creates async generator that any() can't
   consume. Game rename loop now always starts and checks config per-guild.

3. Minor: Fixed double-write in _save_temp_channels.
4. Minor: Removed unused imports (datetime, Set).
2026-05-08 14:48:42 +00:00
everestmcarthur
ec7767079e
feat: Add VoiceMeister v1.0.0
feat: Add VoiceMeister v1.0.0 — Ultimate temporary voice channel management
2026-05-08 09:50:25 -04:00
everestmcarthur
499c2bb291 feat: Add VoiceMeister v1.0.0 — Ultimate temporary voice channel management
- Join-to-Create system with auto-spawn temp voice channels
- Persistent 20+ button control panel (survives restarts)
- Name templates, game detection, auto-cleanup, logging
- Blacklist/whitelist, cooldowns, max-channels-per-user
- Interactive setup wizard + full [p]vc user commands
2026-05-08 13:23:03 +00:00
JARVIS
2f266e1add fix: remove heuristic 10 (presence anomalies) per request 2026-05-08 13:20:21 +00:00
JARVIS
dfff1c5b3e feat: SelfbotGuard v1.2.0 — 14 heuristic layers, no exceptions
Added 8 new detection heuristics (7-14):
  7. Cross-channel spam — same msg in 3+ channels within 5s
  8. Cross-server simultaneous activity — msgs in different guilds <2s apart
  9. Edit cadence — precise, consistent message edit timing
  10. Presence anomalies — sending messages while offline/invisible
  11. Reaction sniping — adding reactions within <500ms
  12. Formatting analysis — clean structured output at inhuman speed
  13. Token-snipe triggers — instant response to giveaway/nitro/etc.
  14. Self-delete patterns — send → wait exact N seconds → delete

New event listeners: on_message_edit, on_reaction_add, on_message_delete
Updated tracking structures and scan command output
2026-05-08 13:14:10 +00:00
JARVIS
ebafe6567d feat: add SelfbotGuard v1.0.0 — advanced selfbot detection & punishment
Detection heuristics:
  - Rich-embed abuse (user accounts can't send rich embeds)
  - Inhuman response speed (<300ms consistently)
  - Message timing precision analysis
  - 24/7 activity profiling
  - Automated command-response pattern matching
  - Rapid-fire burst detection

Configurable per-server:
  - Toggle on/off (default: off)
  - Actions: log, warn, mute, kick, ban
  - Sensitivity: low/medium/high + custom threshold
  - Log channel, exempt roles/users
  - Staff notifications, mute duration

Commands: [p]sbguard enable/disable/action/sensitivity/threshold/logchannel/scan/flagged/reset
Slash: /sbguard-status, /sbguard-scan
2026-05-08 12:54:16 +00:00
everestmcarthur
2bde18b727 fix: Discord 25-subcommand limit — use prefix group + standalone slash commands
Discord enforces a max of 25 subcommands per slash command group.
Wormhole has 50 children on the main group and 39 on wh set, making
hybrid_group impossible.

Fix: wh is now a regular prefix group, with 7 standalone slash commands
registered for the most common user-facing operations:
  /wormhole-list, /wormhole-info, /wormhole-discover,
  /wormhole-accept, /wormhole-agree, /wormhole-report,
  /wormhole-profile

All 4 context menus still work (Report, Bookmark, Delete, Profile).
All 85+ prefix commands still work via [p]wh.
2026-05-08 03:06:05 +00:00
everestmcarthur
78956afcb6 Fix: add missing _scheduled_embed_loop method to EmbedBuilderMixin 2026-05-08 03:04:13 +00:00
everestmcarthur
15e42fb454 fix: mod edit/nuke resolve relayed IDs back to original — any copy's ID works
get_relayed() now checks reverse map as fallback, so passing any
relayed copy's message ID resolves to the full mapping.

mod edit and mod nuke both call get_original() first, so staff can
right-click or copy ANY copy of a message and it deletes/edits the
entire chain across all servers.
2026-05-08 03:02:39 +00:00
EveCogs
9c7ccdead7 fix: OAuth callback redirect was broken — rsplit('/api/', 1) instead of rsplit('/', 2)
The callback was redirecting to http://ip:port/api/#/callback?token=... instead of
http://ip:port/#/callback?token=... — the SPA lives at root, not /api/.
2026-05-08 03:00:08 +00:00
everestmcarthur
f8fcb1670b v3.4.0 — Phase 5: hybrid commands, context menus, mention policy, ToS gate, reports, mod edit/delete
Phase 5 — Security, Privacy & Power Update:

HYBRID COMMANDS
- Main command group converted to hybrid_group (slash + prefix)
- All commands work as both /wh and [p]wh

CONTEXT MENU ACTIONS (right-click)
- Report to Wormhole — opens modal for report reason
- Wormhole Bookmark — saves message to DM
- Wormhole Delete — staff can delete from entire network
- Wormhole Profile — view user stats across networks

GRANULAR MENTION POLICY
- Per-network control: allow/block @user, @role, @everyone, @here
- Per-server overrides (different rules per guild)
- Per-user exemptions (trusted users bypass policy)
- Replaces legacy strip-* with proper policy engine
- wh mentions set/server-set/exempt/unexempt/status

TERMS OF SERVICE / RULES ACCEPTANCE GATE
- wh tos enable — require acceptance before messaging
- Built-in legal template (6 sections, prosecution-ready)
- Consent tracking with timestamps
- wh tos set (custom text), template (reset), accepted (view), reset (force re-accept)
- wh accept / wh agree — user-facing acceptance flow
- Blocks relay for non-accepted users with helpful reminder

MOD EDIT/DELETE ACROSS NETWORK
- wh mod edit <name> <msg_id> <new_content> — edits all relayed copies
- wh mod nuke <name> <msg_id> — deletes from every server + original
- Both audit-logged

REPORT SYSTEM
- wh report message — report via reply or message ID
- Context menu report with modal (reason input)
- Anti-abuse cooldown (60s between reports)
- Content hashing for audit trails
- Reports sent to log channel + network owner DM
- wh report list/resolve/action (ban/mute/warn/dismiss)
- Capped at 200 reports per network

PRIVACY & SECURITY
- _ReportModal class for context menu reporting
- Content hash stored instead of plaintext in report records
- Report cooldowns prevent abuse
- ToS acceptance with ISO timestamps for legal compliance

4,196 lines in wormhole.py, 419 in utils.py — 85+ commands total
2026-05-08 02:53:38 +00:00
everestmcarthur
ccd5079ead v1.2.0: Major visual redesign — cleaner, more organized help
Embed mode (default):
  - set_author with bot icon for clean header (no giant title)
  - Overview: welcome message, compact 2-column category grid
    with command previews, padded for clean alignment
  - Category pages: each command shown as bold code name + indented
    description with ╰ connector for visual hierarchy
  - Command detail: yaml syntax block, organized sections with
    emoji labels (📝 Description, 🔀 Aliases, ⏱️ Cooldown, 📁 Subcommands)
  - Smart page numbering with real page counts
  - Proper parameter hint footer (<required> [optional])
  - 6 commands per page for readability (not cramped)

CV2 mode:
  - Same visual improvements adapted for containers
  - Clean separator-based hierarchy
  - Prefix stripped from display names for cleaner look

Both modes:
  - ActionRow fix: Close button + Select in separate rows
  - Category cap at 18/20 to avoid Discord limits
  - Consistent footer/navigation styling
2026-05-08 02:44:22 +00:00
everestmcarthur
84459daf63 NexusCore v2.0.0 — 10 modules, 100+ commands, 8,132 lines
Major expansion:
- All 8 modules fully expanded with advanced features
- New: Embed Builder (webhook-based, templates, scheduling, variables)
- New: Dashboard Integration (web config for all modules)
- Serverlog: 30+ event types, invite tracking, per-event channels
- Moderation: quarantine, reputation, warning decay, staff leaderboard,
  anti-raid, anti-nuke, 6 automod modules, appeals, cross-server bans
- Economy: roulette, dice, fishing, mining, crafting, achievements,
  income roles, auction house, pets (6 types), heists, gambling stats
- Tickets: auto-close, tags, HTML transcripts, staff tracking, reopen
- Applications: staff voting, bulk actions, webhook notifications, templates
- Suggestions: edit, merge, 10 statuses, tag system, auto-approve/deny
- Reaction Roles: verification panels, exclusive groups, sticky/temp roles
- Giveaways: drop mode, bonus entries, templates, DM notifications
- All views use custom_id for persistence across restarts
- Full syntax verification on all 13 Python files
2026-05-08 02:38:34 +00:00
everestmcarthur
a76758f61a feat: NexusCore v1.0.0 — Ultimate all-in-one server management cog
8 fully-featured subsystems, 5,673 lines of code, 100+ commands:

🎫 Tickets — Panel-based creation, categories with modal questions, staff claim,
   priority system (low/med/high/urgent), HTML transcripts, feedback ratings, DM notifs

📋 Applications — Multi-type forms with paginated modals, accept/deny/interview
   review, auto-role, staff notes, auto-thread, cooldowns, age requirements

💡 Suggestions — Button voting, 8 status types, anonymous mode, auto-thread,
   staff responses, categories, top leaderboard, status-specific channels

🎭 Reaction Roles — Button/select/reaction modes, exclusive groups, role
   requirements, sticky roles, temporary roles, max picks, DM confirm

🎉 Giveaways — Button entry, role/age requirements, bonus entries, drop mode,
   multiple winners, reroll, scheduled end, DM notifications

📋 Logging — 20+ event types, per-event channels, message cache, invite tracking,
   ignore filters (channel/role/user/bot), bulk delete file export

🛡️ Moderation — Case system, warn auto-escalation, mute/kick/ban/softban/tempban,
   notes, channel/server lockdown, anti-raid, anti-nuke, automod (6 modules), appeals

🪙 Economy — Wallet+bank, daily/weekly streaks, work/crime/rob, coinflip/slots/blackjack,
   shop (items+roles), inventory, heist mini-game, pet system (6 types), leaderboard
2026-05-07 23:51:53 +00:00
EveCogs
20d6bd2c82 feat: EveDash v1.0.0 — Self-contained web dashboard for Red-DiscordBot
- Embedded aiohttp server (no external packages needed beyond aiohttp)
- Discord-inspired dark theme SPA frontend
- Discord OAuth2 authentication with JWT sessions
- Full REST API: bot info, guild management, settings, commands, cogs
- Real-time WebSocket for live events
- Third-party cog SDK: @dashboard_page decorator for easy integration
- Guild selector with search, command toggles, cog load/unload/reload
- Admin panel: global config, blacklist management
- Responsive design, toast notifications, smooth animations
- 3,604 lines across 8 files
2026-05-07 23:47:55 +00:00
everestmcarthur
f87759fecb fix: ActionRow can't mix buttons+selects; separate into own rows
- CV2 HelpPaginatorView: Close button in its own ActionRow,
  category Select in a separate ActionRow (Discord requires
  selects to be alone in their row)
- Cap overview embed to 20 category fields to stay under
  Discord's 25-field limit
2026-05-07 23:31:15 +00:00
everestmcarthur
d39ab05676 v1.1.0: embed help by default, CV2 when toggled on
Major rewrite of help rendering:
- Embed mode (default): Rich embeds with interactive View buttons
  (⏮◀️▶️⏭) + category select dropdown + close button
- CV2 mode (when `cv2 toggle` is on): Components V2 containers
  with the same navigation
- Shared data-gathering layer: both modes use the same logic to
  gather commands, filter permissions, handle categories
- All Red help features: command filtering, permission checks,
  aliases, subcommands, cooldowns, format_help_for_context
- Text fallback for DMs
2026-05-07 23:28:44 +00:00
everestmcarthur
622d9afdb8 fix: remove stats alias conflicting with other cogs 2026-05-07 22:59:05 +00:00
everestmcarthur
53d76cc3b3 fix: help always uses CV2 in guilds, fix cv2 group invoke
- Help command now always tries CV2 in guilds (that's its purpose)
  with text fallback only on error or in DMs
- cv2 group invoke no longer calls ctx.send_help() which relied
  on Red's internal formatter — sends usage text directly
2026-05-07 22:57:16 +00:00
everestmcarthur
627e5a426d v3.3.0 — Phase 4: hardened command filter, anonymous mode, polls, AFK, analytics, bridging, 15+ new features
Phase 4 additions:
- Hardened 4-layer command filtering (bot prefix, common prefixes, slash commands, context validation)
- Anonymous mode (hashed usernames, default avatars)
- One-way mirror channels (receive-only)
- Network-wide polls with reaction voting and auto-expiry
- AFK system with auto-clear on message send
- Personal ignore lists (per-user DM relay blocking)
- Staff auto-responses (word + regex triggers)
- Ephemeral messages (auto-delete after configurable seconds)
- Media-only mode (only relay attachments/images)
- Network analytics dashboard (hourly activity, peak hours, top users)
- Relay health monitor (15-min background check for channel accessibility)
- Message bookmarks (saved to DM)
- Per-user vanity embed colours
- Quiet hours (DM relay pause during configurable hours)
- Inter-network bridging (one-way or two-way)
- Updated README with full command reference (70+ commands)
- 3,376 lines in wormhole.py
2026-05-07 22:53:20 +00:00
everestmcarthur
1791251fec fix: recursion guard for send patches + paginate text fallback
- Context.send calls Messageable.send internally, both patched —
  use asyncio task ID set to prevent re-entry loop
- Text fallback for help now paginates at 1900 chars to stay
  under Discord's 2000-char limit
2026-05-07 22:52:17 +00:00
everestmcarthur
61131b28ee fix: remove help command in setup() before cog loads — no more conflict
The classic Red/discord.py pattern: bot.remove_command('help') in
__init__.py's setup() BEFORE bot.add_cog(), so the cog's own
@commands.command(name='help') decorator doesn't clash with Red's
built-in help.

Original help command stored on cog instance and restored in cog_unload.
2026-05-07 22:49:45 +00:00