Newer
Older
percord / src / util / util / Intents.ts
/*
	Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
	Copyright (C) 2023 Spacebar and Spacebar Contributors
	
	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Affero General Public License as published
	by the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Affero General Public License for more details.
	
	You should have received a copy of the GNU Affero General Public License
	along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

import { BitField } from "./BitField";

export class Intents extends BitField {
    static FLAGS = {
        GUILDS: BigInt(1) << BigInt(0), // guilds and guild merge-split events affecting the user
        GUILD_MEMBERS: BigInt(1) << BigInt(1), // memberships
        GUILD_MODERATION: BigInt(1) << BigInt(2), // bans and ban lists
        GUILD_EXPRESSIONS: BigInt(1) << BigInt(3), // custom emojis
        GUILD_INTEGRATIONS: BigInt(1) << BigInt(4), // applications
        GUILD_WEBHOOKS: BigInt(1) << BigInt(5), // webhooks
        GUILD_INVITES: BigInt(1) << BigInt(6), // mass invites (no user can receive user specific invites of another user)
        GUILD_VOICE_STATES: BigInt(1) << BigInt(7), // voice updates
        GUILD_PRESENCES: BigInt(1) << BigInt(8), // presence updates
        GUILD_MESSAGES: BigInt(1) << BigInt(9), // guild message metadata
        GUILD_MESSAGE_REACTIONS: BigInt(1) << BigInt(10), // guild message reactions
        GUILD_MESSAGE_TYPING: BigInt(1) << BigInt(11), // guild channel typing notifications
        DIRECT_MESSAGES: BigInt(1) << BigInt(12), // DM or orphan channels
        DIRECT_MESSAGE_REACTIONS: BigInt(1) << BigInt(13), // DM or orphan channel message reactions
        DIRECT_MESSAGE_TYPING: BigInt(1) << BigInt(14), // DM typing notifications
        GUILD_MESSAGES_CONTENT: BigInt(1) << BigInt(15), // guild message content
        AUTO_MODERATION_CONFIGURATION: BigInt(1) << BigInt(20), // guild policies
        AUTO_MODERATION_EXECUTION: BigInt(1) << BigInt(21), // guild policy execution
    };

    static ERKINALP_FLAGS = {
        LIVE_MESSAGE_COMPOSITION: BigInt(1) << BigInt(32), // allow composing messages using the gateway
        GUILD_ROUTES: BigInt(1) << BigInt(41), // message routes affecting the guild
        DIRECT_MESSAGES_THREADS: BigInt(1) << BigInt(42), // direct message threads
        JUMBO_EVENTS: BigInt(1) << BigInt(43), // jumbo events (size limits to be defined later)
        LOBBIES: BigInt(1) << BigInt(44), // lobbies
        INSTANCE_ROUTES: BigInt(1) << BigInt(60), // all message route changes
        INSTANCE_GUILD_CHANGES: BigInt(1) << BigInt(61), // all guild create, guild object patch, split, merge and delete events
        INSTANCE_POLICY_UPDATES: BigInt(1) << BigInt(62), // all instance policy updates
        INSTANCE_USER_UPDATES: BigInt(1) << BigInt(63), // all instance user updates
    };

    static PRIVILEGED_FLAGS: BitField = new Intents(Intents.FLAGS.GUILD_PRESENCES | Intents.FLAGS.GUILD_MEMBERS | Intents.FLAGS.GUILD_MESSAGES_CONTENT);

    static INTENT_TO_EVENTS_MAP = {
        // MESSAGE_CONTENT
        15: [],
        // TODO: aren't these guild specific?
        // AUTO_MODERATION_CONFIGURATION
        20: ["AUTO_MODERATION_RULE_CREATE", "AUTO_MODERATION_RULE_UPDATE", "AUTO_MODERATION_RULE_DELETE"],
        // AUTO_MODERATION_EXECUTION
        21: ["AUTO_MODERATION_ACTION_EXECUTION"],
    };

    static GUILD_INTENT_TO_EVENTS_MAP = {
        // GUILDS
        0: [
            "GUILD_CREATE",
            "GUILD_UPDATE",
            "GUILD_DELETE",
            "GUILD_ROLE_CREATE",
            "GUILD_ROLE_UPDATE",
            "GUILD_ROLE_DELETE",
            "CHANNEL_CREATE",
            "CHANNEL_UPDATE",
            "CHANNEL_DELETE",
            "CHANNEL_PINS_UPDATE",
            "THREAD_CREATE",
            "THREAD_UPDATE",
            "THREAD_DELETE",
            "THREAD_LIST_SYNC",
            "THREAD_MEMBER_UPDATE",
            "THREAD_MEMBERS_UPDATE", // *
            "STAGE_INSTANCE_CREATE",
            "STAGE_INSTANCE_UPDATE",
            "STAGE_INSTANCE_DELETE",
        ],
        // GUILD_MEMBERS
        1: [
            "GUILD_MEMBER_ADD",
            "GUILD_MEMBER_UPDATE",
            "GUILD_MEMBER_REMOVE",
            "THREAD_MEMBERS_UPDATE ", // *
        ],
        // GUILD_BANS
        2: ["GUILD_AUDIT_LOG_ENTRY_CREATE", "GUILD_BAN_ADD", "GUILD_BAN_REMOVE"],
        // GUILD_EXPRESSIONS
        3: [
            "GUILD_EMOJIS_UPDATE",
            "GUILD_STICKERS_UPDATE",
            "GUILD_SOUNDBOARD_SOUND_CREATE",
            "GUILD_SOUNDBOARD_SOUND_UPDATE",
            "GUILD_SOUNDBOARD_SOUND_DELETE",
            "GUILD_SOUNDBOARD_SOUNDS_UPDATE",
        ],
        // GUILD_INTEGRATIONS
        4: ["GUILD_INTEGRATIONS_UPDATE", "INTEGRATION_CREATE", "INTEGRATION_UPDATE", "INTEGRATION_DELETE"],
        // GUILD_WEBHOOKS
        5: ["WEBHOOKS_UPDATE"],
        // GUILD_INVITES
        6: ["GUILD_INVITE_CREATE", "GUILD_INVITE_DELETE"],
        // GUILD_VOICE_STATES
        7: ["VOICE_CHANNEL_EFFECT_SEND", "VOICE_STATE_UPDATE"],
        // GUILD_PRESENCES
        8: ["PRESENCE_UPDATE"],
        // GUILD_MESSAGES
        9: ["MESSAGE_CREATE", "MESSAGE_UPDATE", "MESSAGE_DELETE", "MESSAGE_DELETE_BULK"],
        // GUILD_MESSAGE_REACTIONS
        10: ["MESSAGE_REACTION_ADD", "MESSAGE_REACTION_REMOVE", "MESSAGE_REACTION_REMOVE_ALL", "MESSAGE_REACTION_REMOVE_EMOJI"],
        // GUILD_MESSAGE_TYPING
        11: ["TYPING_START"],
        // GUILD_SCHEDULED_EVENTS
        16: ["GUILD_SCHEDULED_EVENT_CREATE", "GUILD_SCHEDULED_EVENT_UPDATE", "GUILD_SCHEDULED_EVENT_DELETE", "GUILD_SCHEDULED_EVENT_USER_ADD", "GUILD_SCHEDULED_EVENT_USER_REMOVE"],
        // GUILD_MESSAGE_POLLS
        24: ["MESSAGE_POLL_VOTE_ADD", "MESSAGE_POLL_VOTE_REMOVE"],
    };
    static DM_INTENT_TO_EVENTS_MAP = {
        // DIRECT_MESSAGES
        12: ["MESSAGE_CREATE", "MESSAGE_UPDATE", "MESSAGE_DELETE", "CHANNEL_PINS_UPDATE"],
        // DIRECT_MESSAGE_REACTIONS
        13: ["MESSAGE_REACTION_ADD", "MESSAGE_REACTION_REMOVE", "MESSAGE_REACTION_REMOVE_ALL", "MESSAGE_REACTION_REMOVE_EMOJI"],
        // DIRECT_MESSAGE_TYPING
        14: ["TYPING_START"],
        // DIRECT_MESSAGE_POLLS
        25: ["MESSAGE_POLL_VOTE_ADD", "MESSAGE_POLL_VOTE_REMOVE"],
    };
}