feat(integrations|application): implementation
This commit is contained in:
		
							parent
							
								
									6e87aa2e83
								
							
						
					
					
						commit
						c1bce28334
					
				
					 6 changed files with 518 additions and 395 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue