import { type ServerProperties } from '../ServerProperties'; export interface MessagePrefix { nick: string; user?: string; host?: string; } export interface MessageParam { value: string; trailing: boolean; } export interface BaseMessageParamSpecEntry { trailing?: boolean; rest?: boolean; noClient?: boolean; noServer?: boolean; type?: 'channel' | 'channelList'; match?: RegExp; } export interface RequiredMessageParamSpecEntry extends BaseMessageParamSpecEntry { optional?: false; } export interface OptionalMessageParamSpecEntry extends BaseMessageParamSpecEntry { optional: true; } export type MessageParamSpecEntry = Optional extends true ? OptionalMessageParamSpecEntry : RequiredMessageParamSpecEntry; export type MessageParamSpecEntryFor = undefined extends T ? T extends undefined ? never : MessageParamSpecEntry : MessageParamSpecEntry; export type MessageFields = { [K in keyof T]?: string; }; export type MessageParamSpec> = { [K in Extract]-?: MessageParamSpecEntryFor; }; export interface MessageInternalContents { params?: MessageParam[]; tags?: Map; prefix?: MessagePrefix; rawLine?: string; } export interface MessageInternalConfig { serverProperties?: ServerProperties; isServer?: boolean; shouldParseParams?: boolean; } export interface MessageConstructor extends Function { COMMAND: string; SUPPORTS_CAPTURE: boolean; checkParam: (param: string, spec: MessageParamSpecEntry, serverProperties?: ServerProperties) => boolean; new (command: string, contents?: MessageInternalContents, config?: MessageInternalConfig): T; } export type MessageParamNames> = Extract; export type MessageParams> = { [K in MessageParamNames]: MessageParam; }; export type MessageFieldsFromType = T extends Message ? Fields extends MessageFields ? Fields : never : never; export declare function prefixToString(prefix: MessagePrefix): string; export declare function createMessage(type: MessageConstructor, params: Partial>, prefix?: MessagePrefix, tags?: Map, serverProperties?: ServerProperties, isServer?: boolean): T; export declare class Message = {}> { static readonly COMMAND: string; static readonly SUPPORTS_CAPTURE: boolean; readonly _paramSpec?: MessageParamSpec; protected _tags: Map; protected _prefix?: MessagePrefix; protected _command: string; protected _params?: MessageParam[]; /** @internal */ _parsedParams?: MessageParams; protected _serverProperties: ServerProperties; private readonly _raw?; static checkParam(param: string, spec: MessageParamSpecEntry, serverProperties?: ServerProperties): boolean; constructor(command: string, { params, tags, prefix, rawLine }?: MessageInternalContents, { serverProperties, isServer, shouldParseParams }?: MessageInternalConfig, paramSpec?: MessageParamSpec); getMinParamCount(isServer?: boolean): number; get paramCount(): number; prefixToString(): string; tagsToString(): string; toString(includePrefix?: boolean, fromRawParams?: boolean): string; /** @private */ _initPrefixAndTags(prefix?: MessagePrefix, tags?: Map): void; parseParams(isServer?: boolean): void; get rawParamValues(): string[]; get prefix(): MessagePrefix | undefined; get command(): string; get tags(): Map; get rawLine(): string | undefined; isResponseTo(originalMessage: Message): boolean; endsResponseTo(originalMessage: Message): boolean; _acceptsInReplyCollection(message: Message): boolean; private _buildCommandFromNamedParams; private _buildCommandFromRawParams; }