feat(integrations|application): implementation
This commit is contained in:
parent
6e87aa2e83
commit
c1bce28334
6 changed files with 518 additions and 395 deletions
10
mod.ts
10
mod.ts
|
@ -4,6 +4,7 @@ export * from './src/models/rest.ts'
|
||||||
export * from './src/models/cacheAdapter.ts'
|
export * from './src/models/cacheAdapter.ts'
|
||||||
export * from './src/models/shard.ts'
|
export * from './src/models/shard.ts'
|
||||||
export * from './src/models/command.ts'
|
export * from './src/models/command.ts'
|
||||||
|
export * from './src/models/extensions.ts'
|
||||||
export * from './src/models/commandClient.ts'
|
export * from './src/models/commandClient.ts'
|
||||||
export * from './src/managers/base.ts'
|
export * from './src/managers/base.ts'
|
||||||
export * from './src/managers/baseChild.ts'
|
export * from './src/managers/baseChild.ts'
|
||||||
|
@ -12,10 +13,13 @@ export * from './src/managers/emojis.ts'
|
||||||
export * from './src/managers/gatewayCache.ts'
|
export * from './src/managers/gatewayCache.ts'
|
||||||
export * from './src/managers/guildChannels.ts'
|
export * from './src/managers/guildChannels.ts'
|
||||||
export * from './src/managers/guilds.ts'
|
export * from './src/managers/guilds.ts'
|
||||||
|
export * from './src/managers/guildChannels.ts'
|
||||||
|
export * from './src/managers/guildEmojis.ts'
|
||||||
export * from './src/managers/members.ts'
|
export * from './src/managers/members.ts'
|
||||||
export * from './src/managers/messages.ts'
|
export * from './src/managers/messages.ts'
|
||||||
export * from './src/managers/roles.ts'
|
export * from './src/managers/roles.ts'
|
||||||
export * from './src/managers/users.ts'
|
export * from './src/managers/users.ts'
|
||||||
|
export * from './src/structures/application.ts'
|
||||||
export * from './src/structures/base.ts'
|
export * from './src/structures/base.ts'
|
||||||
export * from './src/structures/cdn.ts'
|
export * from './src/structures/cdn.ts'
|
||||||
export * from './src/structures/channel.ts'
|
export * from './src/structures/channel.ts'
|
||||||
|
@ -37,6 +41,7 @@ export * from './src/structures/snowflake.ts'
|
||||||
export * from './src/structures/textChannel.ts'
|
export * from './src/structures/textChannel.ts'
|
||||||
export * from './src/structures/user.ts'
|
export * from './src/structures/user.ts'
|
||||||
export * from './src/structures/webhook.ts'
|
export * from './src/structures/webhook.ts'
|
||||||
|
export * from './src/types/application.ts'
|
||||||
export * from './src/types/cdn.ts'
|
export * from './src/types/cdn.ts'
|
||||||
export * from './src/types/channel.ts'
|
export * from './src/types/channel.ts'
|
||||||
export * from './src/types/emoji.ts'
|
export * from './src/types/emoji.ts'
|
||||||
|
@ -55,3 +60,8 @@ export * from './src/types/voice.ts'
|
||||||
export * from './src/types/webhook.ts'
|
export * from './src/types/webhook.ts'
|
||||||
export * from './src/utils/collection.ts'
|
export * from './src/utils/collection.ts'
|
||||||
export * from './src/utils/intents.ts'
|
export * from './src/utils/intents.ts'
|
||||||
|
export * from './src/utils/buildInfo.ts'
|
||||||
|
export * from './src/utils/permissions.ts'
|
||||||
|
export * from './src/utils/userFlags.ts'
|
||||||
|
export * from './src/utils/bitfield.ts'
|
||||||
|
export * from './src/utils/getChannelByType.ts'
|
|
@ -12,6 +12,7 @@ import {
|
||||||
} from '../structures/presence.ts'
|
} from '../structures/presence.ts'
|
||||||
import { EmojisManager } from '../managers/emojis.ts'
|
import { EmojisManager } from '../managers/emojis.ts'
|
||||||
import { ActivityGame, ClientActivity } from "../types/presence.ts"
|
import { ActivityGame, ClientActivity } from "../types/presence.ts"
|
||||||
|
// import { Application } from "../../mod.ts"
|
||||||
|
|
||||||
/** Some Client Options to modify behaviour */
|
/** Some Client Options to modify behaviour */
|
||||||
export interface ClientOptions {
|
export interface ClientOptions {
|
||||||
|
@ -103,6 +104,9 @@ export class Client extends EventEmitter {
|
||||||
this.emit('debug', `[${tag}] ${msg}`)
|
this.emit('debug', `[${tag}] ${msg}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(DjDeveloperr): Implement this
|
||||||
|
// fetchApplication(): Promise<Application>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is used for connect to discord.
|
* This function is used for connect to discord.
|
||||||
* @param token Your token. This is required.
|
* @param token Your token. This is required.
|
||||||
|
|
24
src/structures/application.ts
Normal file
24
src/structures/application.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { Client } from "../models/client.ts";
|
||||||
|
import { ApplicationPayload } from "../types/application.ts";
|
||||||
|
import { Base } from "./base.ts";
|
||||||
|
import { User } from "./user.ts";
|
||||||
|
|
||||||
|
export class Application extends Base {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
icon: string
|
||||||
|
description: string
|
||||||
|
summary: string
|
||||||
|
bot?: User
|
||||||
|
|
||||||
|
constructor(client: Client, data: ApplicationPayload) {
|
||||||
|
super(client, data)
|
||||||
|
|
||||||
|
this.id = data.id
|
||||||
|
this.name = data.name
|
||||||
|
this.icon = data.icon
|
||||||
|
this.description = data.description
|
||||||
|
this.summary = data.summary
|
||||||
|
this.bot = data.bot !== undefined ? new User(client, data.bot) : undefined
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import { Client } from '../models/client.ts'
|
import { Client } from '../models/client.ts'
|
||||||
import { GuildFeatures, GuildPayload } from '../types/guild.ts'
|
import { GuildFeatures, GuildIntegrationPayload, GuildPayload, IntegrationAccountPayload, IntegrationExpireBehavior } from '../types/guild.ts'
|
||||||
import { PresenceUpdatePayload } from '../types/gateway.ts'
|
import { PresenceUpdatePayload } from '../types/gateway.ts'
|
||||||
import { Base } from './base.ts'
|
import { Base } from './base.ts'
|
||||||
import { VoiceState } from './voiceState.ts'
|
import { VoiceState } from './voiceState.ts'
|
||||||
|
@ -9,6 +9,9 @@ import { MembersManager } from '../managers/members.ts'
|
||||||
import { Role } from './role.ts'
|
import { Role } from './role.ts'
|
||||||
import { GuildEmojisManager } from '../managers/guildEmojis.ts'
|
import { GuildEmojisManager } from '../managers/guildEmojis.ts'
|
||||||
import { Member } from "./member.ts"
|
import { Member } from "./member.ts"
|
||||||
|
import { User } from "./user.ts"
|
||||||
|
import { Application } from "./application.ts"
|
||||||
|
import { GUILD_INTEGRATIONS } from "../types/endpoint.ts"
|
||||||
|
|
||||||
export class Guild extends Base {
|
export class Guild extends Base {
|
||||||
id: string
|
id: string
|
||||||
|
@ -213,7 +216,7 @@ export class Guild extends Base {
|
||||||
}
|
}
|
||||||
|
|
||||||
async getEveryoneRole (): Promise<Role> {
|
async getEveryoneRole (): Promise<Role> {
|
||||||
return (await this.roles.array().then(arr => arr?.sort((b, a) => a.position - b.position)[0]) as any) as Role
|
return (await this.roles.get(this.id) as unknown) as Role
|
||||||
}
|
}
|
||||||
|
|
||||||
async me(): Promise<Member> {
|
async me(): Promise<Member> {
|
||||||
|
@ -221,4 +224,47 @@ export class Guild extends Base {
|
||||||
if (get === undefined) throw new Error('Guild#me is not cached')
|
if (get === undefined) throw new Error('Guild#me is not cached')
|
||||||
return get
|
return get
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fetchIntegrations(): Promise<GuildIntegration[]> {
|
||||||
|
const raw = await this.client.rest.get(GUILD_INTEGRATIONS(this.id)) as GuildIntegrationPayload[]
|
||||||
|
return raw.map(e => new GuildIntegration(this.client, e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GuildIntegration extends Base {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
enabled: boolean
|
||||||
|
syncing?: boolean
|
||||||
|
roleID?: string
|
||||||
|
enableEmoticons?: boolean
|
||||||
|
expireBehaviour?: IntegrationExpireBehavior
|
||||||
|
expireGracePeriod?: number
|
||||||
|
user?: User
|
||||||
|
account: IntegrationAccountPayload
|
||||||
|
syncedAt?: string // Actually a ISO Timestamp, but we parse in constructor'
|
||||||
|
subscriberCount?: number
|
||||||
|
revoked?: boolean
|
||||||
|
application?: Application
|
||||||
|
|
||||||
|
constructor(client: Client, data: GuildIntegrationPayload) {
|
||||||
|
super(client, data)
|
||||||
|
|
||||||
|
this.id = data.id
|
||||||
|
this.name= data.name
|
||||||
|
this.type = data.type
|
||||||
|
this.enabled = data.enabled
|
||||||
|
this.syncing = data.syncing
|
||||||
|
this.roleID = data.role_id
|
||||||
|
this.enableEmoticons = data.enable_emoticons
|
||||||
|
this.expireBehaviour = data.expire_behaviour
|
||||||
|
this.expireGracePeriod = data.expire_grace_period
|
||||||
|
this.user = data.user !== undefined ? new User(client, data.user) : undefined
|
||||||
|
this.account = data.account
|
||||||
|
this.syncedAt = data.synced_at
|
||||||
|
this.subscriberCount = data.subscriber_count
|
||||||
|
this.revoked = data.revoked
|
||||||
|
this.application = data.application !== undefined ? new Application(client, data.application) : undefined
|
||||||
|
}
|
||||||
}
|
}
|
10
src/types/application.ts
Normal file
10
src/types/application.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { UserPayload } from "./user.ts";
|
||||||
|
|
||||||
|
export interface ApplicationPayload {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
icon: string
|
||||||
|
description: string
|
||||||
|
summary: string
|
||||||
|
bot?: UserPayload
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { ApplicationPayload } from "./application.ts"
|
||||||
import { ChannelPayload } from './channel.ts'
|
import { ChannelPayload } from './channel.ts'
|
||||||
import { EmojiPayload } from './emoji.ts'
|
import { EmojiPayload } from './emoji.ts'
|
||||||
import { PresenceUpdatePayload } from './gateway.ts'
|
import { PresenceUpdatePayload } from './gateway.ts'
|
||||||
|
@ -112,3 +113,31 @@ export type GuildFeatures =
|
||||||
| 'FEATURABLE'
|
| 'FEATURABLE'
|
||||||
| 'ANIMATED_ICON'
|
| 'ANIMATED_ICON'
|
||||||
| 'BANNER'
|
| 'BANNER'
|
||||||
|
|
||||||
|
export enum IntegrationExpireBehavior {
|
||||||
|
REMOVE_ROLE = 0,
|
||||||
|
KICK = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IntegrationAccountPayload {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GuildIntegrationPayload {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
enabled: boolean
|
||||||
|
syncing?: boolean
|
||||||
|
role_id?: string
|
||||||
|
enable_emoticons?: boolean
|
||||||
|
expire_behaviour?: IntegrationExpireBehavior
|
||||||
|
expire_grace_period?: number
|
||||||
|
user?: UserPayload
|
||||||
|
account: IntegrationAccountPayload
|
||||||
|
synced_at?: string // Actually a ISO Timestamp, but we parse in constructor'
|
||||||
|
subscriber_count?: number
|
||||||
|
revoked?: boolean
|
||||||
|
application?: ApplicationPayload
|
||||||
|
}
|
Loading…
Reference in a new issue