“___hidden___” Channels in Your Discord Bot: What Changes on November 16, 2026
From November 16, 2026, your bot won't know the names of channels it can't view: they'll arrive named ___hidden___, or not arrive at all. If your bot only works in its own channels, you don't need to do anything. If it lists, copies or audits every channel in a server, you do. This guide was published before the change takes effect and is based on Discord's documentation: here's how to tell if you're affected, how to test it now and what to change in discord.py and discord.js.
What exactly changes
Until now, a bot received data for every channel in a server, including ones it couldn't open: name, topic and permissions. Discord announced this on August 12, 2026 as a breaking change, and from November 16 it applies to every bot:
Over the Gateway (the live connection your bot's cache is built from), those channels still arrive, but with the name replaced by ___hidden___, the CHANNEL_OBFUSCATED flag (1 << 17) set and a single permission overwrite: VIEW_CHANNEL denied for @everyone.
Over the HTTP API, GET /guilds/{guild.id}/channels no longer returns them: they're simply missing, with no error or warning.
On a hidden channel, only id, type, position and parent_id can be trusted; Discord says not to rely on anything else. As soon as your bot gains access, it receives a Channel Update with the real data. And what arrives inside an interaction (a slash command, for example) isn't hidden.
For Discord, being able to view a channel means having VIEW_CHANNEL on it, or being connected to it if it's a voice channel. And a category is viewable if any channel inside it is.
Rather not set it up yourself? Discord bot hosting from €1.50 a month, no contract and a full refund within 72 hours. Or create a free Discord bot, no card needed.
Which bots are affected
Discord is clear: if your bot only acts in channels it has permission to view, this doesn't affect you. A welcome, music, giveaway or ticket bot with its channels set up properly carries on as before.
It does affect bots that read data about channels they can't view. Discord gives three examples: bots that mirror or audit the full channel list, bots that calculate permissions across every channel, and bots that report on a server's structure.
Also check whether your bot does any of these: looks up a channel by name (discord.utils.get(guild.channels, name="logs"), or find in discord.js), backs up the server, shows a channel picker on a settings website, or counts channels. Watch out for that last one: the cache will keep counting hidden channels and an HTTP request won't, so the two numbers will stop matching.
How to test it before the date
Discord lets you turn it on early over the Gateway, temporarily and for testing only. There's no way to do it over HTTP: you'll only see that on the 16th.
Open your bot in the portal
At discord.com/developers/applications, pick your application and go to “Bot”. Use a test bot if you have one.
Turn on “Private Channel Obfuscation”
It's the toggle Discord added for testing. You can also ask for it in code, with capability
1 << 15in Identify, but the toggle is easier.Restart the bot
The cache fills when it connects. Without rebuilding it, you'll keep seeing the old data.
Create a channel it can't view
Make it private, without giving the bot's role access, and run the features that loop through channels. If ___hidden___ shows up in a log or something breaks, you've found what to change.
What to change in your bot
Store ids, not names
A hidden channel's name is useless, and they'll all be called the same. Store the id: it's one of the few fields that stays valid. With Developer Mode on in Discord, right-click the channel → “Copy Channel ID”.
Skip the channels you can't view
Before looping through channels, filter them as in the example above. If the bot tries to act on one it can't view, Discord answers with the Missing Access error.
Say what's missing instead of hiding it
If your bot does backups or audits, report how many channels it skipped: “I can't view 3 channels. Give me View Channels to include them.” An incomplete report that looks complete is worse than a warning.
Fetch channels the right way
If you use
fetch_channels()in discord.py orguild.channels.fetch()in discord.js, remember they go over HTTP: hidden channels just won't come back.
If your bot needs to see a channel
Give it permission, because there's no other way: in “Edit Channel” → “Permissions”, add the bot's role and enable “View Channels”. If there are many, do it on the category. To work out which permissions to ask for in the invite link, use the bot permissions calculator.
Updating discord.py or discord.js won't bring the names back, because the change is on Discord's servers. And what it has published offers no way to keep the old behaviour.
If your bot is on NapNodes
The change is Discord's and works the same wherever your bot runs: there's nothing to touch on the server, only in your code.
Upload the new code
In “Files”, or from your GitHub repository if you've set it in “Settings”.
Press “Restart”
A bot reads its code when it starts.
Check the “Console”
That's where your bot's output appears, including any ___hidden___ in its logs.
Frequently asked questions
What does ___hidden___ mean on a Discord channel?
That your bot doesn't have permission to view that channel, so Discord hides its name and nearly all its data. It's not an error or a new channel: it's the same channel as always, hidden from that bot.
When does Discord start hiding channels from bots?
On November 16, 2026, for every bot. Before that you can only test it over the Gateway, with the “Private Channel Obfuscation” toggle in the developer portal.
Do I need to change anything in my bot?
Only if it reads data about channels it can't view: server backups, audits, reports or looking up channels by name. If it only works in its own channels, Discord says it isn't affected.
Does updating discord.py or discord.js fix it?
No. The change is in Discord, not the library. For your bot to see a channel again, give it the View Channels permission there.
Why are channels missing from what the API returns?
Because from that date the HTTP channel list leaves out the ones your bot can't view, with no error. Over the Gateway they still arrive, but with their data hidden.
How do I know which channels my bot can view?
Ask about its permission: in discord.py, channel.permissions_for(guild.me).view_channel; in discord.js, channel.viewable.
Shall we set it up for you?
Discord bot hosting from €1.50 a month, never oversold: your RAM is yours alone. And if you'd rather start without paying, there's a free Discord bot, no card needed.
Free tool: Discord bot permissions calculator. Tick your bot's permissions and get the number and the invite link; or paste a number and see which permissions it grants.
Keep reading
- “The Application Did Not Respond” in Your Discord Bot: Unknown Interaction and How to Fix It
Why your Discord bot says “The application did not respond” or “Unknown interaction” (10062, 40060), and how to fix it in discord.py and discord.js.
- “Missing Access” and “Missing Permissions” in Your Discord Bot: Errors 50001 and 50013
What Missing Access (50001) and Missing Permissions (50013) mean in a Discord bot, how they differ and how to fix them in discord.py and discord.js.
- Discord Bot Not Responding (or Showing Offline): Causes and Fixes
Your Discord bot doesn't reply or shows as offline: token, Message Content Intent, permissions, error 429… Each error and its fix in discord.py and discord.js.