54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
![]() |
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();
|
||
|
}
|
||
|
}
|