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 { SlashClient } from './slashClient.ts'
|
||||||
import { Interaction } from '../structures/slash.ts'
|
import { Interaction } from '../structures/slash.ts'
|
||||||
import { SlashModule } from './slashModule.ts'
|
import { SlashModule } from './slashModule.ts'
|
||||||
|
import type { ShardManager } from './shard.ts'
|
||||||
|
|
||||||
/** OS related properties sent with Gateway Identify */
|
/** OS related properties sent with Gateway Identify */
|
||||||
export interface ClientProperties {
|
export interface ClientProperties {
|
||||||
|
@ -93,6 +94,7 @@ export class Client extends EventEmitter {
|
||||||
_decoratedSlash?: Array<{
|
_decoratedSlash?: Array<{
|
||||||
name: string
|
name: string
|
||||||
guild?: string
|
guild?: string
|
||||||
|
parent?: string
|
||||||
handler: (interaction: Interaction) => any
|
handler: (interaction: Interaction) => any
|
||||||
}>
|
}>
|
||||||
|
|
||||||
|
@ -110,6 +112,11 @@ export class Client extends EventEmitter {
|
||||||
...args: Parameters<ClientEvents[K]>
|
...args: Parameters<ClientEvents[K]>
|
||||||
): boolean => this._untypedEmit(event, ...args)
|
): 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 = {}) {
|
constructor(options: ClientOptions = {}) {
|
||||||
super()
|
super()
|
||||||
this.token = options.token
|
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 {
|
export interface SlashCommandHandler {
|
||||||
name: string
|
name: string
|
||||||
guild?: string
|
guild?: string
|
||||||
|
parent?: string
|
||||||
handler: SlashCommandHandlerCallback
|
handler: SlashCommandHandlerCallback
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { LL_IP, LL_PASS, LL_PORT, TOKEN } from './config.ts'
|
||||||
import {
|
import {
|
||||||
Manager,
|
Manager,
|
||||||
Player
|
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 = [
|
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