UNPKG

db-discord

Version:

db-discord is a library that uses discord guilds and text channels as databases. db-discord relies on discord.js

44 lines (42 loc) 1.76 kB
import * as Discord from "db-discord-discord.js" import { Table, SearchArguments } from "./Table"; import { TableType } from "./db-discord"; import { KeyPairValue, Regexify, betterSearch } from "./utilities"; export class ShortTable<T> extends Table<T> { public type: TableType = "short"; async write(obj: T): Promise<string> { this.emit("write", obj) return ((await this.channel.send(JSON.stringify(obj))) as Discord.Message).id; } async writeExpectSearch(obj: T): Promise<string> { let id = await this.write(obj) let search: KeyPairValue<string, T>[] = [] while (search.length === 0) { search = (await this.search(obj)).filter(x => x.Key === id) } return id; } async get(id: string): Promise<T> { return JSON.parse((await this.channel.fetchMessage(id)).content); } async search(searchArguments: SearchArguments<T>): Promise<KeyPairValue<string, T>[]> { let search = searchArguments.searchObject || searchArguments.searchTerm; if (search === undefined) { search = ""; } return await betterSearch(this.channel, async x => JSON.parse(x.content) as T, search, searchArguments.regexChecker, searchArguments.callback) } async update(id: string, _obj: ((o: T) => T) | T): Promise<{}> { let obj = (o: T) => o; if (typeof _obj === "function") { obj = (_obj as (o: T) => T) } else { obj = (o: T) => _obj } let message = await this.channel.fetchMessage(id) let data = JSON.parse(message.content) as T await message.edit(JSON.stringify(obj(data))) return {} } }