zappyzep/src/data/GuildPersistedData.ts

54 lines
1.3 KiB
TypeScript
Raw Normal View History

2018-07-30 23:35:44 +03:00
import knex from "../knex";
import PersistedData from "../models/PersistedData";
export interface IPartialPersistData {
roles?: string[];
nickname?: string;
is_voice_muted?: boolean;
}
export class GuildPersistedData {
protected guildId: string;
constructor(guildId) {
this.guildId = guildId;
}
async find(userId: string) {
const result = await knex("persisted_data")
.where("guild_id", this.guildId)
.where("user_id", userId)
.first();
return result ? new PersistedData(result) : null;
}
async set(userId: string, data: IPartialPersistData = {}) {
const finalData: any = {};
if (data.roles) finalData.roles = data.roles.join(",");
if (data.nickname) finalData.nickname = data.nickname;
if (data.is_voice_muted) finalData.is_voice_muted = data.is_voice_muted ? 1 : 0;
const existing = await this.find(userId);
if (existing) {
await knex("persisted_data")
.where("guild_id", this.guildId)
.where("user_id", userId)
.update(finalData);
} else {
await knex("persisted_data").insert({
...finalData,
guild_id: this.guildId,
user_id: userId
});
}
}
async clear(userId: string) {
await knex("persisted_data")
.where("guild_id", this.guildId)
.where("user_id", userId)
.delete();
}
}