Legal · Discord apps · Developer Portal
Nefarious Widget privileged intents
Effective September 12, 2026 · Last updated September 19, 2026
Configuration guidance for Nefarious Widget. These answers match discord.Intents.none(); intents.guilds = True; intents.voice_states = True in widget_server.py. The deployed application ID and live overlay still require verification. A privileged-intent application is unnecessary for the reviewed feature.
Do not apply for Message Content, Server Members, or Presence. Voice States (counting who is in one voice channel) is a standard intent, not a privileged one.
01Intent matrix
- Message Content — NO. widget_server.py never enables intents.message_content and has no on_message, prefix, or slash-command handler. The overlay is driven by a voice-count API, not by reading Discord messages.
- Server Members — NO. intents.members is not set. The bot does not welcome members, assign roles, or enumerate the guild member list. Occupant count comes from VoiceChannel.members, which discord.py fills from the voice-state cache after intents.voice_states = True — a standard intent, not Server Members.
- Presence — NO. The bot never reads online, idle, DND, or streaming status. intents.presences is not set. A live count of people in one voice channel is not Presence.
Non-privileged use
- Guilds — resolve the configured voice channel id after login
- Voice States — on_voice_state_update refreshes len(channel.members) for that one channel
02What does your application do?
Nefarious Widget provides a voice-channel occupant count for a stream overlay. The reviewed implementation uses discord.Intents.none(), with guilds and voice_states enabled. It counts len(channel.members) for one configured channel when Discord becomes ready and when voice-state events arrive. An HTTP endpoint returns the count, channel ID/name, guild name, readiness, update time and error status. The HTML overlay polls every five seconds. Discord voice-state/member objects are processed in host memory; the endpoint does not return an occupant roster. The bot does not join an audio session, record audio, read messages or process chat commands. No privileged intent is needed for this feature. A live connection on September 19, 2026 verified bot ID 1521352013567496272 and captured the actual overlay showing zero occupants. The capture is historical; a join/leave transition and persistent deployment controls remain unverified.
03Privacy Policy fields
Do you have a public Privacy Policy? Yes Where is it available? Official Nefarious website at the URL below. Add this URL to the application's Developer Portal settings; profile publication has not been verified. Privacy Policy URL: https://www.nefarious.trading/legal/nefarious-widget/privacy Terms of Service URL: https://www.nefarious.trading/legal/nefarious-widget/terms
04Message Content — do not request
Leave Message Content unchecked. Paste this if they ask why you do not need it:
We are not requesting Message Content. Nefarious Widget has no on_message listener, no prefix commands, and no slash commands. The overlay is updated from a voice-count JSON API. Enabling Message Content would not add a feature.
Can users opt out of message-content tracking?
Not applicable Not applicable — the bot does not read member message content. Members opt out of the count by leaving the watched voice channel.
Storing message content off-platform?
No No Discord message content is stored. The process keeps an in-memory snapshot (count, channel id/name, guild name, timestamp). It does not write occupant user ids, usernames, or chat to disk.
Used to train ML / AI models?
No
05API data stored off-platform
Store Discord API Data off-platform: Yes — transient Discord data in host memory and persistent channel ID configuration. Temporary memory is still processing outside Discord.
All API data retained for 30 days or less: No — configuration has no automatic 30-day expiry; host log retention is unverified.
The snapshot and discord.py voice-state/member cache live outside Discord in host memory. The application refreshes the snapshot on ready and voice-state events; memory is released when the process ends. There is no application-written occupant history or automatic 30-day deletion job. The configured channel ID persists for operation, and operator or proxy logs have not been audited. Do not claim all Discord API data is deleted within 30 days.
Deletion contact: Business@nefarious.trading.
06Server Members and Presence — do not request
Leave those boxes unchecked. Counting one voice channel uses Voice States, not Server Members and not Presence. If Discord asks why you do not need them:
Server Members: intents.members is not set. The bot does not welcome members, assign roles, or enumerate the guild member list. Occupant count comes from VoiceChannel.members, which discord.py fills from the voice-state cache after intents.voice_states = True — a standard intent, not Server Members. Presence: The bot never reads online, idle, DND, or streaming status. intents.presences is not set. A live count of people in one voice channel is not Presence.
07Source review and live evidence
The reviewed source widget_server.py sets only guilds and voice_states, refreshes len(channel.members), and serves GET /api/voice-count. It does not send or read Discord messages. A running-bot capture on September 19, 2026 verified its identity, enabled intents and an actual count of zero.
The Evidence page includes the actual overlay capture. A before/after count transition still requires an authorized participant to join or leave the configured voice channel. Include the capture time and application ID. Keep participant identities out of the public capture unless needed and approved for publication. The captured count is historical, not a live feed.
References: Discord gateway intents and discord.py member-cache behavior.
- Watched voice channel: https://discord.com/channels/909011353342181426/1492973945190748411
Questions: Business@nefarious.trading.
Also see our Terms of Service, Privacy Policy, and All-bot intents matrix.