From eef8887bc394662981aa2643c71c94f00a380f24 Mon Sep 17 00:00:00 2001 From: Skillz Date: Fri, 24 Mar 2023 11:18:26 -0500 Subject: [PATCH] feat: gateway.preferSnakeCase --- packages/gateway/src/Shard.ts | 6 +++++- packages/gateway/src/manager.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/gateway/src/Shard.ts b/packages/gateway/src/Shard.ts index 5ad8e72ce..0b078e222 100644 --- a/packages/gateway/src/Shard.ts +++ b/packages/gateway/src/Shard.ts @@ -10,7 +10,7 @@ import type { RequestGuildMembers, } from '@discordeno/types' import { GatewayCloseEventCodes, GatewayIntents, GatewayOpcodes } from '@discordeno/types' -import { camelize, Collection, delay, LeakyBucket, logger } from '@discordeno/utils' +import { Collection, LeakyBucket, camelize, delay, logger } from '@discordeno/utils' import { inflateSync } from 'node:zlib' import WebSocket from 'ws' import type { RequestMemberRequest } from './manager.js' @@ -467,6 +467,10 @@ export class DiscordenoShard { this.previousSequenceNumber = packet.s } + this.forwardToBot(packet); + } + + forwardToBot(packet: DiscordGatewayPayload): void { // The necessary handling required for the Shards connection has been finished. // Now the event can be safely forwarded. this.events.message?.(this, camelize(packet)) diff --git a/packages/gateway/src/manager.ts b/packages/gateway/src/manager.ts index b993bffa6..3d5ab4e17 100644 --- a/packages/gateway/src/manager.ts +++ b/packages/gateway/src/manager.ts @@ -37,6 +37,7 @@ export function createGatewayManager(options: CreateGatewayManagerOptions): Gate totalWorkers: options.totalWorkers ?? 4, shardsPerWorker: options.shardsPerWorker ?? 25, spawnShardDelay: options.spawnShardDelay ?? 5300, + preferSnakeCase: false, shards: new Map(), buckets: new Map(), cache: { @@ -167,6 +168,12 @@ export function createGatewayManager(options: CreateGatewayManagerOptions): Gate }, }) + if (this.preferSnakeCase) { + shard.forwardToBot = async (payload) => { + options.events.message?.(shard!, payload) + } + } + this.shards.set(shardId, shard) } @@ -289,6 +296,11 @@ export interface CreateGatewayManagerOptions { * @default 5300 */ spawnShardDelay?: number + /** + * Whether to send the discord packets in snake case form. + * @default false + */ + preferSnakeCase?: boolean /** * Total amount of shards your bot uses. Useful for zero-downtime updates or resharding. * @default 1