emily workin on the redis module
This commit is contained in:
parent
dba47edf04
commit
7c414c9571
1 changed files with 99 additions and 187 deletions
|
@ -1,198 +1,110 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
// TODO IN REDIS DATABASE MODULE: Find a better way to store arrays/objects
|
|
||||||
|
|
||||||
const Database = require('../../base/database')
|
|
||||||
|
|
||||||
const redis = require('redis')
|
const redis = require('redis')
|
||||||
const { promisify } = require('util')
|
const generators = require('redis-async-gen');
|
||||||
const generators = require('redis-async-gen')
|
const { data } = require('./logger');
|
||||||
|
const { promisify } = require('util');
|
||||||
|
|
||||||
class RedisDatabase extends Database {
|
class Redis {
|
||||||
constructor(client) {
|
constructor(client) {
|
||||||
super(client)
|
this.client = client;
|
||||||
// Config
|
}
|
||||||
let conf = this.client.config.redis
|
|
||||||
|
|
||||||
// Create redis client
|
init () {
|
||||||
this.global = redis.createClient(conf)
|
const conf = this.client.config.redis
|
||||||
this.guild = this.global.duplicate({ db: 1 })
|
|
||||||
this.member = this.global.duplicate({ db: 2 })
|
|
||||||
this.user = this.global.duplicate({ db: 3 })
|
|
||||||
|
|
||||||
// Async
|
// Create redis client
|
||||||
this.guildGetAsync = promisify(this.guild.get).bind(this.guild)
|
this.global = redis.createClient(conf)
|
||||||
this.memberGetAsync = promisify(this.member.get).bind(this.member)
|
this.guild = this.global.duplicate({ db: 1 })
|
||||||
this.userGetAsync = promisify(this.user.get).bind(this.user)
|
this.member = this.global.duplicate({ db: 2 })
|
||||||
|
this.user = this.global.duplicate({ db: 3 })
|
||||||
|
|
||||||
this.guildSetAsync = promisify(this.guild.set).bind(this.guild)
|
// Promises
|
||||||
this.memberSetAsync = promisify(this.member.set).bind(this.member)
|
this.guildGetAsync = promisify(this.guild.hget).bind(this.guild)
|
||||||
this.userSetAsync = promisify(this.user.set).bind(this.user)
|
this.memberGetAsync = promisify(this.member.hget).bind(this.member)
|
||||||
|
this.userGetASync = promisify(this.user.hget).bind(this.user)
|
||||||
|
|
||||||
// Generators
|
this.guildGetAllAsync = promisify(this.guild.hgetall).bind(this.guild)
|
||||||
this.guildGenerators = generators.using(this.guild)
|
this.memberGetAllAsync = promisify(this.member.hgetall).bind(this.member)
|
||||||
this.memberGenerators = generators.using(this.member)
|
this.userGetAllAsync = promisify(this.user.hgetall).bind(this.user)
|
||||||
this.userGenerators = generators.using(this.user)
|
|
||||||
|
this.guildSetAsync = promisify(this.guild.hset).bind(this.guild)
|
||||||
|
this.memberSetAsync = promisify(this.member.hset).bind(this.member)
|
||||||
|
this.userSetAsync = promisify(this.user.hset).bind(this.user)
|
||||||
|
};
|
||||||
|
|
||||||
|
async guildGet (id, key) {
|
||||||
|
let result = await this.client.db.guildGetAsync(id, key);
|
||||||
|
|
||||||
|
if(result === null) {
|
||||||
|
result = this.client.config.defaultGuildData[key]
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
throw new Error('The key provided is invalid. Please check for typing errors.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async guildSet (id, key, newValue) {
|
||||||
|
if (newValue === this.client.config.defaultGuildData[key]) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async memberGet (id, key) {
|
||||||
|
let result = await this.client.db.memberGetAsync(id, key);
|
||||||
|
|
||||||
|
if(result === null) {
|
||||||
|
result = this.client.config.defaultMemberData[key]
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
throw new Error('The key provided is invalid. Please check for typing errors.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async userGet (id, key) {
|
||||||
|
let result = await this.client.db.userGetAsync(id, key);
|
||||||
|
|
||||||
|
if(result === null) {
|
||||||
|
result = this.client.config.defaultUserData[key]
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
throw new Error('The key provided is invalid. Please check for typing errors.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deletes specified guild entry
|
||||||
|
async guildDelete (id) {
|
||||||
|
this.guild.del(id)
|
||||||
|
var { keysMatching } = await generators.using(this.member)
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
for await (const key of keysMatching(id + '-*')) {
|
||||||
|
this.member.del(key)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async userExists(id) {
|
// Deletes specified user. If deleteAll, also delete their member entries in guilds
|
||||||
for await (const key of this.userGenerators.keysMatching(id + '-*')) {
|
async userDelete (id, deleteAll) {
|
||||||
return true
|
this.user.del(id)
|
||||||
}
|
if (deleteAll) {
|
||||||
|
var { keysMatching } = await generators.using(this.member)
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
for await (const key of keysMatching('*-' + id)) {
|
||||||
|
this.member.del(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for await (const key of this.memberGenerators.keysMatching('*-' + id + '-*')) {
|
// Deletes member of user in specified guild
|
||||||
return true
|
async memberDelete (guildId, id) {
|
||||||
}
|
this.member.del(guildId + '-' + id)
|
||||||
|
}
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
async memberExists(guildId, id) {
|
|
||||||
for await (const key of this.memberGenerators.keysMatching(guildId + '-' + id + '-*')) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
async guildExists(id) {
|
|
||||||
for await (const key of this.guildGenerators.keysMatching(id + '-*')) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
async createUser(id) {
|
|
||||||
// No need to create users with all the data in Redis
|
|
||||||
}
|
|
||||||
|
|
||||||
async createMember(guildId, id) {
|
|
||||||
// No need to create members with all the data in Redis
|
|
||||||
}
|
|
||||||
|
|
||||||
async createGuild(id) {
|
|
||||||
// No need to create guilds with all the data in Redis
|
|
||||||
}
|
|
||||||
|
|
||||||
async getUser(id) {
|
|
||||||
let db = this
|
|
||||||
|
|
||||||
return new function() {
|
|
||||||
this.id = id
|
|
||||||
this.db = db
|
|
||||||
|
|
||||||
this.get = async function(key) {
|
|
||||||
let result = await this.db.userGetAsync(this.id + '-' + key)
|
|
||||||
|
|
||||||
if(result === null) {
|
|
||||||
return this.db.client.config.defaultUserData[key]
|
|
||||||
} else {
|
|
||||||
if(String(result).startsWith('[') || String(result).startsWith('{')) return JSON.parse(result)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.set = async function(key, value) {
|
|
||||||
if(typeof(value) === 'object') value = JSON.stringify(value)
|
|
||||||
|
|
||||||
return await this.db.userSetAsync(this.id + '-' + key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.delete = async function() {
|
|
||||||
return await this.db.deleteUser(this.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async getMember(guildId, id) {
|
|
||||||
let db = this
|
|
||||||
|
|
||||||
return new function() {
|
|
||||||
this.guildId = guildId
|
|
||||||
this.id = id
|
|
||||||
this.db = db
|
|
||||||
|
|
||||||
this.get = async function(key) {
|
|
||||||
let result = await this.db.memberGetAsync(this.guildId + '-' + this.id + '-' + key)
|
|
||||||
|
|
||||||
if(result === null) {
|
|
||||||
return this.db.client.config.defaultMemberData[key]
|
|
||||||
} else {
|
|
||||||
if(String(result).startsWith('[') || String(result).startsWith('{')) return JSON.parse(result)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.set = async function(key, value) {
|
|
||||||
if(typeof(value) === 'object') value = JSON.stringify(value)
|
|
||||||
|
|
||||||
return await this.db.memberSetAsync(this.guildId + '-' + this.id + '-' + key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.delete = async function() {
|
|
||||||
return await this.db.deleteMember(this.guildId, this.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async getGuild(id) {
|
|
||||||
let db = this
|
|
||||||
|
|
||||||
return new function() {
|
|
||||||
this.id = id
|
|
||||||
this.db = db
|
|
||||||
|
|
||||||
this.get = async function(key) {
|
|
||||||
let result = await this.db.guildGetAsync(this.id + '-' + key)
|
|
||||||
|
|
||||||
if(result === null) {
|
|
||||||
return this.db.client.config.defaultGuildData[key]
|
|
||||||
} else {
|
|
||||||
if(String(result).startsWith('[') || String(result).startsWith('{')) return JSON.parse(result)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.set = async function(key, value) {
|
|
||||||
if(typeof(value) === 'object') value = JSON.stringify(value)
|
|
||||||
|
|
||||||
return await this.db.guildSetAsync(this.id + '-' + key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.delete = async function() {
|
|
||||||
return await this.db.deleteGuild(this.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deletes specified guild entry
|
|
||||||
async deleteGuild(id) {
|
|
||||||
for await (const key of this.guildGenerators.keysMatching(id + '-*')) {
|
|
||||||
this.guild.del(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deletes specified user and their member entries in guilds
|
|
||||||
async deleteUser(id) {
|
|
||||||
for await (const key of this.userGenerators.keysMatching(id + '-*')) {
|
|
||||||
this.user.del(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
for await (const key of this.memberGenerators.keysMatching('*-' + id + '-*')) {
|
|
||||||
this.member.del(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deletes member of user in specified guild
|
|
||||||
async deleteMember(guildId, id) {
|
|
||||||
for await (const key of this.memberGenerators.keysMatching(guildId + '-' + id + '-*')) {
|
|
||||||
this.member.del(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = RedisDatabase
|
module.exports = Redis;
|
Loading…
Reference in a new issue