@kotori-bot/core
Version:
Kotori Core
178 lines (177 loc) • 4.76 kB
TypeScript
import { type EventDataApiBase, type Message, MessageScope, type MessageQuick, type CommandResult, type EventDataPrivateMsg, type EventDataGroupMsg, type EventDataChannelMsg } from '../types';
import type { Adapter } from './adapter';
import { formatFactory } from '../utils/factory';
import { CommandError } from '../utils/error';
import type { Api } from './api';
import type { Elements } from './elements';
import type { I18n } from '@kotori-bot/i18n';
declare class SessionOrigin<T extends EventDataApiBase = EventDataApiBase> implements EventDataApiBase {
/**
* Api instance of current session.
*
* @readonly
*/
readonly api: Api;
/**
* Elements instance of current session.
*
* @readonly
*/
readonly el: Elements;
/**
* I18n instance of current session.
*
* @readonly
*/
readonly i18n: I18n;
/**
* Session unique id, generated base on `type`. `userId`, `groupId`, `guildId`, `channelId`.
*
* @readonly
*/
readonly id: string;
/**
* Send message to current session.
*
* @param message - Message to send
* @returns Message id and sent time
*/
send(message: Message): Promise<import("../types").SendMessageResponse>;
/**
* Format message template with data.
*
* @param template - Message template
* @param data - Data to format
* @returns Formatted message
*/
readonly format: ReturnType<typeof formatFactory>;
/**
* Send message to current session, it's packed base on `session.send()`, `session.i18n` and `session.format()`.
*
* @param message - Message to send
* @returns Message id and sent time
*
* @async
*/
quick(message: MessageQuick): Promise<void>;
/**
* Get message from current session.
*
* @param message - Message to get
* @returns Message id and sent time
*/
json(message: unknown): Promise<import("../types").SendMessageResponse>;
/**
* Prompt message to current session.
*
* @param message - Message to prompt
* @returns Message from current session
*
* @async
*/
prompt(message?: Message): Promise<Message>;
/**
* Confirm message to current session.
*
* @param options - Options to confirm
* @returns Message from current session
*
* @async
*/
confirm(options?: {
message: Message;
sure: Message;
}): Promise<boolean>;
/**
* Create a command error.
*
* @param type - Error type
* @param data - Error data
* @returns Command error
*/
error<K extends keyof CommandResult>(type: K, data?: CommandResult[K]): CommandError;
readonly t: I18n['t'];
/**
* Session type
*
* @readonly
*/
readonly type: EventDataApiBase['type'];
/**
* Session time, milliseconds timestamp.
*
* @readonly
*/
readonly time: number;
/**
* Session related user id if exists.
*
* @readonly
*/
readonly userId?: string;
/**
* Session related operator id if exists.
*
* @readonly
*/
readonly operatorId?: string;
/**
* Session related message id if exists.
*
* @readonly
*/
readonly messageId?: string;
/**
* Session related group id if exists.
*
* @readonly
*/
readonly groupId?: string;
/**
* Session related channel id if exists.
*
* @readonly
*/
readonly channelId?: string;
/**
* Session related guild id if exists.
*
* @readonly
*/
readonly guildId?: string;
/**
* Session related meta data if exists, it is customized by the specific adapter.
*
* @readonly
*/
readonly meta?: EventDataApiBase['meta'];
/**
* Create a session instance.
*
* @param data - Session data
* @param adapter - Adapter instance
*
* @constructor
*/
constructor(data: T, adapter: Adapter);
}
/**
* Session instance.
*
* @class Session
* @extends {SessionOrigin}
* @template T
*/
export type Session<T extends EventDataApiBase = EventDataApiBase> = SessionOrigin<T> & T;
export type SessionMsg = Session<EventDataPrivateMsg | EventDataGroupMsg | EventDataChannelMsg>;
export type SessionMsgPrivate = Session<EventDataPrivateMsg>;
export type SessionMsgGroup = Session<EventDataGroupMsg>;
export type SessionMsgChannel = Session<EventDataChannelMsg>;
/**
* Session event.
*
* @class
* @template T - Session event data type
*/
export declare const Session: new <T extends EventDataApiBase<MessageScope> = EventDataApiBase<MessageScope>>(data: T, bot: Adapter) => Session<T>;
export {};