Commit graph

38 commits

Author SHA1 Message Date
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
everestmcarthur
a9cb8d5142 feat: disable default help, global embed→CV2 conversion
- Removes Red's built-in help command on cog load, restores on unload
- Our help command fully replaces it (CV2 when enabled, text fallback for DMs)
- Monkey-patches both Context.send AND Messageable.send so ALL bot embeds
  everywhere (channels, threads, DMs) get auto-converted to CV2 containers
- Per-cog overrides still respected for Context sends
- Clean restore of everything on cog unload
2026-05-07 22:45:42 +00:00
everestmcarthur
324524fc77 refactor: NewHelpMenu → Components V2 mega cog (complete rewrite)
Replaces embed-based help with full Components V2 system:
- converter.py: Embed → Container conversion engine
- formatter.py: CV2 help page builder + paginator views
- newhelpmenu.py: Main cog with settings, monkey-patching, public API
- 1,747 lines across 4 files, default off
2026-05-07 22:41:31 +00:00
Viktor AI
e1718139d4 Fix formatter: match Red's actual send_help/format_bot_help signatures
Red calls format_bot_help(ctx, help_settings=...) without a mapping arg.
Also override send_help() to properly route all help requests.
2026-05-07 22:40:48 +00:00
everestmcarthur
a4f5265083 v3.2.1 — Fix relay issues: robust init, webhook fallback, debug command
Fixes:
- _init() now always sets _ready event even on error (prevents
  permanent relay blockage if init fails)
- Webhook method retries with cache refresh on stale/deleted webhooks
- Falls back to embed mode if webhooks fail (permissions, etc.)
- Empty content guard (prevents 400 errors on empty messages)
- Fixed deprecated discord.Embed.Empty usage for discord.py 2.x
- Prefix check now skips empty prefixes (prevents all-message block)
- asyncio.ensure_future() instead of bot.loop.create_task()
- Better error logging with exc_info for relay failures

New:
- [p]wh debug command — shows cog state, intents, permissions,
  webhook status, connected channels, and prefix diagnostics
2026-05-07 22:39:12 +00:00
Viktor AI
56d5b11882 Fix discord.py 2.x compat: replace Embed.Empty with conditional kwargs
Embed.Empty was removed in discord.py 2.x — set_footer and set_author
now only pass icon_url when a value actually exists.
2026-05-07 22:38:02 +00:00
Viktor AI
adf9e0f9d5 Add NewHelpMenu v1.0.0 — fully customisable interactive help system
1,573-line cog with total configurability over every aspect:

Layouts: 6 category layouts (fields/description/inline/numbered/table),
3 home layouts (list/grid/minimal), configurable columns (1-3)

Themes: 4 built-in (default/minimal/compact/dark) + full custom mode

Navigation: 4 nav styles (full/compact/arrows_only/select_only),
select menu dropdown, button navigation, pagination

Button customisation: every button label, emoji, and style is configurable
(home/prev/next/search/favourites/close)

Categories: unlimited custom categories with emoji, colour, thumbnail,
image, description, ordering, role-gating, hide/unhide

Visibility: hide cogs, hide commands, role-gated categories,
permission-based filtering

Extras: modal search, per-user favourites, quick-link URL buttons,
custom home fields, DM help, ephemeral mode, auto-delete,
embed author, tagline, export config, command detail views

70+ admin commands across 10+ command groups.
2026-05-07 22:33:10 +00:00
everestmcarthur
680b87db39 v3.2.0 — Phase 3: DM relay, starboard, karma, auto-mod, highlights, search & more
Complete ground-up rewrite (2,762 lines across 3 files):

Phase 3 features:
- Bidirectional DM relay (subscribe, send, receive, 3 formats)
- Cross-network starboard with configurable threshold
- Reputation/karma system with leaderboard
- Keyword highlight notifications (DM alerts)
- Anti-raid detection with auto-freeze
- Attachment filters (blocked extensions, max filesize)
- Pin sync across channels
- Typing indicator relay
- Network discovery (public flag + tags)
- Message search across network
- Scheduled messages (timed broadcasts)
- Network-wide slowmode
- Relay delay (configurable)
- Vanity invite codes
- Per-channel setting overrides
- Purge command (mass delete relayed)
- Audit log (500 entries, full trail)
- MOTD and rules
- Comprehensive README with full command reference

Phase 2 features (carried forward):
- Auto-moderation engine (spam, caps, invites, links, zalgo, spoiler, emote/newline spam)
- Invite system with expiry and max uses
- Staff announcements and portal messages
- Welcome messages and mention control
- User profiles and network stats
- Backup/restore (JSON export/import)
- Blackout scheduling
- Global blocklist (bot owner)
- Embed and compact relay modes

Phase 1 features (carried forward):
- Named networks with webhook relay
- Edit/delete/reply/reaction/sticker sync
- Staff system with ownership transfer
- Word and regex content filters
- Rate limiting and NSFW gate
- Server nicknames, custom identity
- Logging channel
2026-05-07 22:19:09 +00:00
everestmcarthur
6ca37b9ba1 Initial commit — Wormhole v3.0.0: advanced cross-server relay cog
Features:
- Named wormhole networks with full per-network config
- Webhook relay with custom avatar/name modes (user, server, both, custom)
- Message edit, delete, reply, reaction, thread & sticker sync
- Staff system (owner + staff) with granular permissions
- Moderation: user ban/mute, server ban/mute, allowlist
- Word & regex content filters with auto-delete
- Token-bucket rate limiting per user per network
- Per-network logging channel
- Statistics dashboard
- NSFW gating, freeze/pause, silent mode
- Custom network icon, description, accent colour
- Server nickname overrides
- Ownership transfer
- Thread support
- Embed forwarding
- Professional README, info.json, LICENSE
2026-05-07 21:53:21 +00:00