This policy describes the data Halpae reads, stores, and shares. It is written to match what the bot actually does in code, not a generic template. If you want the short version: Halpae works with Discord user IDs and role membership so it can keep one role in sync with a Google Sheet. It does not read your messages.
The bot is run by the administrators of the Mobile Legends: Bang Bang Global Discord (“we”, “us”). It is an internal tool for that one server.
What Halpae processes
Discord user IDs. The bot reads a column of Discord user IDs from a Google Sheet that a moderator has configured. Those IDs are the list of who should hold the synced role. The bot ignores every other column in the sheet (display names, notes, and anything else); it reads the ID column and nothing more.
Role membership. To work out what to change, the bot needs to know who currently holds the synced role. It asks Discord for the server’s member list (using the Server Members intent) and keeps that in memory while it runs. This is standard Discord data — user IDs and which roles they hold — not profile details.
Command interactions. When a moderator runs a /rolesync command, Discord
tells the bot who ran it and with what options, so it can act and reply. Replies
are sent as ephemeral messages visible only to the person who ran the command.
What the bot does not touch. Halpae does not read, store, or process the content of your messages, your direct messages, your email address, your IP address, your real name, or any Discord profile information beyond user IDs and role membership. It has no message-content intent and does not listen to conversations.
What Halpae stores, and for how long
Halpae keeps a small state file on the server that hosts it (data/role-sync.json).
For each configured sync it holds two things:
- A hash of the sheet’s ID list (a SHA-256 fingerprint, not the IDs themselves), used to detect when the sheet has changed so the bot doesn’t do redundant work.
- A summary of the last run: timestamps, counts of roles added, removed, failed, and skipped, and — where relevant — a short list of user IDs that were on the sheet but not in the server. This last list is the only place the state file holds raw user IDs, and it only appears when someone on the sheet has not joined (or has left) the server.
Each run overwrites the previous summary for that sync, so the file holds only the most recent result, not a running history. It stays until the sync runs again or until an operator deletes the file.
The bot also writes operational logs to standard output. Depending on the log level, these can include user IDs involved in a sync and error details. How long logs are kept depends on the hosting setup the operators use; they are meant for debugging and are not retained as a permanent record.
Where your data goes
Google. The bot reads the configured sheet through a Google service account with read-only access. It only reads; it never writes to your Google account or the sheet, and it does not sign you into anything. Google’s handling of the sheet is covered by Google’s Privacy Policy.
Discord. The bot uses Discord’s API to read member and role data and to add or remove the role. Your use of Discord itself is governed by Discord’s Privacy Policy.
The audit channel. If an audit channel is configured, the bot posts a summary of each run there — the same counts as the stored summary, plus a short sample of user IDs that were on the sheet but not in the server. Anyone who can see that channel can see those summaries. Operators should restrict the channel to staff.
Halpae does not sell your data, does not send it to advertisers or analytics services, and does not share it outside the three places above (Google for reading the sheet, Discord for applying roles, and the audit channel if enabled).
Legal basis and your choices
We process this data to run a service the community and its moderators asked for: keeping a role in step with an agreed roster. The only personal identifiers involved are Discord user IDs, which are already public within any server you share with other members.
Because the sheet is the source of truth, the way to control whether the bot acts on your ID is through the roster itself:
- To have the role removed and your ID stop being synced, ask a moderator to remove your entry from the sheet; the next run will remove the role.
- To have your ID cleared from the stored run summary or logs, ask an operator; the summary is overwritten on the next run in any case, and logs age out.
- Leaving the server removes you from the role membership the bot reads. Your ID may still sit in the sheet until a maintainer removes it, but the bot will treat you as “not in the server” and will not hold a role for you.
Requests about your data go to the server’s moderation team through the normal
staff channels, or to the Halpae developer at developer@jeysi.dev.
Changes
If the bot gains a feature that handles different data, we will update this policy before that feature is enabled in the server, change the effective date above, and note the change to members. Continuing to use the bot after an update means you accept it.
See the Terms of Service for the rules that cover using the bot.