deploy built in support
This commit is contained in:
parent
62b2aa07de
commit
768fec7195
3 changed files with 166 additions and 69 deletions
|
@ -13,7 +13,6 @@ import { ActivityGame, ClientActivity } from '../types/presence.ts'
|
|||
import { Extension } from './extensions.ts'
|
||||
import { SlashClient } from './slashClient.ts'
|
||||
import { Interaction } from '../structures/slash.ts'
|
||||
import { SlashModule } from './slashModule.ts'
|
||||
import { ShardManager } from './shard.ts'
|
||||
import { Application } from '../structures/application.ts'
|
||||
import { Invite } from '../structures/invite.ts'
|
||||
|
@ -190,10 +189,10 @@ export class Client extends HarmonyEventEmitter<ClientEvents> {
|
|||
this.clientProperties =
|
||||
options.clientProperties === undefined
|
||||
? {
|
||||
os: Deno.build.os,
|
||||
browser: 'harmony',
|
||||
device: 'harmony'
|
||||
}
|
||||
os: Deno.build.os,
|
||||
browser: 'harmony',
|
||||
device: 'harmony'
|
||||
}
|
||||
: options.clientProperties
|
||||
|
||||
if (options.shard !== undefined) this.shard = options.shard
|
||||
|
@ -208,7 +207,7 @@ export class Client extends HarmonyEventEmitter<ClientEvents> {
|
|||
this.token = token
|
||||
this.debug('Info', 'Found token in ENV')
|
||||
}
|
||||
} catch (e) {}
|
||||
} catch (e) { }
|
||||
}
|
||||
|
||||
const restOptions: RESTOptions = {
|
||||
|
@ -436,59 +435,3 @@ export function event(name?: keyof ClientEvents) {
|
|||
client._decoratedEvents[key] = listener
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Slash Command handler */
|
||||
export function slash(name?: string, guild?: string) {
|
||||
return function (client: Client | SlashClient | SlashModule, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@slash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Sub-Slash Command handler */
|
||||
export function subslash(parent: string, name?: string, guild?: string) {
|
||||
return function (client: Client | SlashModule | SlashClient, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@subslash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
parent,
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Grouped Slash Command handler */
|
||||
export function groupslash(
|
||||
parent: string,
|
||||
group: string,
|
||||
name?: string,
|
||||
guild?: string
|
||||
) {
|
||||
return function (client: Client | SlashModule | SlashClient, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@groupslash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
group,
|
||||
parent,
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Guild } from '../structures/guild.ts'
|
||||
import type { Guild } from '../structures/guild.ts'
|
||||
import {
|
||||
Interaction,
|
||||
InteractionApplicationCommandResolved
|
||||
|
@ -14,11 +14,12 @@ import {
|
|||
SlashCommandPayload
|
||||
} from '../types/slash.ts'
|
||||
import { Collection } from '../utils/collection.ts'
|
||||
import { Client } from './client.ts'
|
||||
import type { Client } from './client.ts'
|
||||
import { RESTManager } from './rest.ts'
|
||||
import { SlashModule } from './slashModule.ts'
|
||||
import { verify as edverify } from 'https://deno.land/x/ed25519@1.0.1/mod.ts'
|
||||
import { User } from '../structures/user.ts'
|
||||
import { HarmonyEventEmitter } from "../utils/events.ts"
|
||||
|
||||
export class SlashCommand {
|
||||
slash: SlashCommandsManager
|
||||
|
@ -380,8 +381,14 @@ export interface SlashOptions {
|
|||
const encoder = new TextEncoder()
|
||||
const decoder = new TextDecoder('utf-8')
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
||||
export type SlashClientEvents = {
|
||||
interaction: [Interaction]
|
||||
interactionError: [Error]
|
||||
}
|
||||
|
||||
/** Slash Client represents an Interactions Client which can be used without Harmony Client. */
|
||||
export class SlashClient {
|
||||
export class SlashClient extends HarmonyEventEmitter<SlashClientEvents> {
|
||||
id: string | (() => string)
|
||||
client?: Client
|
||||
token?: string
|
||||
|
@ -401,6 +408,7 @@ export class SlashClient {
|
|||
}>
|
||||
|
||||
constructor(options: SlashOptions) {
|
||||
super()
|
||||
let id = options.id
|
||||
if (options.token !== undefined) id = atob(options.token?.split('.')[0])
|
||||
if (id === undefined)
|
||||
|
@ -435,8 +443,8 @@ export class SlashClient {
|
|||
: options.rest
|
||||
: options.client.rest
|
||||
|
||||
this.client?.on('interactionCreate', (interaction) =>
|
||||
this._process(interaction)
|
||||
this.client?.on('interactionCreate', async (interaction) =>
|
||||
await this._process(interaction)
|
||||
)
|
||||
|
||||
this.commands = new SlashCommandsManager(this)
|
||||
|
@ -506,7 +514,7 @@ export class SlashClient {
|
|||
}
|
||||
|
||||
/** Process an incoming Interaction */
|
||||
private _process(interaction: Interaction): void {
|
||||
private async _process(interaction: Interaction): Promise<void> {
|
||||
if (!this.enabled) return
|
||||
|
||||
if (
|
||||
|
@ -523,7 +531,10 @@ export class SlashClient {
|
|||
|
||||
if (cmd === undefined) return
|
||||
|
||||
cmd.handler(interaction)
|
||||
await this.emit('interaction', interaction)
|
||||
try { await cmd.handler(interaction) } catch (e) {
|
||||
await this.emit('interactionError', e)
|
||||
}
|
||||
}
|
||||
|
||||
/** Verify HTTP based Interaction */
|
||||
|
@ -672,3 +683,59 @@ export class SlashClient {
|
|||
return true
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Slash Command handler */
|
||||
export function slash(name?: string, guild?: string) {
|
||||
return function (client: Client | SlashClient | SlashModule, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@slash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Sub-Slash Command handler */
|
||||
export function subslash(parent: string, name?: string, guild?: string) {
|
||||
return function (client: Client | SlashModule | SlashClient, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@subslash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
parent,
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/** Decorator to create a Grouped Slash Command handler */
|
||||
export function groupslash(
|
||||
parent: string,
|
||||
group: string,
|
||||
name?: string,
|
||||
guild?: string
|
||||
) {
|
||||
return function (client: Client | SlashModule | SlashClient, prop: string) {
|
||||
if (client._decoratedSlash === undefined) client._decoratedSlash = []
|
||||
const item = (client as { [name: string]: any })[prop]
|
||||
if (typeof item !== 'function') {
|
||||
throw new Error('@groupslash decorator requires a function')
|
||||
} else
|
||||
client._decoratedSlash.push({
|
||||
group,
|
||||
parent,
|
||||
name: name ?? prop,
|
||||
guild,
|
||||
handler: item
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue