Merge pull request #64 from Helloyunho/fix-managers
Fix managers' array function
This commit is contained in:
commit
b0da81f308
8 changed files with 126 additions and 6 deletions
|
@ -42,7 +42,7 @@ export class BaseManager<T, T2> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets an Array of values from Cache */
|
/** Gets an Array of values from Cache */
|
||||||
async array(): Promise<undefined | T2[]> {
|
async array(): Promise<T2[]> {
|
||||||
let arr = await (this.client.cache.array(this.cacheName) as T[])
|
let arr = await (this.client.cache.array(this.cacheName) as T[])
|
||||||
if (arr === undefined) arr = []
|
if (arr === undefined) arr = []
|
||||||
return arr.map((e) => new this.DataType(this.client, e)) as any
|
return arr.map((e) => new this.DataType(this.client, e)) as any
|
||||||
|
|
|
@ -25,7 +25,7 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> {
|
||||||
return res as any
|
return res as any
|
||||||
}
|
}
|
||||||
|
|
||||||
async array(): Promise<undefined | Channel[]> {
|
async array(): Promise<Channel[]> {
|
||||||
const arr = await (this.client.cache.array(
|
const arr = await (this.client.cache.array(
|
||||||
this.cacheName
|
this.cacheName
|
||||||
) as ChannelPayload[])
|
) as ChannelPayload[])
|
||||||
|
|
|
@ -29,7 +29,7 @@ export class GuildVoiceStatesManager extends BaseManager<
|
||||||
return new VoiceState(this.client, raw, {
|
return new VoiceState(this.client, raw, {
|
||||||
user: ((await this.client.users.get(raw.user_id)) as unknown) as User,
|
user: ((await this.client.users.get(raw.user_id)) as unknown) as User,
|
||||||
channel:
|
channel:
|
||||||
raw.channel_id == null
|
raw.channel_id === null
|
||||||
? null
|
? null
|
||||||
: (((await this.client.channels.get<VoiceChannel>(
|
: (((await this.client.channels.get<VoiceChannel>(
|
||||||
raw.channel_id
|
raw.channel_id
|
||||||
|
@ -40,6 +40,37 @@ export class GuildVoiceStatesManager extends BaseManager<
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async array(): Promise<VoiceState[]> {
|
||||||
|
let arr = await (this.client.cache.array(
|
||||||
|
this.cacheName
|
||||||
|
) as VoiceStatePayload[])
|
||||||
|
if (arr === undefined) arr = []
|
||||||
|
|
||||||
|
return await Promise.all(
|
||||||
|
arr.map(async (raw) => {
|
||||||
|
const guild =
|
||||||
|
raw.guild_id === undefined
|
||||||
|
? undefined
|
||||||
|
: await this.client.guilds.get(raw.guild_id)
|
||||||
|
|
||||||
|
return new VoiceState(this.client, raw, {
|
||||||
|
user: ((await this.client.users.get(raw.user_id)) as unknown) as User,
|
||||||
|
channel:
|
||||||
|
raw.channel_id === null
|
||||||
|
? null
|
||||||
|
: (((await this.client.channels.get<VoiceChannel>(
|
||||||
|
raw.channel_id
|
||||||
|
)) as unknown) as VoiceChannel),
|
||||||
|
guild,
|
||||||
|
member:
|
||||||
|
guild === undefined
|
||||||
|
? undefined
|
||||||
|
: await guild.members.get(raw.user_id)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
async fromPayload(d: VoiceStatePayload[]): Promise<void> {
|
async fromPayload(d: VoiceStatePayload[]): Promise<void> {
|
||||||
for (const data of d) {
|
for (const data of d) {
|
||||||
await this.set(data.user_id, data)
|
await this.set(data.user_id, data)
|
||||||
|
|
|
@ -37,6 +37,27 @@ export class MembersManager extends BaseManager<MemberPayload, Member> {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async array(): Promise<Member[]> {
|
||||||
|
let arr = await (this.client.cache.array(this.cacheName) as MemberPayload[])
|
||||||
|
if (arr === undefined) arr = []
|
||||||
|
|
||||||
|
return await Promise.all(
|
||||||
|
arr.map(async (raw) => {
|
||||||
|
const user = new User(this.client, raw.user)
|
||||||
|
const roles = await this.guild.roles.array()
|
||||||
|
let permissions = new Permissions(Permissions.DEFAULT)
|
||||||
|
if (roles !== undefined) {
|
||||||
|
const mRoles = roles.filter(
|
||||||
|
(r) =>
|
||||||
|
(raw.roles.includes(r.id) as boolean) || r.id === this.guild.id
|
||||||
|
)
|
||||||
|
permissions = new Permissions(mRoles.map((r) => r.permissions))
|
||||||
|
}
|
||||||
|
return new Member(this.client, raw, user, this.guild, permissions)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
async fetch(id: string): Promise<Member> {
|
async fetch(id: string): Promise<Member> {
|
||||||
return await new Promise((resolve, reject) => {
|
return await new Promise((resolve, reject) => {
|
||||||
this.client.rest
|
this.client.rest
|
||||||
|
|
|
@ -37,6 +37,20 @@ export class MessageReactionsManager extends BaseManager<
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async array(): Promise<MessageReaction[]> {
|
||||||
|
let arr = await (this.client.cache.array(this.cacheName) as Reaction[])
|
||||||
|
if (arr === undefined) arr = []
|
||||||
|
|
||||||
|
return await Promise.all(
|
||||||
|
arr.map(async (raw) => {
|
||||||
|
let emoji = await this.client.emojis.get(raw.emoji.id)
|
||||||
|
if (emoji === undefined) emoji = new Emoji(this.client, raw.emoji)
|
||||||
|
|
||||||
|
return new MessageReaction(this.client, raw, this.message, emoji)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
async flush(): Promise<any> {
|
async flush(): Promise<any> {
|
||||||
await this.client.cache.deleteCache(`reaction_users:${this.message.id}`)
|
await this.client.cache.deleteCache(`reaction_users:${this.message.id}`)
|
||||||
return this.client.cache.deleteCache(this.cacheName)
|
return this.client.cache.deleteCache(this.cacheName)
|
||||||
|
|
|
@ -44,6 +44,42 @@ export class MessagesManager extends BaseManager<MessagePayload, Message> {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async array(): Promise<Message[]> {
|
||||||
|
let arr = await (this.client.cache.array(
|
||||||
|
this.cacheName
|
||||||
|
) as MessagePayload[])
|
||||||
|
if (arr === undefined) arr = []
|
||||||
|
|
||||||
|
const result: Message[] = []
|
||||||
|
await Promise.all(
|
||||||
|
arr.map(async (raw) => {
|
||||||
|
if (raw.author === undefined) return
|
||||||
|
|
||||||
|
let channel = await this.client.channels.get(raw.channel_id)
|
||||||
|
if (channel === undefined)
|
||||||
|
channel = await this.client.channels.fetch(raw.channel_id)
|
||||||
|
if (channel === undefined) return
|
||||||
|
|
||||||
|
let author = ((await this.client.users.get(
|
||||||
|
raw.author.id
|
||||||
|
)) as unknown) as User
|
||||||
|
|
||||||
|
if (author === undefined) author = new User(this.client, raw.author)
|
||||||
|
|
||||||
|
const res = new Message(
|
||||||
|
this.client,
|
||||||
|
raw,
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
||||||
|
channel as TextChannel,
|
||||||
|
author
|
||||||
|
)
|
||||||
|
await res.mentions.fromPayload(raw)
|
||||||
|
result.push(res)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
async fetch(id: string): Promise<Message> {
|
async fetch(id: string): Promise<Message> {
|
||||||
return await new Promise((resolve, reject) => {
|
return await new Promise((resolve, reject) => {
|
||||||
this.client.rest
|
this.client.rest
|
||||||
|
|
|
@ -27,6 +27,25 @@ export class GuildPresencesManager extends BaseManager<
|
||||||
return presence
|
return presence
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async array(): Promise<Presence[]> {
|
||||||
|
let arr = await (this.client.cache.array(
|
||||||
|
this.cacheName
|
||||||
|
) as PresenceUpdatePayload[])
|
||||||
|
if (arr === undefined) arr = []
|
||||||
|
|
||||||
|
const result: Presence[] = []
|
||||||
|
await Promise.all(
|
||||||
|
arr.map(async (raw) => {
|
||||||
|
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
|
||||||
|
result.push(new Presence(this.client, raw, user, guild))
|
||||||
|
})
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
async fromPayload(
|
async fromPayload(
|
||||||
data: PresenceUpdatePayload[]
|
data: PresenceUpdatePayload[]
|
||||||
): Promise<GuildPresencesManager> {
|
): Promise<GuildPresencesManager> {
|
||||||
|
|
|
@ -59,10 +59,9 @@ client.on('messageCreate', async (msg: Message) => {
|
||||||
if (msg.content === '!ping') {
|
if (msg.content === '!ping') {
|
||||||
msg.reply(`Pong! Ping: ${client.ping}ms`)
|
msg.reply(`Pong! Ping: ${client.ping}ms`)
|
||||||
} else if (msg.content === '!members') {
|
} else if (msg.content === '!members') {
|
||||||
const col = await msg.guild?.members.collection()
|
const col = await msg.guild?.members.array()
|
||||||
const data = col
|
const data = col
|
||||||
?.array()
|
?.map((c: Member, i: number) => {
|
||||||
.map((c: Member, i: number) => {
|
|
||||||
return `${i + 1}. ${c.user.tag}`
|
return `${i + 1}. ${c.user.tag}`
|
||||||
})
|
})
|
||||||
.join('\n') as string
|
.join('\n') as string
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue