From 2914874d192695165c3b8f337732f9d163cc89f9 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Mon, 29 Mar 2021 18:58:33 +0200 Subject: [PATCH] types: add gateway opcodes enum (#711) * bring opcodes enum back * Update src/types/gateway/opcodes.ts Co-authored-by: ayntee * DiscordGatewayOpcodes Co-authored-by: ayntee --- src/types/gateway/opcodes.ts | 14 ++++++++++++++ src/types/mod.ts | 1 + src/util/utils.ts | 3 ++- src/ws/shard.ts | 17 +++++++++-------- src/ws/shard_manager.ts | 5 +++-- 5 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 src/types/gateway/opcodes.ts diff --git a/src/types/gateway/opcodes.ts b/src/types/gateway/opcodes.ts new file mode 100644 index 000000000..cb027701d --- /dev/null +++ b/src/types/gateway/opcodes.ts @@ -0,0 +1,14 @@ +/** https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes */ +export enum DiscordGatewayOpcodes { + Dispatch, + Heartbeat, + Identify, + StatusUpdate, + VoiceStateUpdate, + Resume = 6, + Reconnect, + RequestGuildMembers, + InvalidSession, + Hello, + HeartbeatACK, +} diff --git a/src/types/mod.ts b/src/types/mod.ts index a670bbdd1..f564bee47 100644 --- a/src/types/mod.ts +++ b/src/types/mod.ts @@ -26,6 +26,7 @@ export * from "./emojis/create_guild_emoji.ts"; export * from "./emojis/emoji.ts"; export * from "./emojis/modify_guild_emoji.ts"; export * from "./gateway.ts"; +export * from "./gateway/opcodes.ts"; export * from "./invites/get_invite.ts"; export * from "./invites/invite.ts"; export * from "./invites/invite_metadata.ts"; diff --git a/src/util/utils.ts b/src/util/utils.ts index 1cbd16107..134a3bc6a 100644 --- a/src/util/utils.ts +++ b/src/util/utils.ts @@ -1,4 +1,5 @@ import { encode } from "../../deps.ts"; +import { DiscordGatewayOpcodes } from "../types/mod.ts"; import { basicShards, sendWS } from "../ws/shard.ts"; import { SLASH_COMMANDS_NAME_REGEX } from "./constants.ts"; @@ -11,7 +12,7 @@ export function editBotStatus( ) { basicShards.forEach((shard) => { sendWS({ - op: GatewayOpcode.StatusUpdate, + op: DiscordGatewayOpcodes.StatusUpdate, d: { since: null, afk: false, diff --git a/src/ws/shard.ts b/src/ws/shard.ts index 588920460..7718da9d2 100644 --- a/src/ws/shard.ts +++ b/src/ws/shard.ts @@ -5,6 +5,7 @@ import { DiscordHello, DiscordIdentify, } from "../types/gateway.ts"; +import { DiscordGatewayOpcodes } from "../types/mod.ts"; import { Collection } from "../util/collection.ts"; import { delay } from "../util/utils.ts"; import { decompressWith } from "./deps.ts"; @@ -72,7 +73,7 @@ export function createShard( const messageData = JSON.parse(message); if (!messageData.t) eventHandlers.rawGateway?.(messageData); switch (messageData.op) { - case GatewayOpcode.Hello: + case DiscordGatewayOpcodes.Hello: if (!heartbeating.has(basicShard.id)) { await heartbeat( basicShard, @@ -82,17 +83,17 @@ export function createShard( ); } break; - case GatewayOpcode.HeartbeatACK: + case DiscordGatewayOpcodes.HeartbeatACK: heartbeating.set(shardID, true); break; - case GatewayOpcode.Reconnect: + case DiscordGatewayOpcodes.Reconnect: eventHandlers.debug?.( { type: "gatewayReconnect", data: { shardID: basicShard.id } }, ); basicShard.needToResume = true; await resumeConnection(data, identifyPayload, basicShard.id); break; - case GatewayOpcode.InvalidSession: + case DiscordGatewayOpcodes.InvalidSession: eventHandlers.debug?.( { type: "gatewayInvalidSession", @@ -166,14 +167,14 @@ function identify(shard: BasicShard, payload: DiscordIdentify) { ); sendWS({ - op: GatewayOpcode.Identify, + op: DiscordGatewayOpcodes.Identify, d: { ...payload, shard: [shard.id, payload.shard[1]] }, }, shard.id); } function resume(shard: BasicShard, payload: DiscordIdentify) { sendWS({ - op: GatewayOpcode.Resume, + op: DiscordGatewayOpcodes.Resume, d: { token: payload.token, session_id: shard.sessionID, @@ -219,7 +220,7 @@ async function heartbeat( heartbeating.set(shard.id, false); sendWS( - { op: GatewayOpcode.Heartbeat, d: shard.previousSequenceNumber }, + { op: DiscordGatewayOpcodes.Heartbeat, d: shard.previousSequenceNumber }, shard.id, ); eventHandlers.debug?.( @@ -291,7 +292,7 @@ export async function requestGuildMembers( } sendWS({ - op: GatewayOpcode.RequestGuildMembers, + op: DiscordGatewayOpcodes.RequestGuildMembers, d: { guild_id: guildID, // If a query is provided use it, OR if a limit is NOT provided use "" diff --git a/src/ws/shard_manager.ts b/src/ws/shard_manager.ts index d9902e2a6..bc5220ce8 100644 --- a/src/ws/shard_manager.ts +++ b/src/ws/shard_manager.ts @@ -2,6 +2,7 @@ import { eventHandlers } from "../bot.ts"; import { cache } from "../cache.ts"; import { handlers } from "../handlers/mod.ts"; import { Member } from "../structures/mod.ts"; +import { DiscordGatewayOpcodes } from "../types/mod.ts"; import { Collection } from "../util/collection.ts"; import { delay } from "../util/utils.ts"; import { createShard, requestGuildMembers } from "./mod.ts"; @@ -67,10 +68,10 @@ export async function handleDiscordPayload( await eventHandlers.dispatchRequirements?.(data, shardID); switch (data.op) { - case GatewayOpcode.HeartbeatACK: + case DiscordGatewayOpcodes.HeartbeatACK: // In case the user wants to listen to heartbeat responses return eventHandlers.heartbeat?.(); - case GatewayOpcode.Dispatch: + case DiscordGatewayOpcodes.Dispatch: if (!data.t) return; // Run the appropriate handler for this event. return handlers[data.t]?.(data, shardID);