Gateway intents
Set these on the bot’s page in the Discord Developer Portal.
Server Members is deliberately not requested. The bot fetches members one id at a time instead, which
does not need it. Do not switch the code to a bulk
guild.members.fetch() without adding the intent first.
Permissions in the bridge channel
The last two are reported once to the log channel when they first fail, then not again, so a missing
permission does not spam the channel. The bridge falls back to ordinary relaying and keeps working.
Permissions in other channels
An officer channel needs Add Reactions only for the routing markers — 📡 when a reply reached no guild,
❓ on an unrecognised guild tag; without it the reply is still attempted. It deliberately needs
neither Manage Webhooks nor Manage Messages, because nothing there is ever reposted or deleted.
⚠️ An officer channel is two-way. Every member who can post in it is speaking in Hypixel officer chat, and the channel’s own Discord permissions are the only thing controlling that.A channel where the bot is missing Manage Webhooks or Manage Messages is skipped by the global profile change and left completely alone, with one warning to the log channel. It is not partially disguised. Officer channels are skipped by it whatever the permissions are — see Officer chat. A missing or broken log channel never takes down the work it was reporting on — the failure is printed to the console and swallowed. A log line always describes something that has already happened.
Server-wide permissions
A link role that cannot be granted is reported and the link goes ahead anyway. The role never gates the link:
a missing role is a configuration problem, not a reason to refuse someone’s
/link.
Permissions the bot demands of people
Two separate systems, deliberately.- Discord permissions, checked generically before a command runs. Only
/adminroleuses one — it needs Administrator, because it is the command that decides who else is an admin. - Bot-admin roles, checked inside the command. Everything else admin-gated uses this.