import { type Raw } from '../platform.node.js';
import type { Snake } from '../Client/Snake.js';
import type { Update } from '../TL/Updates/Update.js';
export interface Props {
    client: Snake;
    update?: Raw.TypeUpdates;
}
export type CallbackFn = (props: Props) => any | Promise<any>;
export type CallbackFnLogin = (props: Props) => Raw.users.UserFull | Promise<Raw.users.UserFull>;
export type CallbackFnUpdate = (props: Props) => Array<Update | Raw.TypeUpdates> | Promise<Array<Update | Raw.TypeUpdates>>;
export type PluginApiFn = (PluginApi: TgsnakeApi) => any | Promise<any>;
export type PluginApiObj = {
    init: PluginApiFn;
};
export interface ListGetterEventHandler {
    beforeStart: ReadonlyArray<CallbackFn>;
    afterStart: ReadonlyArray<CallbackFn>;
    onLogin: ReadonlyArray<CallbackFnLogin>;
    gracefullyStop: ReadonlyArray<CallbackFn>;
    beforeParseUpdate: ReadonlyArray<CallbackFn>;
    onParseUpdate: ReadonlyArray<CallbackFnUpdate>;
    afterParseUpdate: ReadonlyArray<CallbackFn>;
}
export interface ListSetterEventHandler {
    beforeStart: CallbackFn;
    afterStart: CallbackFn;
    onLogin: CallbackFnLogin;
    gracefullyStop: CallbackFn;
    beforeParseUpdate: CallbackFn;
    onParseUpdate: CallbackFnUpdate;
    afterParseUpdate: CallbackFn;
}
export declare class TgsnakeApi {
    private _beforeStartHandler;
    private _afterStartHandler;
    private _onLoginHandler;
    private _gracefullyStopHandler;
    private _beforeParseUpdateHandler;
    private _onParseUpdateHandler;
    private _afterParseUpdateHandler;
    constructor();
    addEventHandler<K extends keyof ListSetterEventHandler>(filter: K, func: ListSetterEventHandler[K]): void;
    getEventHandler<K extends keyof ListGetterEventHandler>(filter: K): ListGetterEventHandler[K];
    toJSON(): {
        [key: string]: any;
    };
    toString(): string;
}
