Merge pull request #45 from DjDeveloperr/main
feat(gateway): added presence caching, marking events as complete!
This commit is contained in:
		
						commit
						78c86a9bbc
					
				
					 13 changed files with 188 additions and 76 deletions
				
			
		
							
								
								
									
										3
									
								
								mod.ts
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								mod.ts
									
										
									
									
									
								
							|  | @ -16,6 +16,8 @@ export * from './src/managers/guilds.ts' | ||||||
| export * from './src/managers/guildChannels.ts' | export * from './src/managers/guildChannels.ts' | ||||||
| export * from './src/managers/guildEmojis.ts' | export * from './src/managers/guildEmojis.ts' | ||||||
| export * from './src/managers/members.ts' | export * from './src/managers/members.ts' | ||||||
|  | export * from './src/managers/messageReactions.ts' | ||||||
|  | export * from './src/managers/reactionUsers.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' | ||||||
|  | @ -39,6 +41,7 @@ export * from './src/structures/presence.ts' | ||||||
| export * from './src/structures/role.ts' | export * from './src/structures/role.ts' | ||||||
| export * from './src/structures/snowflake.ts' | export * from './src/structures/snowflake.ts' | ||||||
| export * from './src/structures/textChannel.ts' | export * from './src/structures/textChannel.ts' | ||||||
|  | export * from './src/structures/messageReaction.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/application.ts' | ||||||
|  |  | ||||||
|  | @ -22,6 +22,8 @@ export const guildCreate: GatewayEventHandler = async ( | ||||||
| 
 | 
 | ||||||
|   await guild.roles.fromPayload(d.roles) |   await guild.roles.fromPayload(d.roles) | ||||||
| 
 | 
 | ||||||
|  |   if (d.presences !== undefined) await guild.presences.fromPayload(d.presences) | ||||||
|  | 
 | ||||||
|   if (d.voice_states !== undefined) |   if (d.voice_states !== undefined) | ||||||
|     await guild.voiceStates.fromPayload(d.voice_states) |     await guild.voiceStates.fromPayload(d.voice_states) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ export const guildDelte: GatewayEventHandler = async ( | ||||||
|     await guild.members.flush() |     await guild.members.flush() | ||||||
|     await guild.channels.flush() |     await guild.channels.flush() | ||||||
|     await guild.roles.flush() |     await guild.roles.flush() | ||||||
|  |     await guild.presences.flush() | ||||||
|     await gateway.client.guilds.delete(d.id) |     await gateway.client.guilds.delete(d.id) | ||||||
| 
 | 
 | ||||||
|     gateway.client.emit('guildDelete', guild) |     gateway.client.emit('guildDelete', guild) | ||||||
|  |  | ||||||
|  | @ -14,7 +14,13 @@ export const guildMembersChunk: GatewayEventHandler = async ( | ||||||
|     await guild.members.set(member.user.id, member) |     await guild.members.set(member.user.id, member) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // TODO: Cache Presences
 |   if (d.chunk_index === 0) await guild.presences.flush() | ||||||
|  | 
 | ||||||
|  |   if (d.presences !== undefined) { | ||||||
|  |     for (const pres of d.presences) { | ||||||
|  |       await guild.presences.set(pres.user.id, pres) | ||||||
|  |     } | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   gateway.client.emit('guildMembersChunk', guild, { |   gateway.client.emit('guildMembersChunk', guild, { | ||||||
|     members: d.members.map((m) => m.user.id), |     members: d.members.map((m) => m.user.id), | ||||||
|  |  | ||||||
|  | @ -47,6 +47,9 @@ import { guildMembersChunk } from './guildMembersChunk.ts' | ||||||
| import { presenceUpdate } from './presenceUpdate.ts' | import { presenceUpdate } from './presenceUpdate.ts' | ||||||
| import { inviteCreate } from './inviteCreate.ts' | import { inviteCreate } from './inviteCreate.ts' | ||||||
| import { inviteDelete } from './inviteDelete.ts' | import { inviteDelete } from './inviteDelete.ts' | ||||||
|  | import { MessageReaction } from '../../structures/messageReaction.ts' | ||||||
|  | import { Invite } from '../../structures/invite.ts' | ||||||
|  | import { Presence } from '../../structures/presence.ts' | ||||||
| 
 | 
 | ||||||
| export const gatewayHandlers: { | export const gatewayHandlers: { | ||||||
|   [eventCode in GatewayEvents]: GatewayEventHandler | undefined |   [eventCode in GatewayEvents]: GatewayEventHandler | undefined | ||||||
|  | @ -131,16 +134,23 @@ export interface ClientEvents extends EventTypes { | ||||||
|     uncached: Set<string> |     uncached: Set<string> | ||||||
|   ) => void |   ) => void | ||||||
|   messageUpdate: (before: Message, after: Message) => void |   messageUpdate: (before: Message, after: Message) => void | ||||||
|  |   messageReactionAdd: (reaction: MessageReaction, user: User) => void | ||||||
|  |   messageReactionRemove: (reaction: MessageReaction, user: User) => void | ||||||
|  |   messageReactionRemoveAll: (message: Message) => void | ||||||
|  |   messageReactionRemoveEmoji: (message: Message, emoji: Emoji) => void | ||||||
|   typingStart: ( |   typingStart: ( | ||||||
|     user: User, |     user: User, | ||||||
|     channel: TextChannel, |     channel: TextChannel, | ||||||
|     at: Date, |     at: Date, | ||||||
|     guildData?: TypingStartGuildData |     guildData?: TypingStartGuildData | ||||||
|   ) => void |   ) => void | ||||||
|  |   inviteCreate: (invite: Invite) => void | ||||||
|  |   inviteDelete: (invite: Invite) => void | ||||||
|   userUpdate: (before: User, after: User) => void |   userUpdate: (before: User, after: User) => void | ||||||
|   voiceServerUpdate: (data: VoiceServerUpdateData) => void |   voiceServerUpdate: (data: VoiceServerUpdateData) => void | ||||||
|   voiceStateAdd: (state: VoiceState) => void |   voiceStateAdd: (state: VoiceState) => void | ||||||
|   voiceStateRemove: (state: VoiceState) => void |   voiceStateRemove: (state: VoiceState) => void | ||||||
|   voiceStateUpdate: (state: VoiceState, after: VoiceState) => void |   voiceStateUpdate: (state: VoiceState, after: VoiceState) => void | ||||||
|  |   presenceUpdate: (presence: Presence) => void | ||||||
|   webhooksUpdate: (guild: Guild, channel: GuildTextChannel) => void |   webhooksUpdate: (guild: Guild, channel: GuildTextChannel) => void | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
| import { Guild } from '../../structures/guild.ts' | import { Guild } from '../../structures/guild.ts' | ||||||
| import { InviteCreatePayload } from '../../types/gateway.ts' | import { InviteCreatePayload } from '../../types/gateway.ts' | ||||||
| import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' | import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' | ||||||
|  | import { Invite } from '../../structures/invite.ts' | ||||||
| 
 | 
 | ||||||
| export const inviteCreate: GatewayEventHandler = async ( | export const inviteCreate: GatewayEventHandler = async ( | ||||||
|   gateway: Gateway, |   gateway: Gateway, | ||||||
|  | @ -36,5 +37,5 @@ export const inviteCreate: GatewayEventHandler = async ( | ||||||
| 
 | 
 | ||||||
|   await guild.invites.set(d.code, dataConverted) |   await guild.invites.set(d.code, dataConverted) | ||||||
|   const invite = await guild.invites.get(d.code) |   const invite = await guild.invites.get(d.code) | ||||||
|   gateway.client.emit('inviteCreate', invite) |   gateway.client.emit('inviteCreate', (invite as unknown) as Invite) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,6 +1,16 @@ | ||||||
|  | import { PresenceUpdatePayload } from '../../types/gateway.ts' | ||||||
| import { Gateway, GatewayEventHandler } from '../index.ts' | import { Gateway, GatewayEventHandler } from '../index.ts' | ||||||
| 
 | 
 | ||||||
| export const presenceUpdate: GatewayEventHandler = async ( | export const presenceUpdate: GatewayEventHandler = async ( | ||||||
|   gateway: Gateway, |   gateway: Gateway, | ||||||
|   d: any |   d: PresenceUpdatePayload | ||||||
| ) => {} | ) => { | ||||||
|  |   const guild = await gateway.client.guilds.get(d.guild_id) | ||||||
|  |   if (guild === undefined) return | ||||||
|  | 
 | ||||||
|  |   await guild.presences.set(d.user.id, d) | ||||||
|  |   const presence = await guild.presences.get(d.user.id) | ||||||
|  |   if (presence === undefined) return | ||||||
|  | 
 | ||||||
|  |   gateway.client.emit('presenceUpdate', presence) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										39
									
								
								src/managers/presences.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/managers/presences.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
|  | import { Presence } from '../structures/presence.ts' | ||||||
|  | import { User } from '../structures/user.ts' | ||||||
|  | import { PresenceUpdatePayload } from '../types/gateway.ts' | ||||||
|  | import { BaseManager } from './base.ts' | ||||||
|  | 
 | ||||||
|  | export class GuildPresencesManager extends BaseManager< | ||||||
|  |   PresenceUpdatePayload, | ||||||
|  |   Presence | ||||||
|  | > { | ||||||
|  |   guild: Guild | ||||||
|  | 
 | ||||||
|  |   constructor(client: Client, guild: Guild) { | ||||||
|  |     super(client, `presences:${guild.id}`, Presence) | ||||||
|  |     this.guild = guild | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async get(id: string): Promise<Presence | undefined> { | ||||||
|  |     const raw = await this._get(id) | ||||||
|  |     if (raw === undefined) return | ||||||
|  |     let user = await this.client.users.get(raw.user.id) | ||||||
|  |     if (user === undefined) user = new User(this.client, raw.user) | ||||||
|  |     const guild = await this.client.guilds.get(raw.guild_id) | ||||||
|  |     if (guild === undefined) return | ||||||
|  |     const presence = new Presence(this.client, raw, user, guild) | ||||||
|  |     return presence | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async fromPayload( | ||||||
|  |     data: PresenceUpdatePayload[] | ||||||
|  |   ): Promise<GuildPresencesManager> { | ||||||
|  |     await this.flush() | ||||||
|  |     for (const pres of data) { | ||||||
|  |       await this.set(pres.user.id, pres) | ||||||
|  |     } | ||||||
|  |     return this | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -7,7 +7,6 @@ import { | ||||||
|   IntegrationAccountPayload, |   IntegrationAccountPayload, | ||||||
|   IntegrationExpireBehavior, |   IntegrationExpireBehavior, | ||||||
| } from '../types/guild.ts' | } from '../types/guild.ts' | ||||||
| import { PresenceUpdatePayload } from '../types/gateway.ts' |  | ||||||
| import { Base } from './base.ts' | import { Base } from './base.ts' | ||||||
| import { RolesManager } from '../managers/roles.ts' | import { RolesManager } from '../managers/roles.ts' | ||||||
| import { InviteManager } from '../managers/invites.ts' | import { InviteManager } from '../managers/invites.ts' | ||||||
|  | @ -21,6 +20,7 @@ import { Application } from './application.ts' | ||||||
| import { GUILD_BAN, GUILD_BANS, GUILD_INTEGRATIONS } from '../types/endpoint.ts' | import { GUILD_BAN, GUILD_BANS, GUILD_INTEGRATIONS } from '../types/endpoint.ts' | ||||||
| import { GuildVoiceStatesManager } from '../managers/guildVoiceStates.ts' | import { GuildVoiceStatesManager } from '../managers/guildVoiceStates.ts' | ||||||
| import { RequestMembersOptions } from '../gateway/index.ts' | import { RequestMembersOptions } from '../gateway/index.ts' | ||||||
|  | import { GuildPresencesManager } from '../managers/presences.ts' | ||||||
| 
 | 
 | ||||||
| export class GuildBan extends Base { | export class GuildBan extends Base { | ||||||
|   guild: Guild |   guild: Guild | ||||||
|  | @ -147,7 +147,7 @@ export class Guild extends Base { | ||||||
|   voiceStates: GuildVoiceStatesManager |   voiceStates: GuildVoiceStatesManager | ||||||
|   members: MembersManager |   members: MembersManager | ||||||
|   channels: GuildChannelsManager |   channels: GuildChannelsManager | ||||||
|   presences?: PresenceUpdatePayload[] |   presences: GuildPresencesManager | ||||||
|   maxPresences?: number |   maxPresences?: number | ||||||
|   maxMembers?: number |   maxMembers?: number | ||||||
|   vanityURLCode?: string |   vanityURLCode?: string | ||||||
|  | @ -169,6 +169,7 @@ export class Guild extends Base { | ||||||
|     this.unavailable = data.unavailable |     this.unavailable = data.unavailable | ||||||
|     this.members = new MembersManager(this.client, this) |     this.members = new MembersManager(this.client, this) | ||||||
|     this.voiceStates = new GuildVoiceStatesManager(client, this) |     this.voiceStates = new GuildVoiceStatesManager(client, this) | ||||||
|  |     this.presences = new GuildPresencesManager(client, this) | ||||||
|     this.channels = new GuildChannelsManager( |     this.channels = new GuildChannelsManager( | ||||||
|       this.client, |       this.client, | ||||||
|       this.client.channels, |       this.client.channels, | ||||||
|  | @ -203,7 +204,6 @@ export class Guild extends Base { | ||||||
|       this.joinedAt = data.joined_at |       this.joinedAt = data.joined_at | ||||||
|       this.large = data.large |       this.large = data.large | ||||||
|       this.memberCount = data.member_count |       this.memberCount = data.member_count | ||||||
|       this.presences = data.presences |  | ||||||
|       this.maxPresences = data.max_presences |       this.maxPresences = data.max_presences | ||||||
|       this.maxMembers = data.max_members |       this.maxMembers = data.max_members | ||||||
|       this.vanityURLCode = data.vanity_url_code |       this.vanityURLCode = data.vanity_url_code | ||||||
|  | @ -252,7 +252,6 @@ export class Guild extends Base { | ||||||
|       this.joinedAt = data.joined_at ?? this.joinedAt |       this.joinedAt = data.joined_at ?? this.joinedAt | ||||||
|       this.large = data.large ?? this.large |       this.large = data.large ?? this.large | ||||||
|       this.memberCount = data.member_count ?? this.memberCount |       this.memberCount = data.member_count ?? this.memberCount | ||||||
|       this.presences = data.presences ?? this.presences |  | ||||||
|       this.maxPresences = data.max_presences ?? this.maxPresences |       this.maxPresences = data.max_presences ?? this.maxPresences | ||||||
|       this.maxMembers = data.max_members ?? this.maxMembers |       this.maxMembers = data.max_members ?? this.maxMembers | ||||||
|       this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode |       this.vanityURLCode = data.vanity_url_code ?? this.vanityURLCode | ||||||
|  |  | ||||||
|  | @ -15,11 +15,11 @@ export class Invite extends Base { | ||||||
|   approximatePresenceCount?: number |   approximatePresenceCount?: number | ||||||
|   approximateMemberCount?: number |   approximateMemberCount?: number | ||||||
| 
 | 
 | ||||||
|   get link (): string { |   get link(): string { | ||||||
|     return `https://discord.gg/${this.code}` |     return `https://discord.gg/${this.code}` | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   constructor (client: Client, data: InvitePayload) { |   constructor(client: Client, data: InvitePayload) { | ||||||
|     super(client) |     super(client) | ||||||
|     this.code = data.code |     this.code = data.code | ||||||
|     this.guild = data.guild |     this.guild = data.guild | ||||||
|  | @ -31,7 +31,7 @@ export class Invite extends Base { | ||||||
|     this.approximatePresenceCount = data.approximate_presence_count |     this.approximatePresenceCount = data.approximate_presence_count | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected readFromData (data: InvitePayload): void { |   protected readFromData(data: InvitePayload): void { | ||||||
|     super.readFromData(data) |     super.readFromData(data) | ||||||
|     this.code = data.code ?? this.code |     this.code = data.code ?? this.code | ||||||
|     this.guild = data.guild ?? this.guild |     this.guild = data.guild ?? this.guild | ||||||
|  |  | ||||||
|  | @ -1,5 +1,15 @@ | ||||||
| import { ActivityGame, ClientActivity, StatusType } from '../types/presence.ts' | import { | ||||||
| import { StatusUpdatePayload } from '../types/gateway.ts' |   ActivityGame, | ||||||
|  |   ActivityPayload, | ||||||
|  |   ClientActivity, | ||||||
|  |   ClientStatus, | ||||||
|  |   StatusType, | ||||||
|  | } from '../types/presence.ts' | ||||||
|  | import { PresenceUpdatePayload, StatusUpdatePayload } from '../types/gateway.ts' | ||||||
|  | import { Base } from './base.ts' | ||||||
|  | import { Guild } from './guild.ts' | ||||||
|  | import { User } from './user.ts' | ||||||
|  | import { Client } from '../models/client.ts' | ||||||
| 
 | 
 | ||||||
| enum ActivityTypes { | enum ActivityTypes { | ||||||
|   PLAYING = 0, |   PLAYING = 0, | ||||||
|  | @ -7,7 +17,37 @@ enum ActivityTypes { | ||||||
|   LISTENING = 2, |   LISTENING = 2, | ||||||
|   WATCHING = 3, |   WATCHING = 3, | ||||||
|   CUSTOM_STATUS = 4, |   CUSTOM_STATUS = 4, | ||||||
|   COMPETING = 5 |   COMPETING = 5, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export class Presence extends Base { | ||||||
|  |   user: User | ||||||
|  |   guild: Guild | ||||||
|  |   status: StatusType | ||||||
|  |   // TODO: Maybe a new structure for this?
 | ||||||
|  |   activities: ActivityPayload[] | ||||||
|  |   clientStatus: ClientStatus | ||||||
|  | 
 | ||||||
|  |   constructor( | ||||||
|  |     client: Client, | ||||||
|  |     data: PresenceUpdatePayload, | ||||||
|  |     user: User, | ||||||
|  |     guild: Guild | ||||||
|  |   ) { | ||||||
|  |     super(client, data) | ||||||
|  |     this.user = user | ||||||
|  |     this.guild = guild | ||||||
|  |     this.status = data.status | ||||||
|  |     this.activities = data.activities | ||||||
|  |     this.clientStatus = data.client_status | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   fromPayload(data: PresenceUpdatePayload): Presence { | ||||||
|  |     this.status = data.status | ||||||
|  |     this.activities = data.activities | ||||||
|  |     this.clientStatus = data.client_status | ||||||
|  |     return this | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export class ClientPresence { | export class ClientPresence { | ||||||
|  | @ -16,7 +56,7 @@ export class ClientPresence { | ||||||
|   since?: number | null |   since?: number | null | ||||||
|   afk?: boolean |   afk?: boolean | ||||||
| 
 | 
 | ||||||
|   constructor (data?: ClientActivity | StatusUpdatePayload | ActivityGame) { |   constructor(data?: ClientActivity | StatusUpdatePayload | ActivityGame) { | ||||||
|     if (data !== undefined) { |     if (data !== undefined) { | ||||||
|       if ((data as ClientActivity).activity !== undefined) { |       if ((data as ClientActivity).activity !== undefined) { | ||||||
|         Object.assign(this, data) |         Object.assign(this, data) | ||||||
|  | @ -31,7 +71,7 @@ export class ClientPresence { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   parse (payload: StatusUpdatePayload): ClientPresence { |   parse(payload: StatusUpdatePayload): ClientPresence { | ||||||
|     this.afk = payload.afk |     this.afk = payload.afk | ||||||
|     this.activity = payload.activities ?? undefined |     this.activity = payload.activities ?? undefined | ||||||
|     this.since = payload.since |     this.since = payload.since | ||||||
|  | @ -39,20 +79,20 @@ export class ClientPresence { | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static parse (payload: StatusUpdatePayload): ClientPresence { |   static parse(payload: StatusUpdatePayload): ClientPresence { | ||||||
|     return new ClientPresence().parse(payload) |     return new ClientPresence().parse(payload) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   create (): StatusUpdatePayload { |   create(): StatusUpdatePayload { | ||||||
|     return { |     return { | ||||||
|       afk: this.afk === undefined ? false : this.afk, |       afk: this.afk === undefined ? false : this.afk, | ||||||
|       activities: this.createActivity(), |       activities: this.createActivity(), | ||||||
|       since: this.since === undefined ? null : this.since, |       since: this.since === undefined ? null : this.since, | ||||||
|       status: this.status === undefined ? 'online' : this.status |       status: this.status === undefined ? 'online' : this.status, | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   createActivity (): ActivityGame[] | null { |   createActivity(): ActivityGame[] | null { | ||||||
|     // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
 |     // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
 | ||||||
|     const activity = |     const activity = | ||||||
|       this.activity === undefined |       this.activity === undefined | ||||||
|  | @ -62,7 +102,7 @@ export class ClientPresence { | ||||||
|         : [this.activity] |         : [this.activity] | ||||||
|     if (activity === null) return activity |     if (activity === null) return activity | ||||||
|     else { |     else { | ||||||
|       activity.map(e => { |       activity.map((e) => { | ||||||
|         if (typeof e.type === 'string') e.type = ActivityTypes[e.type] |         if (typeof e.type === 'string') e.type = ActivityTypes[e.type] | ||||||
|         return e |         return e | ||||||
|       }) |       }) | ||||||
|  | @ -70,37 +110,37 @@ export class ClientPresence { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setStatus (status: StatusType): ClientPresence { |   setStatus(status: StatusType): ClientPresence { | ||||||
|     this.status = status |     this.status = status | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setActivity (activity: ActivityGame): ClientPresence { |   setActivity(activity: ActivityGame): ClientPresence { | ||||||
|     this.activity = activity |     this.activity = activity | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setActivities (activities: ActivityGame[]): ClientPresence { |   setActivities(activities: ActivityGame[]): ClientPresence { | ||||||
|     this.activity = activities |     this.activity = activities | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setAFK (afk: boolean): ClientPresence { |   setAFK(afk: boolean): ClientPresence { | ||||||
|     this.afk = afk |     this.afk = afk | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   removeAFK (): ClientPresence { |   removeAFK(): ClientPresence { | ||||||
|     this.afk = false |     this.afk = false | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   toggleAFK (): ClientPresence { |   toggleAFK(): ClientPresence { | ||||||
|     this.afk = this.afk === undefined ? true : !this.afk |     this.afk = this.afk === undefined ? true : !this.afk | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setSince (since?: number): ClientPresence { |   setSince(since?: number): ClientPresence { | ||||||
|     this.since = since |     this.since = since | ||||||
|     return this |     return this | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| import { Channel, Guild } from "../../mod.ts" | import { Channel } from '../structures/channel.ts' | ||||||
|  | import { Guild } from '../structures/guild.ts' | ||||||
| import { ChannelPayload } from './channel.ts' | import { ChannelPayload } from './channel.ts' | ||||||
| import { GuildPayload } from './guild.ts' | import { GuildPayload } from './guild.ts' | ||||||
| import { UserPayload } from './user.ts' | import { UserPayload } from './user.ts' | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ export enum ActivityFlags { | ||||||
|   SPECTATE = 1 << 2, |   SPECTATE = 1 << 2, | ||||||
|   JOIN_REQUEST = 1 << 3, |   JOIN_REQUEST = 1 << 3, | ||||||
|   SYNC = 1 << 4, |   SYNC = 1 << 4, | ||||||
|   PLAY = 1 << 5 |   PLAY = 1 << 5, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export type ActivityType = | export type ActivityType = | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue