feat(integrations|application): implementation
This commit is contained in:
parent
6e87aa2e83
commit
c1bce28334
6 changed files with 518 additions and 395 deletions
124
mod.ts
124
mod.ts
|
@ -1,57 +1,67 @@
|
|||
export * from './src/gateway/index.ts'
|
||||
export * from './src/models/client.ts'
|
||||
export * from './src/models/rest.ts'
|
||||
export * from './src/models/cacheAdapter.ts'
|
||||
export * from './src/models/shard.ts'
|
||||
export * from './src/models/command.ts'
|
||||
export * from './src/models/commandClient.ts'
|
||||
export * from './src/managers/base.ts'
|
||||
export * from './src/managers/baseChild.ts'
|
||||
export * from './src/managers/channels.ts'
|
||||
export * from './src/managers/emojis.ts'
|
||||
export * from './src/managers/gatewayCache.ts'
|
||||
export * from './src/managers/guildChannels.ts'
|
||||
export * from './src/managers/guilds.ts'
|
||||
export * from './src/managers/members.ts'
|
||||
export * from './src/managers/messages.ts'
|
||||
export * from './src/managers/roles.ts'
|
||||
export * from './src/managers/users.ts'
|
||||
export * from './src/structures/base.ts'
|
||||
export * from './src/structures/cdn.ts'
|
||||
export * from './src/structures/channel.ts'
|
||||
export * from './src/structures/dmChannel.ts'
|
||||
export * from './src/structures/embed.ts'
|
||||
export * from './src/structures/emoji.ts'
|
||||
export * from './src/structures/groupChannel.ts'
|
||||
export * from './src/structures/guild.ts'
|
||||
export * from './src/structures/guildCategoryChannel.ts'
|
||||
export * from './src/structures/guildNewsChannel.ts'
|
||||
export * from './src/structures/guildVoiceChannel.ts'
|
||||
export * from './src/structures/invite.ts'
|
||||
export * from './src/structures/member.ts'
|
||||
export * from './src/structures/message.ts'
|
||||
export * from './src/structures/messageMentions.ts'
|
||||
export * from './src/structures/presence.ts'
|
||||
export * from './src/structures/role.ts'
|
||||
export * from './src/structures/snowflake.ts'
|
||||
export * from './src/structures/textChannel.ts'
|
||||
export * from './src/structures/user.ts'
|
||||
export * from './src/structures/webhook.ts'
|
||||
export * from './src/types/cdn.ts'
|
||||
export * from './src/types/channel.ts'
|
||||
export * from './src/types/emoji.ts'
|
||||
export * from './src/types/endpoint.ts'
|
||||
export * from './src/types/gateway.ts'
|
||||
export * from './src/types/gatewayBot.ts'
|
||||
export * from './src/types/gatewayResponse.ts'
|
||||
export * from './src/types/guild.ts'
|
||||
export * from './src/types/invite.ts'
|
||||
export * from './src/types/permissionFlags.ts'
|
||||
export * from './src/types/presence.ts'
|
||||
export * from './src/types/role.ts'
|
||||
export * from './src/types/template.ts'
|
||||
export * from './src/types/user.ts'
|
||||
export * from './src/types/voice.ts'
|
||||
export * from './src/types/webhook.ts'
|
||||
export * from './src/utils/collection.ts'
|
||||
export * from './src/utils/intents.ts'
|
||||
export * from './src/gateway/index.ts'
|
||||
export * from './src/models/client.ts'
|
||||
export * from './src/models/rest.ts'
|
||||
export * from './src/models/cacheAdapter.ts'
|
||||
export * from './src/models/shard.ts'
|
||||
export * from './src/models/command.ts'
|
||||
export * from './src/models/extensions.ts'
|
||||
export * from './src/models/commandClient.ts'
|
||||
export * from './src/managers/base.ts'
|
||||
export * from './src/managers/baseChild.ts'
|
||||
export * from './src/managers/channels.ts'
|
||||
export * from './src/managers/emojis.ts'
|
||||
export * from './src/managers/gatewayCache.ts'
|
||||
export * from './src/managers/guildChannels.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/messages.ts'
|
||||
export * from './src/managers/roles.ts'
|
||||
export * from './src/managers/users.ts'
|
||||
export * from './src/structures/application.ts'
|
||||
export * from './src/structures/base.ts'
|
||||
export * from './src/structures/cdn.ts'
|
||||
export * from './src/structures/channel.ts'
|
||||
export * from './src/structures/dmChannel.ts'
|
||||
export * from './src/structures/embed.ts'
|
||||
export * from './src/structures/emoji.ts'
|
||||
export * from './src/structures/groupChannel.ts'
|
||||
export * from './src/structures/guild.ts'
|
||||
export * from './src/structures/guildCategoryChannel.ts'
|
||||
export * from './src/structures/guildNewsChannel.ts'
|
||||
export * from './src/structures/guildVoiceChannel.ts'
|
||||
export * from './src/structures/invite.ts'
|
||||
export * from './src/structures/member.ts'
|
||||
export * from './src/structures/message.ts'
|
||||
export * from './src/structures/messageMentions.ts'
|
||||
export * from './src/structures/presence.ts'
|
||||
export * from './src/structures/role.ts'
|
||||
export * from './src/structures/snowflake.ts'
|
||||
export * from './src/structures/textChannel.ts'
|
||||
export * from './src/structures/user.ts'
|
||||
export * from './src/structures/webhook.ts'
|
||||
export * from './src/types/application.ts'
|
||||
export * from './src/types/cdn.ts'
|
||||
export * from './src/types/channel.ts'
|
||||
export * from './src/types/emoji.ts'
|
||||
export * from './src/types/endpoint.ts'
|
||||
export * from './src/types/gateway.ts'
|
||||
export * from './src/types/gatewayBot.ts'
|
||||
export * from './src/types/gatewayResponse.ts'
|
||||
export * from './src/types/guild.ts'
|
||||
export * from './src/types/invite.ts'
|
||||
export * from './src/types/permissionFlags.ts'
|
||||
export * from './src/types/presence.ts'
|
||||
export * from './src/types/role.ts'
|
||||
export * from './src/types/template.ts'
|
||||
export * from './src/types/user.ts'
|
||||
export * from './src/types/voice.ts'
|
||||
export * from './src/types/webhook.ts'
|
||||
export * from './src/utils/collection.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'
|
||||
import { EmojisManager } from '../managers/emojis.ts'
|
||||
import { ActivityGame, ClientActivity } from "../types/presence.ts"
|
||||
// import { Application } from "../../mod.ts"
|
||||
|
||||
/** Some Client Options to modify behaviour */
|
||||
export interface ClientOptions {
|
||||
|
@ -103,6 +104,9 @@ export class Client extends EventEmitter {
|
|||
this.emit('debug', `[${tag}] ${msg}`)
|
||||
}
|
||||
|
||||
// TODO(DjDeveloperr): Implement this
|
||||
// fetchApplication(): Promise<Application>
|
||||
|
||||
/**
|
||||
* This function is used for connect to discord.
|
||||
* @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,224 +1,270 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { GuildFeatures, GuildPayload } from '../types/guild.ts'
|
||||
import { PresenceUpdatePayload } from '../types/gateway.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { VoiceState } from './voiceState.ts'
|
||||
import { RolesManager } from '../managers/roles.ts'
|
||||
import { GuildChannelsManager } from '../managers/guildChannels.ts'
|
||||
import { MembersManager } from '../managers/members.ts'
|
||||
import { Role } from './role.ts'
|
||||
import { GuildEmojisManager } from '../managers/guildEmojis.ts'
|
||||
import { Member } from "./member.ts"
|
||||
|
||||
export class Guild extends Base {
|
||||
id: string
|
||||
name?: string
|
||||
icon?: string
|
||||
iconHash?: string
|
||||
splash?: string
|
||||
discoverySplash?: string
|
||||
owner?: boolean
|
||||
ownerID?: string
|
||||
permissions?: string
|
||||
region?: string
|
||||
afkChannelID?: string
|
||||
afkTimeout?: number
|
||||
widgetEnabled?: boolean
|
||||
widgetChannelID?: string
|
||||
verificationLevel?: string
|
||||
defaultMessageNotifications?: string
|
||||
explicitContentFilter?: string
|
||||
roles: RolesManager
|
||||
emojis: GuildEmojisManager
|
||||
features?: GuildFeatures[]
|
||||
mfaLevel?: string
|
||||
applicationID?: string
|
||||
systemChannelID?: string
|
||||
systemChannelFlags?: string
|
||||
rulesChannelID?: string
|
||||
joinedAt?: string
|
||||
large?: boolean
|
||||
unavailable: boolean
|
||||
memberCount?: number
|
||||
voiceStates?: VoiceState[]
|
||||
members: MembersManager
|
||||
channels: GuildChannelsManager
|
||||
presences?: PresenceUpdatePayload[]
|
||||
maxPresences?: number
|
||||
maxMembers?: number
|
||||
vanityURLCode?: string
|
||||
description?: string
|
||||
banner?: string
|
||||
premiumTier?: number
|
||||
premiumSubscriptionCount?: number
|
||||
preferredLocale?: string
|
||||
publicUpdatesChannelID?: string
|
||||
maxVideoChannelUsers?: number
|
||||
approximateNumberCount?: number
|
||||
approximatePresenceCount?: number
|
||||
|
||||
constructor (client: Client, data: GuildPayload) {
|
||||
super(client, data)
|
||||
this.id = data.id
|
||||
this.unavailable = data.unavailable
|
||||
this.members = new MembersManager(this.client, this)
|
||||
this.channels = new GuildChannelsManager(
|
||||
this.client,
|
||||
this.client.channels,
|
||||
this
|
||||
)
|
||||
this.roles = new RolesManager(this.client, this)
|
||||
this.emojis = new GuildEmojisManager(this.client, this.client.emojis, this)
|
||||
|
||||
if (!this.unavailable) {
|
||||
this.name = data.name
|
||||
this.icon = data.icon
|
||||
this.iconHash = data.icon_hash
|
||||
this.splash = data.splash
|
||||
this.discoverySplash = data.discovery_splash
|
||||
this.owner = data.owner
|
||||
this.ownerID = data.owner_id
|
||||
this.permissions = data.permissions
|
||||
this.region = data.region
|
||||
this.afkTimeout = data.afk_timeout
|
||||
this.afkChannelID = data.afk_channel_id
|
||||
this.widgetEnabled = data.widget_enabled
|
||||
this.widgetChannelID = data.widget_channel_id
|
||||
this.verificationLevel = data.verification_level
|
||||
this.defaultMessageNotifications = data.default_message_notifications
|
||||
this.explicitContentFilter = data.explicit_content_filter
|
||||
// this.roles = data.roles.map(
|
||||
// v => cache.get('role', v.id) ?? new Role(client, v)
|
||||
// )
|
||||
// data.roles.forEach(role => {
|
||||
// this.roles.set(role.id, new Role(client, role))
|
||||
// })
|
||||
// this.emojis = data.emojis.map(
|
||||
// v => cache.get('emoji', v.id) ?? new Emoji(client, v)
|
||||
// )
|
||||
this.features = data.features
|
||||
this.mfaLevel = data.mfa_level
|
||||
this.systemChannelID = data.system_channel_id
|
||||
this.systemChannelFlags = data.system_channel_flags
|
||||
this.rulesChannelID = data.rules_channel_id
|
||||
this.joinedAt = data.joined_at
|
||||
this.large = data.large
|
||||
this.memberCount = data.member_count
|
||||
// TODO: Cache in Gateway Event code
|
||||
// this.voiceStates = data.voice_states?.map(
|
||||
// v =>
|
||||
// cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ??
|
||||
// new VoiceState(client, v)
|
||||
// )
|
||||
// this.members = data.members?.map(
|
||||
// v =>
|
||||
// cache.get('member', `${this.id}:${v.user.id}`) ??
|
||||
// new Member(client, v)
|
||||
// )
|
||||
// this.channels = data.channels?.map(
|
||||
// v => cache.get('channel', v.id) ?? getChannelByType(this.client, v)
|
||||
// )
|
||||
this.presences = data.presences
|
||||
this.maxPresences = data.max_presences
|
||||
this.maxMembers = data.max_members
|
||||
this.vanityURLCode = data.vanity_url_code
|
||||
this.description = data.description
|
||||
this.banner = data.banner
|
||||
this.premiumTier = data.premium_tier
|
||||
this.premiumSubscriptionCount = data.premium_subscription_count
|
||||
this.preferredLocale = data.preferred_locale
|
||||
this.publicUpdatesChannelID = data.public_updates_channel_id
|
||||
this.maxVideoChannelUsers = data.max_video_channel_users
|
||||
this.approximateNumberCount = data.approximate_number_count
|
||||
this.approximatePresenceCount = data.approximate_presence_count
|
||||
}
|
||||
}
|
||||
|
||||
protected readFromData (data: GuildPayload): void {
|
||||
super.readFromData(data)
|
||||
this.id = data.id ?? this.id
|
||||
this.unavailable = data.unavailable ?? this.unavailable
|
||||
|
||||
if (!this.unavailable) {
|
||||
this.name = data.name ?? this.name
|
||||
this.icon = data.icon ?? this.icon
|
||||
this.iconHash = data.icon_hash ?? this.iconHash
|
||||
this.splash = data.splash ?? this.splash
|
||||
this.discoverySplash = data.discovery_splash ?? this.discoverySplash
|
||||
this.owner = data.owner ?? this.owner
|
||||
this.ownerID = data.owner_id ?? this.ownerID
|
||||
this.permissions = data.permissions ?? this.permissions
|
||||
this.region = data.region ?? this.region
|
||||
this.afkTimeout = data.afk_timeout ?? this.afkTimeout
|
||||
this.afkChannelID = data.afk_channel_id ?? this.afkChannelID
|
||||
this.widgetEnabled = data.widget_enabled ?? this.widgetEnabled
|
||||
this.widgetChannelID = data.widget_channel_id ?? this.widgetChannelID
|
||||
this.verificationLevel = data.verification_level ?? this.verificationLevel
|
||||
this.defaultMessageNotifications =
|
||||
data.default_message_notifications ?? this.defaultMessageNotifications
|
||||
this.explicitContentFilter =
|
||||
data.explicit_content_filter ?? this.explicitContentFilter
|
||||
// this.roles =
|
||||
// data.roles.map(
|
||||
// v => cache.get('role', v.id) ?? new Role(this.client, v)
|
||||
// ) ?? this.roles
|
||||
// this.emojis =
|
||||
// data.emojis.map(
|
||||
// v => cache.get('emoji', v.id) ?? new Emoji(this.client, v)
|
||||
// ) ?? this.emojis
|
||||
this.features = data.features ?? this.features
|
||||
this.mfaLevel = data.mfa_level ?? this.mfaLevel
|
||||
this.systemChannelID = data.system_channel_id ?? this.systemChannelID
|
||||
this.systemChannelFlags =
|
||||
data.system_channel_flags ?? this.systemChannelFlags
|
||||
this.rulesChannelID = data.rules_channel_id ?? this.rulesChannelID
|
||||
this.joinedAt = data.joined_at ?? this.joinedAt
|
||||
this.large = data.large ?? this.large
|
||||
this.memberCount = data.member_count ?? this.memberCount
|
||||
// this.voiceStates =
|
||||
// data.voice_states?.map(
|
||||
// v =>
|
||||
// cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ??
|
||||
// new VoiceState(this.client, v)
|
||||
// ) ?? this.voiceStates
|
||||
// this.members =
|
||||
// data.members?.map(
|
||||
// v =>
|
||||
// cache.get('member', `${this.id}:${v.user.id}`) ??
|
||||
// new Member(this.client, v)
|
||||
// ) ?? this.members
|
||||
// this.channels =
|
||||
// data.channels?.map(
|
||||
// v => cache.get('channel', v.id) ?? getChannelByType(this.client, v, this)
|
||||
// ) ?? this.members
|
||||
this.presences = data.presences ?? this.presences
|
||||
this.maxPresences = data.max_presences ?? this.maxPresences
|
||||
this.maxMembers = data.max_members ?? this.maxMembers
|
||||
this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode
|
||||
this.description = data.description ?? this.description
|
||||
this.banner = data.banner ?? this.banner
|
||||
this.premiumTier = data.premium_tier ?? this.premiumTier
|
||||
this.premiumSubscriptionCount =
|
||||
data.premium_subscription_count ?? this.premiumSubscriptionCount
|
||||
this.preferredLocale = data.preferred_locale ?? this.preferredLocale
|
||||
this.publicUpdatesChannelID =
|
||||
data.public_updates_channel_id ?? this.publicUpdatesChannelID
|
||||
this.maxVideoChannelUsers =
|
||||
data.max_video_channel_users ?? this.maxVideoChannelUsers
|
||||
this.approximateNumberCount =
|
||||
data.approximate_number_count ?? this.approximateNumberCount
|
||||
this.approximatePresenceCount =
|
||||
data.approximate_presence_count ?? this.approximatePresenceCount
|
||||
}
|
||||
}
|
||||
|
||||
async getEveryoneRole (): Promise<Role> {
|
||||
return (await this.roles.array().then(arr => arr?.sort((b, a) => a.position - b.position)[0]) as any) as Role
|
||||
}
|
||||
|
||||
async me(): Promise<Member> {
|
||||
const get = await this.members.get(this.client.user?.id as string)
|
||||
if (get === undefined) throw new Error('Guild#me is not cached')
|
||||
return get
|
||||
}
|
||||
}
|
||||
import { Client } from '../models/client.ts'
|
||||
import { GuildFeatures, GuildIntegrationPayload, GuildPayload, IntegrationAccountPayload, IntegrationExpireBehavior } from '../types/guild.ts'
|
||||
import { PresenceUpdatePayload } from '../types/gateway.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { VoiceState } from './voiceState.ts'
|
||||
import { RolesManager } from '../managers/roles.ts'
|
||||
import { GuildChannelsManager } from '../managers/guildChannels.ts'
|
||||
import { MembersManager } from '../managers/members.ts'
|
||||
import { Role } from './role.ts'
|
||||
import { GuildEmojisManager } from '../managers/guildEmojis.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 {
|
||||
id: string
|
||||
name?: string
|
||||
icon?: string
|
||||
iconHash?: string
|
||||
splash?: string
|
||||
discoverySplash?: string
|
||||
owner?: boolean
|
||||
ownerID?: string
|
||||
permissions?: string
|
||||
region?: string
|
||||
afkChannelID?: string
|
||||
afkTimeout?: number
|
||||
widgetEnabled?: boolean
|
||||
widgetChannelID?: string
|
||||
verificationLevel?: string
|
||||
defaultMessageNotifications?: string
|
||||
explicitContentFilter?: string
|
||||
roles: RolesManager
|
||||
emojis: GuildEmojisManager
|
||||
features?: GuildFeatures[]
|
||||
mfaLevel?: string
|
||||
applicationID?: string
|
||||
systemChannelID?: string
|
||||
systemChannelFlags?: string
|
||||
rulesChannelID?: string
|
||||
joinedAt?: string
|
||||
large?: boolean
|
||||
unavailable: boolean
|
||||
memberCount?: number
|
||||
voiceStates?: VoiceState[]
|
||||
members: MembersManager
|
||||
channels: GuildChannelsManager
|
||||
presences?: PresenceUpdatePayload[]
|
||||
maxPresences?: number
|
||||
maxMembers?: number
|
||||
vanityURLCode?: string
|
||||
description?: string
|
||||
banner?: string
|
||||
premiumTier?: number
|
||||
premiumSubscriptionCount?: number
|
||||
preferredLocale?: string
|
||||
publicUpdatesChannelID?: string
|
||||
maxVideoChannelUsers?: number
|
||||
approximateNumberCount?: number
|
||||
approximatePresenceCount?: number
|
||||
|
||||
constructor (client: Client, data: GuildPayload) {
|
||||
super(client, data)
|
||||
this.id = data.id
|
||||
this.unavailable = data.unavailable
|
||||
this.members = new MembersManager(this.client, this)
|
||||
this.channels = new GuildChannelsManager(
|
||||
this.client,
|
||||
this.client.channels,
|
||||
this
|
||||
)
|
||||
this.roles = new RolesManager(this.client, this)
|
||||
this.emojis = new GuildEmojisManager(this.client, this.client.emojis, this)
|
||||
|
||||
if (!this.unavailable) {
|
||||
this.name = data.name
|
||||
this.icon = data.icon
|
||||
this.iconHash = data.icon_hash
|
||||
this.splash = data.splash
|
||||
this.discoverySplash = data.discovery_splash
|
||||
this.owner = data.owner
|
||||
this.ownerID = data.owner_id
|
||||
this.permissions = data.permissions
|
||||
this.region = data.region
|
||||
this.afkTimeout = data.afk_timeout
|
||||
this.afkChannelID = data.afk_channel_id
|
||||
this.widgetEnabled = data.widget_enabled
|
||||
this.widgetChannelID = data.widget_channel_id
|
||||
this.verificationLevel = data.verification_level
|
||||
this.defaultMessageNotifications = data.default_message_notifications
|
||||
this.explicitContentFilter = data.explicit_content_filter
|
||||
// this.roles = data.roles.map(
|
||||
// v => cache.get('role', v.id) ?? new Role(client, v)
|
||||
// )
|
||||
// data.roles.forEach(role => {
|
||||
// this.roles.set(role.id, new Role(client, role))
|
||||
// })
|
||||
// this.emojis = data.emojis.map(
|
||||
// v => cache.get('emoji', v.id) ?? new Emoji(client, v)
|
||||
// )
|
||||
this.features = data.features
|
||||
this.mfaLevel = data.mfa_level
|
||||
this.systemChannelID = data.system_channel_id
|
||||
this.systemChannelFlags = data.system_channel_flags
|
||||
this.rulesChannelID = data.rules_channel_id
|
||||
this.joinedAt = data.joined_at
|
||||
this.large = data.large
|
||||
this.memberCount = data.member_count
|
||||
// TODO: Cache in Gateway Event code
|
||||
// this.voiceStates = data.voice_states?.map(
|
||||
// v =>
|
||||
// cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ??
|
||||
// new VoiceState(client, v)
|
||||
// )
|
||||
// this.members = data.members?.map(
|
||||
// v =>
|
||||
// cache.get('member', `${this.id}:${v.user.id}`) ??
|
||||
// new Member(client, v)
|
||||
// )
|
||||
// this.channels = data.channels?.map(
|
||||
// v => cache.get('channel', v.id) ?? getChannelByType(this.client, v)
|
||||
// )
|
||||
this.presences = data.presences
|
||||
this.maxPresences = data.max_presences
|
||||
this.maxMembers = data.max_members
|
||||
this.vanityURLCode = data.vanity_url_code
|
||||
this.description = data.description
|
||||
this.banner = data.banner
|
||||
this.premiumTier = data.premium_tier
|
||||
this.premiumSubscriptionCount = data.premium_subscription_count
|
||||
this.preferredLocale = data.preferred_locale
|
||||
this.publicUpdatesChannelID = data.public_updates_channel_id
|
||||
this.maxVideoChannelUsers = data.max_video_channel_users
|
||||
this.approximateNumberCount = data.approximate_number_count
|
||||
this.approximatePresenceCount = data.approximate_presence_count
|
||||
}
|
||||
}
|
||||
|
||||
protected readFromData (data: GuildPayload): void {
|
||||
super.readFromData(data)
|
||||
this.id = data.id ?? this.id
|
||||
this.unavailable = data.unavailable ?? this.unavailable
|
||||
|
||||
if (!this.unavailable) {
|
||||
this.name = data.name ?? this.name
|
||||
this.icon = data.icon ?? this.icon
|
||||
this.iconHash = data.icon_hash ?? this.iconHash
|
||||
this.splash = data.splash ?? this.splash
|
||||
this.discoverySplash = data.discovery_splash ?? this.discoverySplash
|
||||
this.owner = data.owner ?? this.owner
|
||||
this.ownerID = data.owner_id ?? this.ownerID
|
||||
this.permissions = data.permissions ?? this.permissions
|
||||
this.region = data.region ?? this.region
|
||||
this.afkTimeout = data.afk_timeout ?? this.afkTimeout
|
||||
this.afkChannelID = data.afk_channel_id ?? this.afkChannelID
|
||||
this.widgetEnabled = data.widget_enabled ?? this.widgetEnabled
|
||||
this.widgetChannelID = data.widget_channel_id ?? this.widgetChannelID
|
||||
this.verificationLevel = data.verification_level ?? this.verificationLevel
|
||||
this.defaultMessageNotifications =
|
||||
data.default_message_notifications ?? this.defaultMessageNotifications
|
||||
this.explicitContentFilter =
|
||||
data.explicit_content_filter ?? this.explicitContentFilter
|
||||
// this.roles =
|
||||
// data.roles.map(
|
||||
// v => cache.get('role', v.id) ?? new Role(this.client, v)
|
||||
// ) ?? this.roles
|
||||
// this.emojis =
|
||||
// data.emojis.map(
|
||||
// v => cache.get('emoji', v.id) ?? new Emoji(this.client, v)
|
||||
// ) ?? this.emojis
|
||||
this.features = data.features ?? this.features
|
||||
this.mfaLevel = data.mfa_level ?? this.mfaLevel
|
||||
this.systemChannelID = data.system_channel_id ?? this.systemChannelID
|
||||
this.systemChannelFlags =
|
||||
data.system_channel_flags ?? this.systemChannelFlags
|
||||
this.rulesChannelID = data.rules_channel_id ?? this.rulesChannelID
|
||||
this.joinedAt = data.joined_at ?? this.joinedAt
|
||||
this.large = data.large ?? this.large
|
||||
this.memberCount = data.member_count ?? this.memberCount
|
||||
// this.voiceStates =
|
||||
// data.voice_states?.map(
|
||||
// v =>
|
||||
// cache.get('voiceState', `${v.guild_id}:${v.user_id}`) ??
|
||||
// new VoiceState(this.client, v)
|
||||
// ) ?? this.voiceStates
|
||||
// this.members =
|
||||
// data.members?.map(
|
||||
// v =>
|
||||
// cache.get('member', `${this.id}:${v.user.id}`) ??
|
||||
// new Member(this.client, v)
|
||||
// ) ?? this.members
|
||||
// this.channels =
|
||||
// data.channels?.map(
|
||||
// v => cache.get('channel', v.id) ?? getChannelByType(this.client, v, this)
|
||||
// ) ?? this.members
|
||||
this.presences = data.presences ?? this.presences
|
||||
this.maxPresences = data.max_presences ?? this.maxPresences
|
||||
this.maxMembers = data.max_members ?? this.maxMembers
|
||||
this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode
|
||||
this.description = data.description ?? this.description
|
||||
this.banner = data.banner ?? this.banner
|
||||
this.premiumTier = data.premium_tier ?? this.premiumTier
|
||||
this.premiumSubscriptionCount =
|
||||
data.premium_subscription_count ?? this.premiumSubscriptionCount
|
||||
this.preferredLocale = data.preferred_locale ?? this.preferredLocale
|
||||
this.publicUpdatesChannelID =
|
||||
data.public_updates_channel_id ?? this.publicUpdatesChannelID
|
||||
this.maxVideoChannelUsers =
|
||||
data.max_video_channel_users ?? this.maxVideoChannelUsers
|
||||
this.approximateNumberCount =
|
||||
data.approximate_number_count ?? this.approximateNumberCount
|
||||
this.approximatePresenceCount =
|
||||
data.approximate_presence_count ?? this.approximatePresenceCount
|
||||
}
|
||||
}
|
||||
|
||||
async getEveryoneRole (): Promise<Role> {
|
||||
return (await this.roles.get(this.id) as unknown) as Role
|
||||
}
|
||||
|
||||
async me(): Promise<Member> {
|
||||
const get = await this.members.get(this.client.user?.id as string)
|
||||
if (get === undefined) throw new Error('Guild#me is not cached')
|
||||
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,114 +1,143 @@
|
|||
import { ChannelPayload } from './channel.ts'
|
||||
import { EmojiPayload } from './emoji.ts'
|
||||
import { PresenceUpdatePayload } from './gateway.ts'
|
||||
import { RolePayload } from './role.ts'
|
||||
import { UserPayload } from './user.ts'
|
||||
import { VoiceStatePayload } from './voice.ts'
|
||||
|
||||
export interface GuildPayload {
|
||||
id: string
|
||||
name: string
|
||||
icon?: string
|
||||
icon_hash?: string
|
||||
splash?: string
|
||||
discovery_splash?: string
|
||||
owner?: boolean
|
||||
owner_id: string
|
||||
permissions?: string
|
||||
region: string
|
||||
afk_channel_id?: string
|
||||
afk_timeout: number
|
||||
widget_enabled?: boolean
|
||||
widget_channel_id?: string
|
||||
verification_level: string
|
||||
default_message_notifications: string
|
||||
explicit_content_filter: string
|
||||
roles: RolePayload[]
|
||||
emojis: EmojiPayload[]
|
||||
features: GuildFeatures[]
|
||||
mfa_level: string
|
||||
application_id?: string
|
||||
system_channel_id?: string
|
||||
system_channel_flags: string
|
||||
rules_channel_id?: string
|
||||
joined_at?: string
|
||||
large?: boolean
|
||||
unavailable: boolean
|
||||
member_count?: number
|
||||
voice_states?: VoiceStatePayload[]
|
||||
members?: MemberPayload[]
|
||||
channels?: ChannelPayload[]
|
||||
presences?: PresenceUpdatePayload[]
|
||||
max_presences?: number
|
||||
max_members?: number
|
||||
vanity_url_code?: string
|
||||
description?: string
|
||||
banner?: string
|
||||
premium_tier: number
|
||||
premium_subscription_count?: number
|
||||
preferred_locale: string
|
||||
public_updates_channel_id?: string
|
||||
max_video_channel_users?: number
|
||||
approximate_number_count?: number
|
||||
approximate_presence_count?: number
|
||||
}
|
||||
|
||||
export interface MemberPayload {
|
||||
user: UserPayload
|
||||
nick?: string
|
||||
roles: string[]
|
||||
joined_at: string
|
||||
premium_since?: string
|
||||
deaf: boolean
|
||||
mute: boolean
|
||||
}
|
||||
|
||||
export enum MessageNotification {
|
||||
ALL_MESSAGES = 0,
|
||||
ONLY_MENTIONS = 1
|
||||
}
|
||||
|
||||
export enum ContentFilter {
|
||||
DISABLED = 0,
|
||||
MEMBERS_WITHOUT_ROLES = 1,
|
||||
ALL_MEMBERS = 3
|
||||
}
|
||||
|
||||
export enum MFA {
|
||||
NONE = 0,
|
||||
ELEVATED = 1
|
||||
}
|
||||
|
||||
export enum Verification {
|
||||
NONE = 0,
|
||||
LOW = 1,
|
||||
MEDIUM = 2,
|
||||
HIGH = 3,
|
||||
VERY_HIGH = 4
|
||||
}
|
||||
|
||||
export enum PremiumTier {
|
||||
NONE = 0,
|
||||
TIER_1 = 1,
|
||||
TIER_2 = 2,
|
||||
TIER_3 = 3
|
||||
}
|
||||
|
||||
export enum SystemChannelFlags {
|
||||
SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0,
|
||||
SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1
|
||||
}
|
||||
|
||||
export type GuildFeatures =
|
||||
| 'INVITE_SPLASH'
|
||||
| 'VIP_REGIONS'
|
||||
| 'VANITY_URL'
|
||||
| 'VERIFIED'
|
||||
| 'PARTNERED'
|
||||
| 'PUBLIC'
|
||||
| 'COMMERCE'
|
||||
| 'NEWS'
|
||||
| 'DISCOVERABLE'
|
||||
| 'FEATURABLE'
|
||||
| 'ANIMATED_ICON'
|
||||
| 'BANNER'
|
||||
import { ApplicationPayload } from "./application.ts"
|
||||
import { ChannelPayload } from './channel.ts'
|
||||
import { EmojiPayload } from './emoji.ts'
|
||||
import { PresenceUpdatePayload } from './gateway.ts'
|
||||
import { RolePayload } from './role.ts'
|
||||
import { UserPayload } from './user.ts'
|
||||
import { VoiceStatePayload } from './voice.ts'
|
||||
|
||||
export interface GuildPayload {
|
||||
id: string
|
||||
name: string
|
||||
icon?: string
|
||||
icon_hash?: string
|
||||
splash?: string
|
||||
discovery_splash?: string
|
||||
owner?: boolean
|
||||
owner_id: string
|
||||
permissions?: string
|
||||
region: string
|
||||
afk_channel_id?: string
|
||||
afk_timeout: number
|
||||
widget_enabled?: boolean
|
||||
widget_channel_id?: string
|
||||
verification_level: string
|
||||
default_message_notifications: string
|
||||
explicit_content_filter: string
|
||||
roles: RolePayload[]
|
||||
emojis: EmojiPayload[]
|
||||
features: GuildFeatures[]
|
||||
mfa_level: string
|
||||
application_id?: string
|
||||
system_channel_id?: string
|
||||
system_channel_flags: string
|
||||
rules_channel_id?: string
|
||||
joined_at?: string
|
||||
large?: boolean
|
||||
unavailable: boolean
|
||||
member_count?: number
|
||||
voice_states?: VoiceStatePayload[]
|
||||
members?: MemberPayload[]
|
||||
channels?: ChannelPayload[]
|
||||
presences?: PresenceUpdatePayload[]
|
||||
max_presences?: number
|
||||
max_members?: number
|
||||
vanity_url_code?: string
|
||||
description?: string
|
||||
banner?: string
|
||||
premium_tier: number
|
||||
premium_subscription_count?: number
|
||||
preferred_locale: string
|
||||
public_updates_channel_id?: string
|
||||
max_video_channel_users?: number
|
||||
approximate_number_count?: number
|
||||
approximate_presence_count?: number
|
||||
}
|
||||
|
||||
export interface MemberPayload {
|
||||
user: UserPayload
|
||||
nick?: string
|
||||
roles: string[]
|
||||
joined_at: string
|
||||
premium_since?: string
|
||||
deaf: boolean
|
||||
mute: boolean
|
||||
}
|
||||
|
||||
export enum MessageNotification {
|
||||
ALL_MESSAGES = 0,
|
||||
ONLY_MENTIONS = 1
|
||||
}
|
||||
|
||||
export enum ContentFilter {
|
||||
DISABLED = 0,
|
||||
MEMBERS_WITHOUT_ROLES = 1,
|
||||
ALL_MEMBERS = 3
|
||||
}
|
||||
|
||||
export enum MFA {
|
||||
NONE = 0,
|
||||
ELEVATED = 1
|
||||
}
|
||||
|
||||
export enum Verification {
|
||||
NONE = 0,
|
||||
LOW = 1,
|
||||
MEDIUM = 2,
|
||||
HIGH = 3,
|
||||
VERY_HIGH = 4
|
||||
}
|
||||
|
||||
export enum PremiumTier {
|
||||
NONE = 0,
|
||||
TIER_1 = 1,
|
||||
TIER_2 = 2,
|
||||
TIER_3 = 3
|
||||
}
|
||||
|
||||
export enum SystemChannelFlags {
|
||||
SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0,
|
||||
SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1
|
||||
}
|
||||
|
||||
export type GuildFeatures =
|
||||
| 'INVITE_SPLASH'
|
||||
| 'VIP_REGIONS'
|
||||
| 'VANITY_URL'
|
||||
| 'VERIFIED'
|
||||
| 'PARTNERED'
|
||||
| 'PUBLIC'
|
||||
| 'COMMERCE'
|
||||
| 'NEWS'
|
||||
| 'DISCOVERABLE'
|
||||
| 'FEATURABLE'
|
||||
| 'ANIMATED_ICON'
|
||||
| '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