feat: shard - the beginning
This commit is contained in:
parent
d0f48f601a
commit
71913ce239
5 changed files with 78 additions and 53 deletions
|
@ -15,6 +15,7 @@ import { Extension } from './extensions.ts'
|
|||
import { SlashClient } from './slashClient.ts'
|
||||
import { Interaction } from '../structures/slash.ts'
|
||||
import { SlashModule } from './slashModule.ts'
|
||||
import type { ShardManager } from './shard.ts'
|
||||
|
||||
/** OS related properties sent with Gateway Identify */
|
||||
export interface ClientProperties {
|
||||
|
@ -93,6 +94,7 @@ export class Client extends EventEmitter {
|
|||
_decoratedSlash?: Array<{
|
||||
name: string
|
||||
guild?: string
|
||||
parent?: string
|
||||
handler: (interaction: Interaction) => any
|
||||
}>
|
||||
|
||||
|
@ -110,6 +112,11 @@ export class Client extends EventEmitter {
|
|||
...args: Parameters<ClientEvents[K]>
|
||||
): boolean => this._untypedEmit(event, ...args)
|
||||
|
||||
/** Shard on which this Client is */
|
||||
shard: number = 0
|
||||
/** Shard Manager of this Client if Sharded */
|
||||
shardManager?: ShardManager
|
||||
|
||||
constructor(options: ClientOptions = {}) {
|
||||
super()
|
||||
this.token = options.token
|
||||
|
|
|
@ -1 +1,69 @@
|
|||
// TODO: write code
|
||||
import { Collection } from '../utils/collection.ts'
|
||||
import { Client, ClientOptions } from './client.ts'
|
||||
import EventEmitter from 'https://deno.land/std@0.74.0/node/events.ts'
|
||||
import { RESTManager } from './rest.ts'
|
||||
// import { GATEWAY_BOT } from '../types/endpoint.ts'
|
||||
// import { GatewayBotPayload } from '../types/gatewayBot.ts'
|
||||
|
||||
// TODO(DjDeveloperr)
|
||||
// I'm kinda confused; will continue on this later once
|
||||
// Deno namespace in Web Woker is stable!
|
||||
export interface ShardManagerOptions {
|
||||
client: Client | typeof Client
|
||||
token?: string
|
||||
intents?: number[]
|
||||
options?: ClientOptions
|
||||
shards: number
|
||||
}
|
||||
|
||||
export interface ShardManagerInitOptions {
|
||||
file: string
|
||||
token?: string
|
||||
intents?: number[]
|
||||
options?: ClientOptions
|
||||
shards?: number
|
||||
}
|
||||
|
||||
export class ShardManager extends EventEmitter {
|
||||
workers: Collection<string, Worker> = new Collection()
|
||||
token: string
|
||||
intents: number[]
|
||||
shardCount: number
|
||||
private readonly __client: Client
|
||||
|
||||
get rest(): RESTManager {
|
||||
return this.__client.rest
|
||||
}
|
||||
|
||||
constructor(options: ShardManagerOptions) {
|
||||
super()
|
||||
this.__client =
|
||||
options.client instanceof Client
|
||||
? options.client
|
||||
: // eslint-disable-next-line new-cap
|
||||
new options.client(options.options)
|
||||
|
||||
if (this.__client.token === undefined || options.token === undefined)
|
||||
throw new Error('Token should be provided when constructing ShardManager')
|
||||
if (this.__client.intents === undefined || options.intents === undefined)
|
||||
throw new Error(
|
||||
'Intents should be provided when constructing ShardManager'
|
||||
)
|
||||
|
||||
this.token = this.__client.token ?? options.token
|
||||
this.intents = this.__client.intents ?? options.intents
|
||||
this.shardCount = options.shards
|
||||
}
|
||||
|
||||
// static async init(): Promise<ShardManager> {}
|
||||
|
||||
// async start(): Promise<ShardManager> {
|
||||
// const info = ((await this.rest.get(
|
||||
// GATEWAY_BOT()
|
||||
// )) as unknown) as GatewayBotPayload
|
||||
|
||||
// const totalShards = this.__shardCount ?? info.shards
|
||||
|
||||
// return this
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -158,6 +158,7 @@ export type SlashCommandHandlerCallback = (interaction: Interaction) => any
|
|||
export interface SlashCommandHandler {
|
||||
name: string
|
||||
guild?: string
|
||||
parent?: string
|
||||
handler: SlashCommandHandlerCallback
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import { LL_IP, LL_PASS, LL_PORT, TOKEN } from './config.ts'
|
|||
import {
|
||||
Manager,
|
||||
Player
|
||||
} from 'https://raw.githubusercontent.com/DjDeveloperr/lavaclient-deno/master/mod.ts'
|
||||
} from 'https://raw.githubusercontent.com/Lavaclient/lavadeno/master/mod.ts'
|
||||
|
||||
export const nodes = [
|
||||
{
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
import { TOKEN } from './config.ts'
|
||||
|
||||
export const CMD = {
|
||||
name: 'blep',
|
||||
description: 'Send a random adorable animal photo',
|
||||
options: [
|
||||
{
|
||||
name: 'animal',
|
||||
description: 'The type of animal',
|
||||
type: 3,
|
||||
required: true,
|
||||
choices: [
|
||||
{
|
||||
name: 'Dog',
|
||||
value: 'animal_dog'
|
||||
},
|
||||
{
|
||||
name: 'Cat',
|
||||
value: 'animal_dog'
|
||||
},
|
||||
{
|
||||
name: 'Penguin',
|
||||
value: 'animal_penguin'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'only_smol',
|
||||
description: 'Whether to show only baby animals',
|
||||
type: 5,
|
||||
required: false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
// fetch('https://discord.com/api/v8/applications/783937840752099332/commands', {
|
||||
fetch(
|
||||
'https://discord.com/api/v8/applications/783937840752099332/guilds/783319033205751809/commands',
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify(CMD),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization:
|
||||
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
||||
'Bot ' + TOKEN
|
||||
}
|
||||
}
|
||||
)
|
||||
.then((r) => r.json())
|
||||
.then(console.log)
|
Loading…
Reference in a new issue