/// <reference types="node" />
import * as Discord from "db-discord-discord.js";
import { EventEmitter } from "events";
import { TableType } from "./db-discord";
import { KeyPairValue, Regexify } from "./utilities";
export interface SearchArguments<T> {
    searchTerm?: string;
    searchObject?: Partial<T>;
    regexChecker?: Partial<Regexify<T>>;
    callback?: (obj: T) => boolean;
}
export declare interface Table<T> {
    on(event: "write", listener: (obj: T) => void): this;
    emit(event: "write", args: T): boolean;
}
export declare abstract class Table<T> extends EventEmitter {
    abstract type: TableType;
    name: string;
    id: string;
    protected channel: Discord.TextChannel;
    constructor(channel: Discord.TextChannel);
    abstract write(obj: T): Promise<string>;
    abstract get(id: string): Promise<T>;
    delete(id: string): Promise<{}>;
    abstract search(searchArguments: SearchArguments<T>): Promise<KeyPairValue<string, T>[]>;
}
