mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-06-17 02:29:10 +00:00
lerna: complete refactor!
This commit is contained in:
parent
51dd8bd6b1
commit
e1bd5747b3
12 changed files with 83 additions and 71 deletions
|
@ -2,33 +2,71 @@
|
|||
import type { IFetcher } from './types'
|
||||
import type DiscordSvc from '../discord'
|
||||
import type ErisClient, { User, Member, Guild } from 'eris'
|
||||
import LRU from 'lru-cache'
|
||||
import logger from '../../logger'
|
||||
const log = logger(__filename)
|
||||
|
||||
export default class BotFetcher implements IFetcher {
|
||||
ctx: DiscordSvc
|
||||
client: ErisClient
|
||||
cache: LRU<string, Guild | Member | User>
|
||||
|
||||
constructor (ctx: DiscordSvc) {
|
||||
this.ctx = ctx
|
||||
this.client = ctx.client
|
||||
this.cache = new LRU({
|
||||
max: 50,
|
||||
maxAge: 1000 * 60 * 10
|
||||
})
|
||||
}
|
||||
|
||||
getUser = async (id: string): Promise<?User> => {
|
||||
if (this.cache.has(`U:${id}`)) {
|
||||
log.debug('user cache hit')
|
||||
return this.cache.get(`U:${id}`)
|
||||
}
|
||||
|
||||
log.debug('user cache miss')
|
||||
|
||||
try {
|
||||
return await this.client.getRESTUser(id)
|
||||
const u = await this.client.getRESTUser(id)
|
||||
this.cache.set(`U:${id}`, u)
|
||||
return u
|
||||
} catch (e) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
getMember = async (server: string, user: string): Promise<?Member> => {
|
||||
if (this.cache.has(`M:${server}:${user}`)) {
|
||||
log.debug('member cache hit')
|
||||
return this.cache.get(`M:${server}:${user}`)
|
||||
}
|
||||
|
||||
log.debug('member cache miss')
|
||||
|
||||
try {
|
||||
return await this.client.getRESTGuildMember(server, user)
|
||||
const m = await this.client.getRESTGuildMember(server, user)
|
||||
this.cache.set(`M:${server}:${user}`, m)
|
||||
// $FlowFixMe
|
||||
m.guild = await this.getGuild(server) // we have to prefill this for whatever reason
|
||||
return m
|
||||
} catch (e) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
getGuild = async (server: string): Promise<?Guild> => {
|
||||
if (this.cache.has(`G:${server}`)) {
|
||||
log.debug('guild cache hit')
|
||||
return this.cache.get(`G:${server}`)
|
||||
}
|
||||
|
||||
log.debug('guild cache miss')
|
||||
|
||||
try {
|
||||
return await this.client.getRESTGuild(server)
|
||||
const g = await this.client.getRESTGuild(server)
|
||||
this.cache.set(`G:${server}`, g)
|
||||
return g
|
||||
} catch (e) {
|
||||
return null
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue