import * as _tanebijs_protobuf from '@tanebijs/protobuf';
import { ProtoMessage, InferProtoModel, InferProtoModelInput, ScalarType } from '@tanebijs/protobuf';
import * as zod from 'zod';
import EventEmitter$1, { EventEmitter } from 'node:events';
import { Socket } from 'node:net';

declare abstract class BotEntity<T> {
    bot: Bot;
    data: T;
    constructor(bot: Bot, data: T);
    updateBinding(data: T): void;
}

declare const MessageElement: ProtoMessage<{
    readonly text: _tanebijs_protobuf.ProtoSpec<() => {
        readonly str: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly link: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly attr6Buf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly attr7Buf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly buf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly face: _tanebijs_protobuf.ProtoSpec<() => {
        readonly index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly old: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly buf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly onlineImage: _tanebijs_protobuf.ProtoSpec<() => {
        readonly guid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly filePath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly oldVerSendFile: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly notOnlineImage: _tanebijs_protobuf.ProtoSpec<() => {
        readonly filePath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly fileLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly downloadPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly oldVerSendFile: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly imgType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly previewsImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly picMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly picHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly picWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly resId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly flag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly thumbUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly bigUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly origUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly result: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly opFaceBuf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly oldPicMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
        readonly thumbWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly showLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly downloadLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly x400Url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly x400Width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly x400Height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly pbRes: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field3: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field4: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            summary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            field10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            pbRes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            md5Str: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }, true, false>;
    readonly trans: _tanebijs_protobuf.ProtoSpec<() => {
        readonly elemType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly elemValue: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly marketFace: _tanebijs_protobuf.ProtoSpec<() => {
        readonly summary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly itemType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly info: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly faceId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly tabId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly key: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<() => {
            readonly field8: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        }, true, false>;
    }, true, false>;
    readonly customFace: _tanebijs_protobuf.ProtoSpec<() => {
        readonly guid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly filePath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly shortcut: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly buffer: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly flag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly oldData: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly fileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly serverIp: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly serverPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly fileType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly signature: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly useful: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly md5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly thumbUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bigUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly origUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly repeatIndex: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly repeatImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly imageType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly source: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly size: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly origin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly thumbHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly showLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly downloadLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly x400Url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly x400Width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly x400Height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field3: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field4: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            summary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            field10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            pbRes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        }, true, false>;
    }, true, false>;
    readonly flags2: _tanebijs_protobuf.ProtoSpec<() => {
        readonly colorTextId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly msgId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
        readonly whisperSessionId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly pttChangeBit: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly vipStatus: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly compatibleId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly insts: _tanebijs_protobuf.ProtoSpec<() => {
            readonly appId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly instId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, false, true>;
        readonly msgRptCnt: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly srcInst: _tanebijs_protobuf.ProtoSpec<() => {
            readonly appId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly instId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly longtitude: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly latitude: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly customFont: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly pcSupportDef: _tanebijs_protobuf.ProtoSpec<() => {
            readonly pcPtlBegin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly pcPtlEnd: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly macPtlBegin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly macPtlEnd: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly ptlsSupport: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, true>;
            readonly ptlsNotSupport: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, true>;
        }, true, false>;
        readonly crmFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, true, false>;
    }, true, false>;
    readonly richMsg: _tanebijs_protobuf.ProtoSpec<() => {
        readonly template1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly serviceId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly msgResId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly rand: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly seq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
    }, true, false>;
    readonly groupFile: _tanebijs_protobuf.ProtoSpec<() => {
        readonly filename: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT64, false, false>;
        readonly fileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly batchId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly fileKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly mark: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly sequence: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT64, false, false>;
        readonly batchItemId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly feedMsgTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly extraInfo: _tanebijs_protobuf.ProtoSpec<() => {
        readonly nick: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly groupCard: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly level: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly flags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly groupMask: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly msgTailId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly senderTitle: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly apnsTips: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly uin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
        readonly msgStateFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly apnsSoundType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly newGroupFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
    }, true, false>;
    readonly videoFile: _tanebijs_protobuf.ProtoSpec<() => {
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly fileMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly fileFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fileTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbFileMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly source: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly thumbFileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fromChatType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly toChatType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly boolSupportProgressive: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
        readonly fileWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fileHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly subBusiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly videoAttr: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly bytesThumbFileUrls: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, false, true>;
        readonly bytesVideoFileUrls: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, false, true>;
        readonly thumbDownloadFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly videoDownloadFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly anonGroupMsg: _tanebijs_protobuf.ProtoSpec<() => {
        readonly flags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly anonId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly anonNick: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly headPortrait: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly expireTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly bubbleId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly rankColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly qqWalletMsg: _tanebijs_protobuf.ProtoSpec<() => {
        readonly type: _tanebijs_protobuf.ProtoSpec<() => {
            sendUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            sender: _tanebijs_protobuf.ProtoSpec<() => {
                readonly background: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly icon: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly title: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly subtitle: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly content: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly linkUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly blackStripe: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly notice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly titleColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly subtitleColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly actionsPriority: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly jumpUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly nativeIos: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly nativeAndroid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly iconUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly contentColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly contentBgColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly aioImageLeft: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly aioImageRight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly cftImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            receiver: _tanebijs_protobuf.ProtoSpec<() => {
                readonly background: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly icon: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly title: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly subtitle: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly content: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly linkUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly blackStripe: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly notice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly titleColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly subtitleColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly actionsPriority: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly jumpUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly nativeIos: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly nativeAndroid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly iconUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly contentColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly contentBgColor: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly aioImageLeft: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly aioImageRight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly cftImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            channelId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            templateId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            resend: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            msgPriority: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            redType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            billNo: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            authKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            sessionType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            msgType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            envelOpeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            name: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            confType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            msgFrom: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            pcBody: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            redChannel: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            grapUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, true>;
            pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        }, true, false>;
    }, true, false>;
    readonly custom: _tanebijs_protobuf.ProtoSpec<() => {
        readonly desc: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly data: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly enumType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly ext: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly sound: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly generalFlags: _tanebijs_protobuf.ProtoSpec<() => {
        readonly bubbleDiyTextId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly groupFlagNew: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly uin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
        readonly rpId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly prpFold: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly longTextFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly longTextResId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly groupType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly toUinFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly glamourLevel: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly memberLevel: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly groupRankSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT64, false, false>;
        readonly olympicTorch: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly babyqGuideMsgCookie: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly uin32ExpertFlag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly bubbleSubId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pendantId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT64, false, false>;
        readonly rpIndex: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly srcMsg: _tanebijs_protobuf.ProtoSpec<() => {
        readonly origSeqs: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, true>;
        readonly senderUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly flag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly elems: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, false, true>;
        readonly type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly richMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<() => {
            messageId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            senderUid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            receiverUid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            friendSequence: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, true, false>;
        }, true, false>;
        readonly sourceMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly toUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, true, false>;
        readonly troopName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly lightApp: _tanebijs_protobuf.ProtoSpec<() => {
        readonly data: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly msgResid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
    }, true, false>;
    readonly common: _tanebijs_protobuf.ProtoSpec<() => {
        readonly serviceType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbElement: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly businessType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }, true, false>;
}>;

declare enum MessageType {
    PrivateMessage = 1,
    GroupMessage = 2
}
type MessageElementDecoded = InferProtoModel<typeof MessageElement.fields>;
type MessageElementEncoded = InferProtoModelInput<typeof MessageElement.fields>;

interface OutgoingSegmentBuilder<T extends string, S> {
    segmentType: T;
    build(segment: S, msg: OutgoingMessage): MessageElementEncoded | MessageElementEncoded[] | undefined;
}
type ConstructInputType<P> = P extends OutgoingSegmentBuilder<infer T, infer S> ? {
    type: T;
} & S : never;
declare class OutgoingSegmentCollection<T extends OutgoingSegmentBuilder<string, unknown>[]> {
    private builderMap;
    constructor(builders: T);
    build(segment: ConstructInputType<T[number]>, msg: OutgoingMessage): MessageElementEncoded[];
}

declare const outgoingSegments: OutgoingSegmentCollection<(OutgoingSegmentBuilder<"mention", {
    name: string;
    uin: number;
    uid: string;
}> | OutgoingSegmentBuilder<"text", {
    content: string;
}> | OutgoingSegmentBuilder<"image", {
    msgInfo: _tanebijs_protobuf.InferProtoModelInput<{
        readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
            readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                        type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
                readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                }, true, false>;
                readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
            readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
            readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
            readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
        }, false, true>;
        readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
            readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
    }>;
    compatImage?: _tanebijs_protobuf.InferProtoModelInput<{
        readonly filePath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly fileLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly downloadPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly oldVerSendFile: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly imgType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly previewsImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly picMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly picHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly picWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly resId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly flag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly thumbUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly bigUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly origUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly result: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly opFaceBuf: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly oldPicMd5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
        readonly thumbWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly fileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly showLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly downloadLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly x400Url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly x400Width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly x400Height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly pbRes: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field3: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field4: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            summary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            field10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            pbRes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            md5Str: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }>;
    compatFace?: _tanebijs_protobuf.InferProtoModelInput<{
        readonly guid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly filePath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly shortcut: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly buffer: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly flag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly oldData: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly fileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly serverIp: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly serverPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly fileType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly signature: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly useful: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly md5: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        readonly thumbUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bigUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly origUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly repeatIndex: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly repeatImage: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly imageType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly index: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly source: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly size: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly origin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly thumbWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly thumbHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly showLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly downloadLen: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly x400Url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly x400Width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly x400Height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly pbReserve: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field3: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            field4: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            summary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            field10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
            pbRes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        }, true, false>;
    }>;
}> | OutgoingSegmentBuilder<"face", {
    oldFaceId: number;
} | {
    largeFaceInfo: _tanebijs_protobuf.InferProtoModelInput<{
        readonly aniStickerPackId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly aniStickerId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly faceId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly field4: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly aniStickerType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
        readonly field6: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly preview: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly field9: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
    }>;
} | {
    smallExtraFaceInfo: _tanebijs_protobuf.InferProtoModelInput<{
        readonly faceId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly text1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly text2: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
    }>;
}> | OutgoingSegmentBuilder<"record", {
    msgInfo: _tanebijs_protobuf.InferProtoModelInput<{
        readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
            readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                        type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
                readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                }, true, false>;
                readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
            readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
            readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
            readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
        }, false, true>;
        readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
            readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
    }>;
}> | OutgoingSegmentBuilder<"forward", {
    resId: string;
    preview: string[];
    count: number;
}>)[]>;
type OutgoingSegment = Exclude<Parameters<typeof outgoingSegments.build>[0], undefined>;
type OutgoingSegmentOf<T extends OutgoingSegment['type']> = Extract<OutgoingSegment, {
    type: T;
}>;
declare const sendBlob: unique symbol;
interface ReplyInfo {
    sequence: number;
    senderUin: number;
    senderUid: string;
    messageUid: bigint;
    elements: Buffer[];
}
interface OutgoingMessageBase {
    type: MessageType;
    segments: OutgoingSegment[];
    clientSequence: number;
    random: number;
    reply?: ReplyInfo;
    [sendBlob]?: Buffer;
}
interface OutgoingPrivateMessage extends OutgoingMessageBase {
    type: MessageType.PrivateMessage;
    targetUin: number;
    targetUid?: string;
    repliedClientSequence?: number;
}
interface OutgoingGroupMessage extends OutgoingMessageBase {
    type: MessageType.GroupMessage;
    groupUin: number;
}
type OutgoingMessage = OutgoingPrivateMessage | OutgoingGroupMessage;

declare abstract class BotContact<T extends {
    uin: number;
} = {
    uin: number;
}> extends BotEntity<T> {
    protected constructor(bot: Bot, data: T);
    get uin(): number;
}

type ElementField = keyof MessageElementDecoded;
interface IncomingElementParser<F extends ElementField, T extends string, O> {
    acceptsField: F;
    segmentType: T;
    tryParse(element: Exclude<MessageElementDecoded[F], undefined>): O | undefined;
}
type ConstructReturnType<P> = P extends IncomingElementParser<ElementField, infer T, infer O> ? {
    type: T;
} & O : never;
declare class IncomingSegmentCollection<const T extends IncomingElementParser<ElementField, string, unknown>[]> {
    readonly parsers: T;
    constructor(parsers: T);
    parse(element: MessageElementDecoded): ConstructReturnType<T[number]> | undefined;
}

declare const IndexNode: ProtoMessage<{
    readonly info: _tanebijs_protobuf.ProtoSpec<() => {
        readonly fileSize: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly fileHash: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly fileSha1: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly fileName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly type: _tanebijs_protobuf.ProtoSpec<() => {
            type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            picFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            videoFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            voiceFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly width: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly height: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly time: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly original: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    }, true, false>;
    readonly fileUuid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
    readonly storeId: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly uploadTime: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly ttl: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly subType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
}>;

interface ImageSegment {
    indexNode?: InferProtoModel<typeof IndexNode.fields>;
    url?: string;
    width: number;
    height: number;
    subType: ImageSubType;
    summary: string;
}
declare enum ImageSubType {
    Picture = 0,
    Face = 1
}

interface FaceSegment {
    faceId: number;
    summary?: string;
    isInLargeCategory: boolean;
}

declare const incomingSegments: IncomingSegmentCollection<[IncomingElementParser<"text", "text", {
    readonly content: string;
}>, IncomingElementParser<"text", "mention", {
    readonly name: string;
    readonly uin: number;
}>, IncomingElementParser<"face", "face", FaceSegment>, IncomingElementParser<"common", "face", FaceSegment>, IncomingElementParser<"common", "image", ImageSegment>, IncomingElementParser<"common", "record", {
    readonly indexNode: InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>;
}>, IncomingElementParser<"common", "video", {
    readonly indexNode: InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>;
}>, IncomingElementParser<"richMsg", "forward", {
    readonly resId: string;
    readonly recursiveCount: number;
    readonly preview: string[];
}>, IncomingElementParser<"notOnlineImage", "image", ImageSegment>, IncomingElementParser<"customFace", "image", ImageSegment>, IncomingElementParser<"lightApp", "lightApp", {
    app: string;
    payload: zod.TypeOf<zod.ZodObject<{
        app: zod.ZodString;
    }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{
        app: zod.ZodString;
    }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{
        app: zod.ZodString;
    }, zod.ZodTypeAny, "passthrough">>>;
}>]>;
type IncomingSegment = Exclude<ReturnType<typeof incomingSegments.parse>, undefined>;
type IncomingSegmentOf<T extends IncomingSegment['type']> = Extract<IncomingSegment, {
    type: T;
}>;
declare const blob: unique symbol;
declare const rawElems: unique symbol;
declare const msgUid: unique symbol;
interface MessageBase {
    type: MessageType;
    senderUin: number;
    targetUin: number;
    senderUid?: string;
    senderName: string;
    sequence: number;
    repliedSequence?: number;
    segments: IncomingSegment[];
    [blob]: Buffer;
    [rawElems]: Buffer[];
    [msgUid]: bigint;
}
interface PrivateMessage extends MessageBase {
    type: MessageType.PrivateMessage;
    targetUid?: string;
    clientSequence: number;
    random: number;
    isTemporary: boolean;
}
interface GroupMessage extends MessageBase {
    type: MessageType.GroupMessage;
    groupUin: number;
    senderDataBindingUpdate?: {
        nickname?: string;
        card?: string;
        level?: number;
        specialTitle?: string;
    };
}
type IncomingMessage = PrivateMessage | GroupMessage;
declare function parsePushMsgBody(raw: Buffer): IncomingMessage;

declare const rawMessage: unique symbol;
type DispatchedMessageBody = {
    type: 'bubble';
    content: BotMsgBubble;
} | {
    type: 'image';
    content: BotMsgImage;
} | {
    type: 'record';
    content: BotMsgRecord;
} | {
    type: 'video';
    content: BotMsgVideo;
} | {
    type: 'forward';
    content: BotMsgForwardPack;
} | {
    type: 'lightApp';
    content: BotMsgLightApp;
};
type DispatchedMessage = DispatchedMessageBody & {
    sequence: number;
    repliedSequence?: number;
    messageUid: bigint;
};
declare class MessageDispatcher {
    readonly bot: Bot;
    readonly global: EventEmitter<{
        private: [BotFriend, BotFriendMessage];
        group: [BotGroup, BotGroupMember, BotGroupMessage];
    }>;
    constructor(bot: Bot);
    emit(incoming: IncomingMessage): Promise<void>;
    create(incoming: IncomingMessage, contact: BotContact): Promise<DispatchedMessageBody | undefined>;
    dispatch(message: DispatchedMessageBody, raw: IncomingMessage, contact: BotContact): Promise<void>;
    resolveContact(incoming: IncomingMessage): Promise<BotContact<{
        uin: number;
    }> | undefined>;
    private handleLightApp;
}

declare abstract class AbstractMessageBuilder {
    protected readonly bot: Bot;
    protected segments: OutgoingSegment[];
    protected constructor(bot: Bot);
    /**
     * Append a text segment to the message
     */
    text(content: string): void;
    /**
     * Append a face segment to the message
     */
    face(faceId: number): void;
    face(faceId: string): void;
    /**
     * Append an image segment to the message
     */
    abstract image(data: Buffer, subType?: ImageSubType, summary?: string): Promise<void>;
    /**
     * Append a record segment to the message
     */
    abstract record(data: Buffer, duration: number): Promise<void>;
    /**
     * Append a forward segment to the message
     */
    abstract forward(packMsg: (p: ForwardedMessagePacker) => void | Promise<void>): Promise<OutgoingSegmentOf<'forward'>>;
    /**
     * Build the message
     */
    abstract build(clientSequence: number): OutgoingMessage;
}

declare enum PushMsgType {
    PrivateMessage = 166,
    GroupMessage = 82,
    TempMessage = 141,
    Event0x210 = 528,// friend related event
    Event0x2DC = 732,// group related event
    PrivateRecordMessage = 208,
    PrivateFileMessage = 529,
    GroupInvitedJoinRequest = 525,// from group member invitation
    GroupJoinRequest = 84,// directly entered
    GroupInvitation = 87,// the bot self is being invited
    GroupAdminChange = 44,// admin change, both on and off
    GroupMemberIncrease = 33,
    GroupMemberDecrease = 34
}
declare const PushMsgBody: ProtoMessage<{
    readonly responseHead: _tanebijs_protobuf.ProtoSpec<() => {
        fromUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        fromUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        sigMap: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        toUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        toUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        friendExt: _tanebijs_protobuf.ProtoSpec<() => {
            friendName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        }, true, false>;
        groupExt: _tanebijs_protobuf.ProtoSpec<() => {
            groupUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            memberName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
            unknown5: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            groupName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
        }, true, false>;
    }, false, false>;
    readonly contentHead: _tanebijs_protobuf.ProtoSpec<() => {
        readonly type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly c2cCmd: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly random: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly sequence: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly timestamp: _tanebijs_protobuf.ProtoSpec<ScalarType.INT64, true, false>;
        readonly pkgNum: _tanebijs_protobuf.ProtoSpec<ScalarType.INT64, true, false>;
        readonly pkgIndex: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly divSeq: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly autoReply: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly ntMsgSeq: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        readonly msgUid: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, true, false>;
        readonly forward: _tanebijs_protobuf.ProtoSpec<() => {
            field1: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
            field2: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
            field3: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
            unknownBase64: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            avatar: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        }, true, false>;
    }, false, false>;
    readonly body: _tanebijs_protobuf.ProtoSpec<() => {
        readonly richText: _tanebijs_protobuf.ProtoSpec<() => {
            readonly attribute: _tanebijs_protobuf.ProtoSpec<() => {
                readonly codePage: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly time: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly random: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly color: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly size: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly effect: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly charSet: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly pitchAndFamily: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly fontName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly reserveData: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly elements: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, false, true>;
            readonly notOnlineFile: _tanebijs_protobuf.ProtoSpec<() => {
                readonly fileType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly sig: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileUuid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly fileMd5: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly fileSize: _tanebijs_protobuf.ProtoSpec<ScalarType.INT64, true, false>;
                readonly note: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly reserved: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly subcmd: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly microCloud: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly bytesFileUrls: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, false, true>;
                readonly downloadFlag: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly dangerEvel: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly lifeTime: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly uploadTime: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly absFileType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly clientType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly expireTime: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, true, false>;
                readonly pbReserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileHash: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            }, true, false>;
            readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                readonly fileType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly srcUin: _tanebijs_protobuf.ProtoSpec<ScalarType.INT64, false, false>;
                readonly fileUuid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly fileMd5: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly fileSize: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly reserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileId: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly serverIp: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly serverPort: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly boolValid: _tanebijs_protobuf.ProtoSpec<ScalarType.BOOL, false, false>;
                readonly signature: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly shortcut: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly fileKey: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly magicPttIndex: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly voiceSwitch: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly pttUrl: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly groupFileKey: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly time: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly downPara: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly format: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
                readonly pbReserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly bytesPttUrls: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, false, true>;
                readonly downloadFlag: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
            }, true, false>;
        }, true, false>;
        readonly msgContent: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
        readonly msgEncryptContent: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
    }, true, false>;
}>;

type OutgoingForwardedMessage = OutgoingPrivateMessage & {
    nick: string;
};

declare class ForwardedMessageBuilder extends AbstractMessageBuilder {
    private readonly uin;
    private readonly nick;
    constructor(uin: number, nick: string, bot: Bot);
    image(data: Buffer, subType?: ImageSubType, summary?: string): Promise<void>;
    forward(packMsg: (p: ForwardedMessagePacker) => void | Promise<void>): Promise<OutgoingSegmentOf<'forward'>>;
    record(): Promise<void>;
    build(clientSequence: number): OutgoingForwardedMessage;
}

declare class ForwardedMessagePacker {
    private readonly bot;
    private readonly groupUin?;
    private clientSequence;
    private messages;
    private preview;
    constructor(bot: Bot, groupUin?: number | undefined);
    /**
     * Add a fake message to the packer.
     * @param uin The uin that is supposed to "send" the message.
     * The constructed fake message will have an avatar of the specified uin.
     * @param nick The nickname of the sender.
     * @param buildMsg A callback that builds the message.
     */
    fake(uin: number, nick: string, buildMsg: (b: ForwardedMessageBuilder) => void | Promise<void>): Promise<void>;
    /**
     * Pack the messages.
     */
    pack(): Promise<OutgoingSegmentOf<'forward'>>;
}

declare class PrivateMessageBuilder extends AbstractMessageBuilder {
    protected readonly friendUin: number;
    protected readonly friendUid: string;
    replyInfo?: ReplyInfo;
    repliedClientSequence?: number;
    constructor(friendUin: number, friendUid: string, bot: Bot);
    reply(message: BotFriendMessage): void;
    image(data: Buffer, subType?: ImageSubType, summary?: string): Promise<void>;
    record(data: Buffer, duration: number): Promise<void>;
    forward(packMsg: (p: ForwardedMessagePacker) => void | Promise<void>): Promise<OutgoingSegmentOf<'forward'>>;
    build(clientSequence: number): OutgoingPrivateMessage;
}

declare class GroupMessageBuilder extends AbstractMessageBuilder {
    private readonly groupUin;
    replyInfo?: ReplyInfo;
    constructor(groupUin: number, bot: Bot);
    /**
     * Mention a member in the group
     * @param member The member to mention
     */
    mention(member: BotGroupMember): void;
    /**
     * Mention all members in the group
     */
    mentionAll(): void;
    /**
     * Reply to a group message
     */
    reply(message: BotGroupMessage): void;
    image(data: Buffer, subType?: ImageSubType, summary?: string): Promise<void>;
    record(data: Buffer, duration: number): Promise<void>;
    forward(packMsg: (p: ForwardedMessagePacker) => void | Promise<void>): Promise<OutgoingSegmentOf<'forward'>>;
    build(clientSequence: number): OutgoingGroupMessage;
}

interface BotFriendDataBinding {
    uin: number;
    uid: string;
    nickname?: string;
    remark?: string;
    signature?: string;
    qid?: string;
    category: number;
}
type BotFriendMessage = {
    isSelf: boolean;
    [rawMessage]: PrivateMessage;
} & DispatchedMessage;
type BotFriendSendMsgRef = {
    sequence: number;
    timestamp: number;
    recall: () => Promise<void>;
} & OutgoingPrivateMessage;
declare const eventsFDX: unique symbol;
declare class BotFriend extends BotContact<BotFriendDataBinding> {
    private readonly [eventsFDX];
    private clientSequence;
    constructor(bot: Bot, data: BotFriendDataBinding);
    get uid(): string;
    get nickname(): string | undefined;
    get remark(): string | undefined;
    get signature(): string | undefined;
    get qid(): string | undefined;
    get category(): number;
    get moduleName(): string;
    toString(): string;
    /**
     * Send a message to this friend
     * @param buildMsg Use this function to add segments to the message
     * @returns The message sequence number and timestamp
     */
    sendMsg(buildMsg: (b: PrivateMessageBuilder) => void | Promise<void>): Promise<BotFriendSendMsgRef>;
    /**
     * Send a gray tip poke to this friend
     */
    sendGrayTipPoke(): Promise<void>;
    /**
     * Subscribe to incoming messages from this friend
     */
    onMessage(listener: (message: BotFriendMessage) => void): void;
    /**
     * Subscribe to pokes from this friend
     */
    onPoke(listener: (isSelf: boolean, actionStr: string, actionImgUrl: string, suffix?: string) => void): void;
    /**
     * Subscribe to message recalls from this friend
     */
    onRecall(listener: (clientSequence: number, tip: string) => void): void;
}

declare enum IncreaseType {
    Approve = 130,
    Invite = 131
}
declare enum DecreaseType {
    KickSelf = 3,
    Exit = 130,
    Kick = 131
}

declare enum ReactionType {
    Face = 1,
    Emoji = 2
}

interface BotGroupDataBinding {
    uin: number;
    name: string;
    description?: string;
    question?: string;
    announcement?: string;
    createdTime: number;
    maxMemberCount: number;
    memberCount: number;
}
type BotGroupMessage = {
    sender: BotGroupMember;
    [rawMessage]: GroupMessage;
} & DispatchedMessage;
type BotGroupSendMsgRef = {
    sequence: number;
    timestamp: number;
    recall: () => Promise<void>;
} & OutgoingGroupMessage;
declare const eventsGDX: unique symbol;
declare class BotGroup extends BotContact<BotGroupDataBinding> {
    [eventsGDX]: EventEmitter$1<{
        message: [BotGroupMessage];
        joinRequest: [BotGroupJoinRequest];
        invitedJoinRequest: [BotGroupInvitedJoinRequest];
        adminChange: [BotGroupMember, boolean];
        memberIncrease: [BotGroupMember, IncreaseType, BotGroupMember?];
        memberLeave: [number];
        memberCardChange: [BotGroupMember, string, string];
        memberKick: [number, BotGroupMember?];
        mute: [BotGroupMember, BotGroupMember, number];
        unmute: [BotGroupMember, BotGroupMember];
        muteAll: [BotGroupMember, boolean];
        poke: [BotGroupMember, BotGroupMember, string, string, string?];
        essenceMessageChange: [number, BotGroupMember, boolean];
        recall: [number, string, BotGroupMember];
        reaction: [number, BotGroupMember, string, boolean, number];
    }>;
    private clientSequence;
    private readonly groupMemberCache;
    constructor(bot: Bot, data: BotGroupDataBinding);
    get name(): string;
    get description(): string | undefined;
    get question(): string | undefined;
    get announcement(): string | undefined;
    get createdTime(): number;
    get maxMemberCount(): number;
    get memberCount(): number;
    get moduleName(): string;
    toString(): string;
    /**
     * Get all members in this group
     * @param forceUpdate Whether to force update the cache
     */
    getMembers(forceUpdate?: boolean): Promise<MapIterator<BotGroupMember>>;
    /**
     * Get a member in this group
     * @param uin Uin of the member
     * @param forceUpdate Whether to force update the member info
     */
    getMember(uin: number, forceUpdate?: boolean): Promise<BotGroupMember | undefined>;
    /**
     * Send a message to this group
     * @param buildMsg Use this function to add segments to the message
     * @returns The message sequence number and timestamp
     */
    sendMsg(buildMsg: (b: GroupMessageBuilder) => void | Promise<void>): Promise<BotGroupSendMsgRef>;
    /**
     * Recall a message in this group.
     * To recall others' messages, you must be the owner / an admin of the group.
     */
    recallMsg(sequence: number): Promise<void>;
    /**
     * Set the name of this group.
     * You must be the owner / an admin of the group to do this.
     */
    setName(name: string): Promise<void>;
    /**
     * Set the name of this group.
     * You must be the owner / an admin of the group to do this.
     * Also note that the owner and admins are not influenced by this.
     */
    setMuteAll(isSet: boolean): Promise<void>;
    /**
     * Send a reaction to a message in this group
     * @param sequence The sequence number of the message
     * @param code The code of reaction. Refer to the [reaction code list](https://bot.q.qq.com/wiki/develop/api/openapi/emoji/model.html) for more information.
     * @param type The type of reaction corresponding to the message. Also refer to the reaction code list.
     * `1` for `ReactionType.Face`; `2` for `ReactionType.Emoji`.
     * @param isAdd Whether to add the reaction. If false, remove the reaction.
     */
    sendReaction(sequence: number, code: string, type: ReactionType, isAdd: boolean): Promise<void>;
    /**
     * Leave this group
     */
    leave(): Promise<void>;
    /**
     * Listen to messages in this group
     */
    onMessage(listener: (message: BotGroupMessage) => void): void;
    /**
     * Listen to join requests in this group
     */
    onJoinRequest(listener: (request: BotGroupJoinRequest) => void): void;
    /**
     * Listen to invited join requests in this group
     */
    onInvitedJoinRequest(listener: (request: BotGroupInvitedJoinRequest) => void): void;
    /**
     * Listen to admin changes in this group
     */
    onAdminChange(listener: (member: BotGroupMember, isPromote: boolean) => void): void;
    /**
     * Listen to member increase events in this group
     */
    onMemberIncrease(listener: (member: BotGroupMember, type: IncreaseType, operator?: BotGroupMember) => void): void;
    /**
     * Listen to member leave events in this group
     */
    onMemberLeave(listener: (uin: number) => void): void;
    /**
     * Listen to member card change events in this group
     */
    onMemberCardChange(listener: (member: BotGroupMember, oldCard: string, newCard: string) => void): void;
    /**
     * Listen to member kick events in this group
     */
    onMemberKick(listener: (uin: number, operator?: BotGroupMember) => void): void;
    /**
     * Listen to mute events in this group
     */
    onMute(listener: (member: BotGroupMember, operator: BotGroupMember, duration: number) => void): void;
    /**
     * Listen to unmute events in this group
     */
    onUnmute(listener: (member: BotGroupMember, operator: BotGroupMember) => void): void;
    /**
     * Listen to mute all events in this group
     */
    onMuteAll(listener: (operator: BotGroupMember, isSet: boolean) => void): void;
    /**
     * Listen to poke events in this group
     */
    onPoke(listener: (sender: BotGroupMember, receiver: BotGroupMember, actionStr: string, actionImgUrl: string, suffix?: string) => void): void;
    /**
     * Listen to essence message change events in this group
     */
    onEssenceMessageChange(listener: (sequence: number, operator: BotGroupMember, isAdd: boolean) => void): void;
    /**
     * Listen to recall events in this group
     */
    onRecall(listener: (sequence: number, tip: string, operator: BotGroupMember) => void): void;
    /**
     * Listen to reaction events in this group
     */
    onReaction(listener: (sequence: number, member: BotGroupMember, reactionCode: string, isAdd: boolean, count: number) => void): void;
}

declare enum GroupMemberPermission {
    Member = 0,
    Owner = 1,
    Admin = 2
}

interface BotGroupMemberDataBinding {
    uin: number;
    uid: string;
    nickname?: string;
    card?: string;
    level: number;
    specialTitle?: string;
    joinTime: number;
    lastMsgTime: number;
    shutUpTime?: number;
    permission: GroupMemberPermission;
}

declare class BotGroupMember extends BotEntity<BotGroupMemberDataBinding> {
    readonly group: BotGroup;
    constructor(bot: Bot, data: BotGroupMemberDataBinding, group: BotGroup);
    get uin(): number;
    get uid(): string;
    get nickname(): string | undefined;
    get card(): string | undefined;
    get level(): number;
    get specialTitle(): string | undefined;
    get joinTime(): number;
    get lastMsgTime(): number;
    get shutUpTime(): number | undefined;
    get permission(): GroupMemberPermission;
    get moduleName(): string;
    toString(): string;
    /**
     * Set or unset the admin permission of this member.
     */
    setAdmin(isAdmin: boolean): Promise<void>;
    /**
     * Set the card of this member.
     * You must be the owner / an admin of the group to do this.
     */
    setCard(card: string): Promise<void>;
    /**
     * Mute this member for a certain duration.
     * You must be the owner / an admin of the group to do this.
     */
    mute(duration: number): Promise<void>;
    /**
     * Unmute this member.
     * You must be the owner / an admin of the group to do this.
     */
    unmute(): Promise<void>;
    /**
     * Set the special title of this member.
     * You must be the owner of the group to do this.
     * @param specialTitle The special title to set.
     * The length of the special title must be less than or equal to 18 (in UTF-8 bytes).
     * One CJK character takes 3 bytes.
     */
    setSpecialTitle(specialTitle: string): Promise<void>;
    /**
     * Send a gray tip poke to this member.
     */
    sendGrayTipPoke(): Promise<void>;
    /**
     * Kick this member from the group.
     * You must be the owner / an admin of the group to do this.
     */
    kick(acceptSubsequentRequests?: boolean, reason?: string): Promise<void>;
}

declare class BotMsgBubble implements BotMsgType {
    readonly segments: BubbleSegment[];
    private constructor();
    static create(data: IncomingSegment[], peer: BotContact, msg: IncomingMessage, bot: Bot): Promise<BotMsgBubble>;
    toPreviewString(): string;
}
type BubbleSegment = {
    type: 'text';
    content: string;
} | {
    type: 'face';
    faceId: number;
    summary: string;
    isInLargeCategory: boolean;
} | {
    type: 'mention';
    mentioned: BotGroupMember;
} | {
    type: 'mentionAll';
} | {
    type: 'image';
    content: BotMsgImage;
};

declare class BotMsgForwardBubble implements BotMsgType {
    readonly segments: ForwardedBubbleSegment[];
    private constructor();
    static create(data: IncomingSegment[], msg: IncomingMessage, parentMsgType: MessageType, bot: Bot): Promise<BotMsgForwardBubble>;
    toPreviewString(): string;
}
type ForwardedBubbleSegment = {
    type: 'text';
    content: string;
} | {
    type: 'face';
    faceId: number;
    summary: string;
    isInLargeCategory: boolean;
} | {
    type: 'mention';
    uin: number;
    name: string;
} | {
    type: 'mentionAll';
} | {
    type: 'image';
    content: BotMsgImage;
};

type ForwardedMessageBody = {
    type: 'bubble';
    content: BotMsgForwardBubble;
} | {
    type: 'image';
    content: BotMsgImage;
} | {
    type: 'video';
    content: BotMsgVideo;
} | {
    type: 'forward';
    content: BotMsgForwardPack;
} | {
    type: 'lightApp';
    content: BotMsgLightApp;
};
type ForwardedMessage = ForwardedMessageBody & {
    senderUin: number;
    senderName: string;
};
declare class BotMsgForwardPack implements BotMsgType {
    readonly messageType: MessageType;
    readonly senderUid: string;
    private readonly segment;
    private readonly bot;
    constructor(messageType: MessageType, senderUid: string, segment: IncomingSegmentOf<'forward'>, bot: Bot);
    get resId(): string;
    get recursiveCount(): number;
    get preview(): string[];
    private build;
    download(): Promise<ForwardedMessage[]>;
    toPreviewString(): string;
}

declare class BotMsgImage implements BotMsgType {
    readonly url: string;
    readonly width: number;
    readonly height: number;
    readonly subType: ImageSubType;
    readonly summary: string;
    private constructor();
    static create(data: IncomingSegmentOf<'image'>, msg: IncomingMessage, bot: Bot): Promise<BotMsgImage>;
    static createForward(data: IncomingSegmentOf<'image'>, messageType: MessageType, bot: Bot): Promise<BotMsgImage>;
    toPreviewString(): string;
}

declare class BotMsgLightApp implements BotMsgType {
    readonly appName: string;
    readonly payload: IncomingSegmentOf<'lightApp'>['payload'];
    constructor(appName: string, payload: IncomingSegmentOf<'lightApp'>['payload']);
    toPreviewString(): string;
}

declare class BotMsgRecord implements BotMsgType {
    readonly duration: number;
    readonly url: string;
    private constructor();
    static create(data: IncomingSegmentOf<'record'>, msg: IncomingMessage, bot: Bot): Promise<BotMsgRecord>;
    toPreviewString(): string;
}

declare class BotMsgVideo implements BotMsgType {
    readonly width: number;
    readonly height: number;
    readonly fileSize: number;
    readonly url: string;
    private constructor();
    static create(data: IncomingSegmentOf<'video'>, msg: IncomingMessage, bot: Bot): Promise<BotMsgVideo>;
    static createForward(data: IncomingSegmentOf<'video'>, messageType: MessageType, bot: Bot): Promise<BotMsgVideo>;
    toPreviewString(): string;
}

interface BotMsgType {
    /**
     * Get the preview string of the message
     */
    toPreviewString(): string;
}

declare class BotFriendRequest {
    private readonly bot;
    readonly fromUin: number;
    readonly fromUid: string;
    readonly message: string;
    /**
     * How the sender found the bot, e.g. via search of via a group.
     */
    readonly via: string;
    constructor(bot: Bot, fromUin: number, fromUid: string, message: string, 
    /**
     * How the sender found the bot, e.g. via search of via a group.
     */
    via: string);
    toString(): string;
    handle(isAccept: boolean): Promise<void>;
}

declare class BotGroupInvitationRequest {
    private readonly bot;
    readonly sequence: bigint;
    readonly invitor: BotFriend;
    readonly groupUin: number;
    private constructor();
    toString(): string;
    handle(isAccept: boolean, message?: string): Promise<void>;
    static create(invitor: BotFriend, lightApp: IncomingSegmentOf<'lightApp'>, bot: Bot): Promise<BotGroupInvitationRequest>;
}

declare class BotGroupInvitedJoinRequest {
    private readonly bot;
    readonly groupUin: number;
    readonly sequence: bigint;
    readonly targetUin: number;
    readonly targetUid: string;
    readonly invitor: BotGroupMember;
    readonly isFiltered: boolean;
    private constructor();
    toString(): string;
    handle(operation: GroupRequestOperation, message?: string): Promise<void>;
    static create(groupUin: number, targetUid: string, invitorUid: string, bot: Bot): Promise<BotGroupInvitedJoinRequest | null>;
}

declare class BotGroupJoinRequest {
    private readonly bot;
    readonly groupUin: number;
    readonly sequence: bigint;
    readonly requestUin: number;
    readonly requestUid: string;
    readonly comment: string;
    readonly isFiltered: boolean;
    private constructor();
    toString(): string;
    handle(operation: GroupRequestOperation, message?: string): Promise<void>;
    static create(groupUin: number, requestUid: string, bot: Bot): Promise<BotGroupJoinRequest | null>;
}

declare enum GroupRequestOperation {
    Accept = 1,
    Reject = 2,
    Ignore = 3
}

declare class BotIdentityService {
    private readonly bot;
    readonly uin2uid: Map<number, string>;
    readonly uid2uin: Map<string, number>;
    constructor(bot: Bot);
    resolveUid(uin: number, groupUin?: number): Promise<string | undefined>;
    resolveUin(uid: string, groupUin?: number): Promise<number | undefined>;
}

/**
 * Application info, fields from Lagrange.Core
 */
interface AppInfo {
    Os: string;
    Kernel: string;
    VendorOs: string;
    CurrentVersion: string;
    MiscBitmap: number;
    PtVersion: string;
    SsoVersion: number;
    PackageName: string;
    WtLoginSdk: string;
    AppId: number;
    SubAppId: number;
    AppIdQrCode: number;
    AppClientVersion: number;
    MainSigMap: number;
    SubSigMap: number;
    NTLoginType: number;
}

interface CoreConfig {
}

/**
 * Device information.
 */
interface DeviceInfo {
    /**
     * GUID of the device.
     * @example Buffer.from('f47ac10b58cc4372a5670e02b2c3d479', 'hex')
     */
    guid: Buffer;
    /**
     * 6 bytes MAC address.
     * @example Buffer.from([0x00, 0x1a, 0x2b, 0x3c, 0x4d, 0x5e])
     */
    macAddress: Buffer;
    /**
     * Device name.
     * @example 'Lagrange-0ABCDE'
     */
    deviceName: string;
    /**
     * @example 'Windows 10.0.19042'
     */
    systemKernel: string;
    /**
     * @example '10.0.19042.0'
     */
    kernelVersion: string;
}

interface Keystore {
    uin: number;
    uid?: string;
    passwordMd5: string;
    stub: {
        /**
         * 16 bytes, generated on instance creation
         */
        randomKey: Buffer;
        /**
         * 16 bytes, initially 0
         */
        tgtgtKey: Buffer;
    };
    session: {
        /**
         * 16 bytes, initially 0
         */
        d2Key: Buffer;
        /**
         * Initially empty
         */
        d2: Buffer;
        /**
         * Initially empty
         */
        tgt: Buffer;
        sessionDate: Date;
        /**
         * 24 bytes
         */
        qrSign?: Buffer;
        qrString?: string;
        qrUrl?: string;
        exchangeKey?: Buffer;
        keySign?: Buffer;
        unusualSign?: Buffer;
        unusualCookies?: string;
        captchaUrl?: string;
        newDeviceVerifyUrl?: string;
        captcha?: [string, string, string];
        tempPassword?: Buffer;
        /**
         * 16 bytes, may be from Tlv19, for Tlv16A
         */
        noPicSig?: Buffer;
        sequence: number;
    };
    info: {
        age: number;
        gender: number;
        name: string;
    };
}

interface SignProvider {
    sign(cmd: string, src: Buffer, seq: number): PromiseLike<SignResult | undefined>;
}
interface SignResult {
    sign: Buffer;
    token: Buffer;
    extra: Buffer;
}

type Event<Name extends string, Out> = {
    name: Name;
    command: string;
    parse: (ctx: BotContext, payload: Buffer) => Out;
};
type EventArray = Readonly<Array<Event<string, any>>>;
type ExtractEventOutByName<T extends EventArray, K extends string> = {
    [E in T[number] as E['name']]: ReturnType<E['parse']>;
}[K];
declare class EventChannel<T extends EventArray> {
    ctx: BotContext;
    private internalEmitter;
    private events;
    constructor(ctx: BotContext, events: T);
    on<K extends T[number]['name']>(event: K, listener: (out: ExtractEventOutByName<T, K>) => void): void;
    off<K extends T[number]['name']>(event: K, listener: (out: ExtractEventOutByName<T, K>) => void): void;
    once<K extends T[number]['name']>(event: K, listener: (out: ExtractEventOutByName<T, K>) => void): void;
    parse(command: string, payload: Buffer): void;
}

type Operation<Name extends string, Args extends Array<unknown>, Ret = undefined> = {
    name: Name;
    command: string;
    build: (ctx: BotContext, ...args: Args) => Buffer;
    parse: (ctx: BotContext, payload: Buffer) => Ret;
    postOnly: boolean;
};
type OperationArray = Readonly<Array<Operation<string, any, any>>>;
type OperationMap<T extends OperationArray> = {
    [Op in T[number] as Op['name']]: Op;
};
type ExtractRestArgs<T> = T extends [BotContext, ...infer B] ? B : never;
declare class OperationCollection<const T extends OperationArray> {
    ctx: BotContext;
    private readonly operationMap;
    private atomicSeq;
    private mutex;
    constructor(ctx: BotContext, operations: T);
    call<const OpName extends keyof OperationMap<T>>(name: OpName, ...args: ExtractRestArgs<Parameters<OperationMap<T>[OpName]['build']>>): Promise<ReturnType<OperationMap<T>[OpName]['parse']>>;
    private nextSeq;
}

declare enum LoginState {
    Success = 0,
    Slider = 2,
    SmsRequired = 160
}

type WtLoginCallResult = {
    success: true;
    uid: string;
    session: {
        d2Key: Buffer;
        tgt: Buffer;
        d2: Buffer;
        tempPassword: Buffer;
        sessionDate: Date;
    };
    info: Keystore['info'];
} | {
    success: false;
    state: LoginState;
    tag?: string;
    message?: string;
    raw: Buffer;
};

declare enum TransEmp12_QrCodeState {
    Confirmed = 0,
    CodeExpired = 17,
    WaitingForScan = 48,
    WaitingForConfirm = 53,
    Canceled = 54
}

type QueryQrCodeResultCallResult = {
    confirmed: true;
    tempPassword: Buffer;
    noPicSig: Buffer;
    tgtgtKey: Buffer;
} | {
    confirmed: false;
    state: TransEmp12_QrCodeState;
};

type NTEasyLoginResult = {
    success: true;
    tgt: Buffer;
    d2: Buffer;
    d2Key: Buffer;
    tempPassword: Buffer;
    sessionDate: Date;
} | {
    success: false;
    errorCode: number;
    unusual?: {
        sign: Buffer;
        cookies: string;
    };
};

interface MediaGeneralMetadata {
    size: number;
    md5: Buffer;
    sha1: Buffer;
}

declare enum PicFormat {
    UNKNOWN = 0,// regard as jpg
    PNG = 1001,
    JPEG = 1000,
    GIF = 2000,
    WEBP = 1002,
    BMP = 1005,
    TIFF = 1006
}

type SupportedPicFormat = 'png' | 'jpg' | 'gif' | 'webp' | 'bmp' | 'tiff';
interface ImageMetadata extends MediaGeneralMetadata {
    width: number;
    height: number;
    ext: SupportedPicFormat;
    format: PicFormat;
}

declare enum GroupNotifyType {
    JoinRequest = 1,
    Invitation = 2,
    KickMember = 6,
    KickSelf = 7,
    ExitGroup = 13,
    InvitedJoinRequest = 22
}

declare enum UserInfoGender {
    Unset = 0,
    Male = 1,
    Female = 2,
    Unknown = 255
}

declare enum FetchUserInfoKey {
    Avatar = 101,
    Signature = 102,
    Level = 105,
    BusinessList = 107,
    Nickname = 20002,
    Country = 20003,
    Gender = 20009,
    City = 20020,
    School = 20021,
    RegisterTime = 20026,
    Age = 20037,
    Qid = 27394
}

type EnumToStringKey = {
    [FetchUserInfoKey.Avatar]: 'avatar';
    [FetchUserInfoKey.Signature]: 'signature';
    [FetchUserInfoKey.Level]: 'level';
    [FetchUserInfoKey.BusinessList]: 'businessList';
    [FetchUserInfoKey.Nickname]: 'nickname';
    [FetchUserInfoKey.Country]: 'country';
    [FetchUserInfoKey.Gender]: 'gender';
    [FetchUserInfoKey.City]: 'city';
    [FetchUserInfoKey.School]: 'school';
    [FetchUserInfoKey.RegisterTime]: 'registerTime';
    [FetchUserInfoKey.Age]: 'age';
    [FetchUserInfoKey.Qid]: 'qid';
};
interface FetchUserInfoGeneralReturn {
    uin: number;
    avatar?: string;
    signature?: string;
    level?: number;
    businessList?: Array<{
        type: number;
        isYear: boolean;
        level: number;
        isPro: boolean;
        icon: string;
    }>;
    nickname?: string;
    country?: string;
    gender?: UserInfoGender;
    city?: string;
    school?: string;
    registerTime?: number;
    age?: number;
    qid?: string;
}

declare abstract class LogicBase {
    ctx: BotContext;
    constructor(ctx: BotContext);
}

type WtLoginCommandType = 'wtlogin.login' | 'wtlogin.trans_emp';
declare class WtLoginLogic extends LogicBase {
    buildWtLoginPacket(cmd: WtLoginCommandType, data: Buffer): Buffer<ArrayBufferLike>;
    buildTransEmpBody(subCommand: number, tlv: Buffer): Buffer<ArrayBufferLike>;
    decodeWtLoginPacket(data: Buffer): {
        internalLength: number;
        version: number;
        commandId: number;
        sequence: number;
        uin: number;
        flag: number;
        retryTime: number;
        decrypted: Buffer<ArrayBuffer>;
    };
    unwrapTransEmpPacket(data: Buffer): {
        subCommand: number;
        appId: number;
        data: Buffer<ArrayBufferLike>;
    };
    getCorrectUin(): Promise<number>;
}

/**
 * Elliptic Curve Diffie-Hellman key exchange
 */
declare class Ecdh {
    private compressed;
    publicKey: Buffer;
    shareKey: Buffer;
    private ecdhImpl;
    constructor(curveName: 'prime256v1' | 'secp192k1', compressed: boolean);
    exchange(bobPublic: Buffer): Buffer<ArrayBufferLike>;
}

declare class NTLoginLogic extends LogicBase {
    buildNTLoginPacket(body: Buffer): Buffer<ArrayBufferLike>;
    decodeNTLoginPacket(packet: Buffer): {
        header: _tanebijs_protobuf.InferProtoModel<{
            uin: _tanebijs_protobuf.ProtoSpec<() => {
                uin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            system: _tanebijs_protobuf.ProtoSpec<() => {
                os: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                deviceName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
                guid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            version: _tanebijs_protobuf.ProtoSpec<() => {
                kernelVersion: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                appId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, false, false>;
                packageName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            error: _tanebijs_protobuf.ProtoSpec<() => {
                errorCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                tag: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                message: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                newDeviceVerifyUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            cookie: _tanebijs_protobuf.ProtoSpec<() => {
                cookie: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
        }> | undefined;
        body: _tanebijs_protobuf.InferProtoModel<{
            readonly credentials: _tanebijs_protobuf.ProtoSpec<() => {
                tempPassword: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                tgt: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                d2: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                d2Key: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly captcha: _tanebijs_protobuf.ProtoSpec<() => {
                url: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                sid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            readonly unusual: _tanebijs_protobuf.ProtoSpec<() => {
                sig: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, true, false>;
            readonly uid: _tanebijs_protobuf.ProtoSpec<() => {
                uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
        }> | undefined;
    } | undefined;
}

type IncomingSsoPacket = {
    command: string;
    sequence: number;
} & ({
    body: Buffer;
} | {
    retcode: number;
    extra: string;
});
declare class SsoLogic extends LogicBase {
    ctx: BotContext;
    connected: boolean;
    socket: Socket;
    private buf;
    private pending;
    private outgoingDataMutex;
    private incomingDataMutex;
    private handlePacketMutex;
    constructor(ctx: BotContext);
    connectToMsfServer(): Promise<void>;
    /**
     * Send an SSO packet to the server and wait for the response
     * @param cmd Command
     * @param src Source buffer, or packet body
     * @param seq Sequence number
     * @param timeout Timeout in milliseconds
     */
    sendSsoPacket(cmd: string, src: Buffer, seq: number, timeout?: number): Promise<IncomingSsoPacket>;
    /**
     * Send an SSO packet to the server and ignore the response
     * @param cmd Command
     * @param src Source buffer, or packet body
     * @param seq Sequence number
     */
    postSsoPacket(cmd: string, src: Buffer, seq: number): Promise<void>;
    private readonly commandSignAllowlist;
    buildSsoPacket(cmd: string, src: Buffer, seq?: number): Promise<Buffer<ArrayBufferLike>>;
    resolveIncomingSsoPacket(packet: Buffer): IncomingSsoPacket;
    private handlePacket;
    private handleDataChunk;
}

declare const GroupGeneral0x2DCBody: ProtoMessage<{
    readonly type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly groupUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly eventParam: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
    readonly recall: _tanebijs_protobuf.ProtoSpec<() => {
        readonly operatorUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
        readonly recallMessages: _tanebijs_protobuf.ProtoSpec<() => {
            sequence: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            time: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            random: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            flag: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            authorUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        }, false, true>;
        readonly userDef: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
        readonly groupType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
        readonly opType: _tanebijs_protobuf.ProtoSpec<ScalarType.INT32, false, false>;
        readonly tipInfo: _tanebijs_protobuf.ProtoSpec<() => {
            tip: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        }, true, false>;
    }, true, false>;
    readonly field13: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
    readonly operatorUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
    readonly generalGrayTip: _tanebijs_protobuf.ProtoSpec<() => {
        readonly bizType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly templateParams: _tanebijs_protobuf.ProtoSpec<() => {
            key: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
            value: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
        }, false, true>;
    }, true, false>;
    readonly essenceMessageChange: _tanebijs_protobuf.ProtoSpec<() => {
        readonly groupUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly msgSequence: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly random: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly setFlag: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly memberUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly operatorUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    }, true, false>;
    readonly msgSequence: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    readonly reaction: _tanebijs_protobuf.ProtoSpec<() => {
        readonly data: _tanebijs_protobuf.ProtoSpec<() => {
            data: _tanebijs_protobuf.ProtoSpec<() => {
                target: _tanebijs_protobuf.ProtoSpec<() => {
                    sequence: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                }, false, false>;
                data: _tanebijs_protobuf.ProtoSpec<() => {
                    code: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
                    count: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    operatorUid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, false, false>;
                    type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                }, false, false>;
            }, false, false>;
        }, false, false>;
    }, true, false>;
}>;

declare class NotifyLogic extends LogicBase {
    parsePushMsgBodyToNotify(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>, type: PushMsgType): void;
    parseGroupJoinRequest(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupInvitedJoinRequest(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupInvitation(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupAdminChange(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupMemberIncrease(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupMemberDecrease(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseFriendRequest(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseFriendGrayTip(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseFriendRecall(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupMute(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupGrayTip(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupEssenceMessageChange(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupRecall(pushMsgBody: InferProtoModel<typeof PushMsgBody.fields>): void;
    parseGroupReaction(wrapper: InferProtoModel<typeof GroupGeneral0x2DCBody.fields>): void;
}

declare const NTV2RichMediaResponse: ProtoMessage<{
    readonly respHead: _tanebijs_protobuf.ProtoSpec<() => {
        readonly common: _tanebijs_protobuf.ProtoSpec<() => {
            readonly requestId: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly command: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly retCode: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly message: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
    }, true, false>;
    readonly upload: _tanebijs_protobuf.ProtoSpec<() => {
        readonly uKey: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
            readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        }, false, true>;
        readonly ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
            readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
            readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
            readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        }, false, true>;
        readonly msgSeq: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
        readonly msgInfo: _tanebijs_protobuf.ProtoSpec<() => {
            readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
                readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly fileSize: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                        readonly fileHash: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                        readonly fileSha1: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                        readonly fileName: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                        readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                            type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                            picFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                            videoFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                            voiceFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                        }, true, false>;
                        readonly width: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                        readonly height: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                        readonly time: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                        readonly original: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly fileUuid: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                    readonly storeId: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly uploadTime: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly ttl: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly subType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                }, true, false>;
                readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly urlPath: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                    readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly originalParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                        readonly bigParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                        readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                    }, true, false>;
                    readonly domain: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                }, true, false>;
                readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                readonly fileExist: _tanebijs_protobuf.ProtoSpec<ScalarType.BOOL, false, false>;
                readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
            }, false, true>;
            readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly bizType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly textSummary: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                    readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                    readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                    readonly fromScene: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly toScene: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly oldFileId: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                }, true, false>;
                readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly fromScene: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly toScene: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                }, true, false>;
                readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly srcUin: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
                    readonly pttScene: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly pttType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly changeVoice: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly waveform: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                    readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                    readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                    readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                    readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                }, true, false>;
                readonly busiType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, true, false>;
        }, true, false>;
        readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            extType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            extValue: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
        }, false, true>;
        readonly compatQMsg: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
        readonly subFileInfos: _tanebijs_protobuf.ProtoSpec<() => {
            subType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            uKey: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, false, true>;
            ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, false, true>;
        }, false, true>;
    }, true, false>;
    readonly download: _tanebijs_protobuf.ProtoSpec<() => {
        readonly rKeyParam: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly rKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            domain: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            urlPath: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            httpsPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, false, true>;
            ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, false, true>;
            picUrlExtInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly originalParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly bigParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
                readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            }, true, false>;
            videoExtInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly videoCodecFormat: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            }, true, false>;
        }, true, false>;
        readonly rKeyCreateTime: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
    }, true, false>;
    readonly downloadRKey: _tanebijs_protobuf.ProtoSpec<() => {
        readonly rKeys: _tanebijs_protobuf.ProtoSpec<() => {
            rkey: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
            rkeyTtlSec: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
            storeId: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
            rkeyCreateTime: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
            type: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, true, false>;
        }, false, true>;
    }, true, false>;
    readonly delete: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
    readonly uploadCompleted: _tanebijs_protobuf.ProtoSpec<() => {
        readonly msgSeq: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
    }, true, false>;
    readonly msgInfoAuth: _tanebijs_protobuf.ProtoSpec<() => {
        readonly authCode: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT32, false, false>;
        readonly msg: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
        readonly resultTime: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
    }, true, false>;
    readonly uploadKeyRenewal: _tanebijs_protobuf.ProtoSpec<() => {
        readonly ukey: _tanebijs_protobuf.ProtoSpec<ScalarType.STRING, true, false>;
        readonly ukeyTtlSec: _tanebijs_protobuf.ProtoSpec<ScalarType.UINT64, false, false>;
    }, true, false>;
    readonly downloadSafe: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
    readonly extension: _tanebijs_protobuf.ProtoSpec<ScalarType.BYTES, true, false>;
}>;

declare class HighwayLogic extends LogicBase {
    highwayHost: string;
    highwayPort: number;
    sigSession: Buffer;
    setHighwayUrl(host: string, port: number, sigSession: Buffer): void;
    uploadImage(image: Buffer, imageMeta: ImageMetadata, uploadResp: InferProtoModelInput<typeof NTV2RichMediaResponse.fields>, messageType: MessageType): Promise<void>;
    uploadRecord(record: Buffer, recordMeta: MediaGeneralMetadata, uploadResp: InferProtoModelInput<typeof NTV2RichMediaResponse.fields>): Promise<void>;
    private buildExtendInfo;
    private buildDataUpTrans;
    private upload;
}

/**
 * The internal context of the bot
 */
declare class BotContext {
    appInfo: AppInfo;
    coreConfig: CoreConfig;
    deviceInfo: DeviceInfo;
    keystore: Keystore;
    signProvider: SignProvider;
    ecdh192: Ecdh;
    ecdh256: Ecdh;
    highwayLogic: HighwayLogic;
    ssoLogic: SsoLogic;
    wtLoginLogic: WtLoginLogic;
    ntLoginLogic: NTLoginLogic;
    notifyLogic: NotifyLogic;
    readonly log: EventEmitter$1<{
        trace: [string, string];
        info: [string, string];
        warning: [string, string, unknown?];
    }>;
    ops: OperationCollection<readonly [Operation<"fetchFriends", [nextUin?: number | undefined, friendCount?: number | undefined], {
        nextUin: number | undefined;
        friends: {
            uin: number;
            uid: string | undefined;
            nickname: string | undefined;
            remark: string | undefined;
            signature: string | undefined;
            qid: string | undefined;
            category: number;
        }[];
        friendCategories: {
            [k: string]: string | undefined;
        };
    }>, Operation<"fetchUserInfo", [uinOrUid: string | number, keys?: FetchUserInfoKey[] | undefined], FetchUserInfoGeneralReturn>, Operation<"handleFriendRequest", [isAccept: boolean, uid: string], undefined>, Operation<"sendProfileLike", [targetUid: string, count: number], undefined>, Operation<"addGroupReaction", [groupUin: number, sequence: number, code: string, type: ReactionType], undefined>, Operation<"fetchGroupFilteredNotifies", [count?: number | undefined], _tanebijs_protobuf.InferProtoModel<{
        sequence: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
        notifyType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        requestState: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        group: _tanebijs_protobuf.ProtoSpec<() => {
            readonly groupUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly groupName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, false, false>;
        target: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, false, false>;
        invitor: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, true, false>;
        operator: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, true, false>;
        comment: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
    }>[]>, Operation<"fetchGroupMembers", [groupUin: number, token?: string | undefined], _tanebijs_protobuf.InferProtoModel<{
        readonly groupUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly members: _tanebijs_protobuf.ProtoSpec<() => {
            identity: _tanebijs_protobuf.ProtoSpec<() => {
                uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                uin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, false>;
            memberName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            specialTitle: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            memberCard: _tanebijs_protobuf.ProtoSpec<() => {
                value: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
            level: _tanebijs_protobuf.ProtoSpec<() => {
                infos: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, true>;
                level: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            joinTimestamp: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            lastMsgTimestamp: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            shutUpTimestamp: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, true, false>;
            permission: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, false, true>;
        readonly field3: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly memberChangeSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly memberCardChangeSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly token: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
    }>>, Operation<"fetchGroupNotifies", [count?: number | undefined], _tanebijs_protobuf.InferProtoModel<{
        sequence: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
        notifyType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        requestState: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        group: _tanebijs_protobuf.ProtoSpec<() => {
            readonly groupUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly groupName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, false, false>;
        target: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, false, false>;
        invitor: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, true, false>;
        operator: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
            readonly nickname: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        }, true, false>;
        comment: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
    }>[]>, Operation<"fetchGroups", [], _tanebijs_protobuf.InferProtoModel<{
        readonly groups: _tanebijs_protobuf.ProtoSpec<() => {
            groupUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            info: _tanebijs_protobuf.ProtoSpec<() => {
                groupOwner: _tanebijs_protobuf.ProtoSpec<() => {
                    uid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                }, true, false>;
                createdTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                memberMax: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                memberCount: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                groupName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                description: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                question: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                announcement: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            }, true, false>;
        }, false, true>;
    }>>, Operation<"handleGroupFilteredRequest", [groupUin: number, sequence: bigint, eventType: GroupNotifyType, operation: GroupRequestOperation, message: string], undefined>, Operation<"handleGroupRequest", [groupUin: number, sequence: bigint, eventType: GroupNotifyType, operation: GroupRequestOperation, message: string], undefined>, Operation<"kickMember", [groupUin: number, memberUin: string, rejectSubsequentRequests: boolean, reason: string], undefined>, Operation<"leaveGroup", [groupUin: number], undefined>, Operation<"muteAllMembers", [groupUin: number, duration: number], undefined>, Operation<"muteMember", [groupUin: number, targetUid: string, duration: number], undefined>, Operation<"removeGroupReaction", [groupUin: number, sequence: number, code: string, type: ReactionType], undefined>, Operation<"setGroupName", [groupUin: number, name: string], undefined>, Operation<"setMemberAdmin", [groupUin: number, memberUid: string, isSet: boolean], undefined>, Operation<"setMemberCard", [groupUin: number, targetUid: string, card: string], undefined>, Operation<"setMemberSpecialTitle", [groupUin: number, targetUid: string, specialTitle: string], undefined>, Operation<"downloadGroupImage", [groupUin: number, node: _tanebijs_protobuf.InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>], string>, Operation<"downloadGroupRecord", [groupUin: number, node: _tanebijs_protobuf.InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>], string>, Operation<"downloadPrivateImage", [senderUid: string, node: _tanebijs_protobuf.InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>], string>, Operation<"downloadPrivateRecord", [senderUid: string, node: _tanebijs_protobuf.InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>], string>, Operation<"downloadVideo", [senderUid: string, node: _tanebijs_protobuf.InferProtoModel<{
        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        }, true, false>;
        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
    }>, msgType: MessageType], string>, Operation<"fetchHighwayUrl", [], {
        sigSession: Buffer<ArrayBufferLike>;
        sessionKey: Buffer<ArrayBufferLike>;
        serverInfo: {
            ip: string;
            port: number;
        }[];
    }>, Operation<"uploadGroupImage", [groupUin: number, img: ImageMetadata, subType: ImageSubType, summary?: string | undefined], _tanebijs_protobuf.InferProtoModel<{
        upload: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly msgSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            readonly msgInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            }, true, false>;
                            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        }, true, false>;
                        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        }, true, false>;
                        readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
                    readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                }, false, true>;
                readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                        readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
            }, true, false>;
            readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extValue: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, false, true>;
            readonly compatQMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            readonly subFileInfos: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
                ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
            }, false, true>;
        }, true, false>;
        extension: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        respHead: _tanebijs_protobuf.ProtoSpec<() => {
            readonly common: _tanebijs_protobuf.ProtoSpec<() => {
                readonly requestId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly command: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly retCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly message: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }>>, Operation<"uploadGroupRecord", [groupUin: number, record: MediaGeneralMetadata, duration: number], _tanebijs_protobuf.InferProtoModel<{
        upload: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly msgSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            readonly msgInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            }, true, false>;
                            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        }, true, false>;
                        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        }, true, false>;
                        readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
                    readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                }, false, true>;
                readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                        readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
            }, true, false>;
            readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extValue: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, false, true>;
            readonly compatQMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            readonly subFileInfos: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
                ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
            }, false, true>;
        }, true, false>;
        extension: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        respHead: _tanebijs_protobuf.ProtoSpec<() => {
            readonly common: _tanebijs_protobuf.ProtoSpec<() => {
                readonly requestId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly command: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly retCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly message: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }>>, Operation<"uploadPrivateImage", [uid: string, img: ImageMetadata, subType: ImageSubType, summary?: string | undefined], _tanebijs_protobuf.InferProtoModel<{
        upload: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly msgSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            readonly msgInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            }, true, false>;
                            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        }, true, false>;
                        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        }, true, false>;
                        readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
                    readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                }, false, true>;
                readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                        readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
            }, true, false>;
            readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extValue: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, false, true>;
            readonly compatQMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            readonly subFileInfos: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
                ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
            }, false, true>;
        }, true, false>;
        extension: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        respHead: _tanebijs_protobuf.ProtoSpec<() => {
            readonly common: _tanebijs_protobuf.ProtoSpec<() => {
                readonly requestId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly command: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly retCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly message: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }>>, Operation<"uploadPrivateRecord", [uid: string, record: MediaGeneralMetadata, duration: number], _tanebijs_protobuf.InferProtoModel<{
        upload: _tanebijs_protobuf.ProtoSpec<() => {
            readonly uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, false, true>;
            readonly msgSeq: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
            readonly msgInfo: _tanebijs_protobuf.ProtoSpec<() => {
                readonly msgInfoBody: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly index: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly info: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly fileSize: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly fileHash: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileSha1: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly fileName: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly type: _tanebijs_protobuf.ProtoSpec<() => {
                                type: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                picFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                videoFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                                voiceFormat: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            }, true, false>;
                            readonly width: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly height: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly time: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                            readonly original: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        }, true, false>;
                        readonly fileUuid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly storeId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly uploadTime: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly ttl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly picture: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly urlPath: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                            readonly originalParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly bigParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                            readonly thumbParameter: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        }, true, false>;
                        readonly domain: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly audio: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                    readonly fileExist: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BOOL, false, false>;
                    readonly hashSum: _tanebijs_protobuf.ProtoSpec<() => {}, true, false>;
                }, false, true>;
                readonly extBizInfo: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly pic: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly bizType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly textSummary: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                        readonly bytesPbReserveC2C: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserveTroop: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly oldFileId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    }, true, false>;
                    readonly video: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly fromScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly toScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly ptt: _tanebijs_protobuf.ProtoSpec<() => {
                        readonly srcUin: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT64, false, false>;
                        readonly pttScene: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly pttType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly changeVoice: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly waveform: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly autoConvertText: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                        readonly bytesReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesPbReserve: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                        readonly bytesGeneralFlags: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    }, true, false>;
                    readonly busiType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, true, false>;
            }, true, false>;
            readonly ext: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                extValue: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            }, false, true>;
            readonly compatQMsg: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
            readonly subFileInfos: _tanebijs_protobuf.ProtoSpec<() => {
                subType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                uKey: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
                uKeyTtlSecond: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                ipv4s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
                ipv6s: _tanebijs_protobuf.ProtoSpec<() => {
                    readonly outIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly outPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly inIP: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
                    readonly inPort: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                    readonly ipType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                }, false, true>;
            }, false, true>;
        }, true, false>;
        extension: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.BYTES, true, false>;
        respHead: _tanebijs_protobuf.ProtoSpec<() => {
            readonly common: _tanebijs_protobuf.ProtoSpec<() => {
                readonly requestId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
                readonly command: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            }, true, false>;
            readonly retCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.UINT32, false, false>;
            readonly message: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
    }>>, Operation<"downloadLongMessage", [senderUid: string, resId: string], IncomingMessage[]>, Operation<"fetchFaceDetails", [], _tanebijs_protobuf.InferProtoModel<{
        readonly qSid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly qDes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly emCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly qCid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerPackId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly url: _tanebijs_protobuf.ProtoSpec<() => {
            readonly baseUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly advUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
        readonly faceNameAlias: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, true>;
        readonly unknown10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
    }>[]>, Operation<"recallFriendMessage", [friendUid: string, clientSequence: number, random: number, timestamp: number, ntMsgSeq: number], undefined>, Operation<"recallGroupMessage", [groupUin: number, sequence: number], undefined>, Operation<"sendGrayTipPoke", [uin: number, groupUin?: number | undefined, friendUin?: number | undefined], undefined>, Operation<"sendMessage", [params: OutgoingMessage], {
        sequence: number;
        timestamp: number;
    }>, Operation<"uploadLongMessage", [msgs: OutgoingForwardedMessage[], groupUin?: number | undefined], string>, Operation<"botOffline", [], string | undefined>, Operation<"botOnline", [], string | undefined>, Operation<"fetchQrCode", [], {
        qrCode: Buffer<ArrayBufferLike>;
        expiration: number;
        url: string;
        qrSig: string;
        signature: Buffer<ArrayBufferLike>;
    }>, Operation<"heartbeat", [], undefined>, Operation<"keyExchange", [], {
        gcmKey: Buffer<ArrayBufferLike>;
        sign: Buffer<ArrayBufferLike>;
        expiration: number;
    }>, Operation<"ntEasyLogin", [], NTEasyLoginResult>, Operation<"queryQrCodeResult", [], QueryQrCodeResultCallResult>, Operation<"wtLogin", [], WtLoginCallResult>]>;
    events: EventChannel<(Event<"messagePush", IncomingMessage | undefined> | Event<"kickNT", _tanebijs_protobuf.InferProtoModel<{
        readonly tip: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly title: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
    }>>)[]>;
    eventsDX: EventEmitter$1<{
        friendRequest: [number, string, string, string];
        friendPoke: [number, number, string, string, string?];
        friendRecall: [string, number, string];
        groupJoinRequest: [number, string];
        groupInvitedJoinRequest: [number, string, string];
        groupInvitationRequest: [number, string];
        groupAdminChange: [number, string, boolean];
        groupMemberIncrease: [number, string, IncreaseType, string?];
        groupMemberDecrease: [number, string, DecreaseType, string?];
        groupMute: [number, string, string, number];
        groupMuteAll: [number, string, boolean];
        groupPoke: [number, number, number, string, string, string?];
        groupEssenceMessageChange: [number, number, number, boolean];
        groupRecall: [number, number, string, string];
        groupReaction: [number, number, string, string, boolean, number];
    }>;
    constructor(appInfo: AppInfo, coreConfig: CoreConfig, deviceInfo: DeviceInfo, keystore: Keystore, signProvider: SignProvider);
    renewSsoLogic(): Promise<void>;
}

/**
 * A preset of app information for Linux protocol.
 * Use this when unable to fetch app information from the sign URL.
 */
declare const LinuxAppInfoPreset: AppInfo;
/**
 * Fetch AppInfo from the given sign URL. This is the recommended way to get AppInfo.
 * @param signUrl The sign URL to fetch AppInfo from
 * @returns The AppInfo object
 */
declare function fetchAppInfoFromSignUrl(signUrl: string): Promise<AppInfo>;

type ExtractDataBinding<V> = V extends BotEntity<infer U> ? U : never;
declare class BotCacheService<K, V extends BotEntity<unknown>> {
    readonly bot: Bot;
    private readonly updateCache;
    private readonly entityFactory;
    private readonly mutex;
    private map;
    private updating;
    constructor(bot: Bot, updateCache: (bot: Bot) => Promise<Map<K, ExtractDataBinding<V>>>, entityFactory: (bot: Bot, data: ExtractDataBinding<V>) => V);
    get(key: K, forceUpdate?: boolean): Promise<V | undefined>;
    getAll(forceUpdate?: boolean): Promise<MapIterator<V>>;
    update(): Promise<void>;
    acceptData(data: Map<K, ExtractDataBinding<V>>): void;
}

/**
 * Generate a new device information with random values
 * @returns A new device information
 */
declare function newDeviceInfo(): DeviceInfo;
/**
 * Generate a new keystore for QR code login
 * @returns A new keystore
 */
declare function newKeystore(): Keystore;

type BufferSerialized = string;
type DateSerialized = string;
/**
 * Serialized device information
 */
interface DeviceInfoSerialized {
    guid: BufferSerialized;
    macAddress: BufferSerialized;
    deviceName: string;
    systemKernel: string;
    kernelVersion: string;
}
/**
 * Serialized keystore
 */
interface KeystoreSerialized {
    uin: number;
    uid?: string;
    passwordMd5: string;
    stub: {
        randomKey: BufferSerialized;
        tgtgtKey: BufferSerialized;
    };
    session: {
        d2Key: BufferSerialized;
        d2: BufferSerialized;
        tgt: BufferSerialized;
        sessionDate: DateSerialized;
        qrSign?: BufferSerialized;
        qrString?: string;
        qrUrl?: string;
        exchangeKey?: BufferSerialized;
        keySign?: BufferSerialized;
        unusualSign?: BufferSerialized;
        unusualCookies?: string;
        captchaUrl?: string;
        newDeviceVerifyUrl?: string;
        captcha?: [string, string, string];
        tempPassword?: BufferSerialized;
        noPicSig?: BufferSerialized;
        sequence: number;
    };
    info: {
        age: number;
        gender: number;
        name: string;
    };
}
/**
 * Serialize device information for storage
 */
declare function serializeDeviceInfo(data: DeviceInfo): DeviceInfoSerialized;
/**
 * Deserialize device information from plain object
 */
declare function deserializeDeviceInfo(data: DeviceInfoSerialized): DeviceInfo;
/**
 * Serialize keystore for storage
 */
declare function serializeKeystore(data: Keystore): KeystoreSerialized;
/**
 * Deserialize keystore from plain object
 */
declare function deserializeKeystore(data: KeystoreSerialized): Keystore;

/**
 * Create a sign provider that fetches sign information from the given URL.
 * @param signApiUrl The URL to fetch sign information from
 * @returns The sign provider
 */
declare function UrlSignProvider(signApiUrl: string): SignProvider;

/**
 * Symbol of the bot context
 */
declare const ctx: unique symbol;
/**
 * Symbol of the identity service
 */
declare const identityService: unique symbol;
/**
 * Symbol of internal log
 */
declare const log: unique symbol;
/**
 * Symbol of internal events
 */
declare const eventsDX: unique symbol;
/**
 * Symbol to access face cache
 */
declare const faceCache: unique symbol;
/**
 * Symbol to access message dispatcher
 */
declare const dispatcher: unique symbol;
/**
 * The Bot object. Create an instance by calling `Bot.create`.
 */
declare class Bot {
    readonly [ctx]: BotContext;
    readonly [identityService]: BotIdentityService;
    readonly [log]: EventEmitter<{
        trace: [string, string];
        info: [string, string];
        warning: [string, string, unknown?];
        fatal: [string, string, unknown?];
    }>;
    readonly [eventsDX]: EventEmitter<{
        forceOffline: [string, string];
        keystoreChange: [Keystore];
        friendRequest: [BotFriendRequest];
        groupInvitationRequest: [BotGroupInvitationRequest];
        friendPoke: [BotFriend, boolean, string, string, string?];
        friendRecall: [BotFriend, number, string];
        groupJoinRequest: [BotGroup, BotGroupJoinRequest];
        groupInvitedJoinRequest: [BotGroup, BotGroupInvitedJoinRequest];
        groupAdminChange: [BotGroup, BotGroupMember, boolean];
        groupMemberIncrease: [BotGroup, BotGroupMember, IncreaseType, BotGroupMember?];
        groupMemberLeave: [BotGroup, number];
        groupMemberCardChange: [BotGroup, BotGroupMember, string, string];
        groupMemberKick: [BotGroup, number, BotGroupMember?];
        groupMute: [BotGroup, BotGroupMember, BotGroupMember, number];
        groupUnmute: [BotGroup, BotGroupMember, BotGroupMember];
        groupMuteAll: [BotGroup, BotGroupMember, boolean];
        groupPoke: [BotGroup, BotGroupMember, BotGroupMember, string, string, string?];
        groupEssenceMessageChange: [BotGroup, number, BotGroupMember, boolean];
        groupRecall: [BotGroup, number, string, BotGroupMember];
        groupReaction: [BotGroup, number, BotGroupMember, string, boolean, number];
    }>;
    readonly [faceCache]: Map<string, InferProtoModel<{
        readonly qSid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, false>;
        readonly qDes: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly emCode: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        readonly qCid: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerType: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerPackId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerId: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly url: _tanebijs_protobuf.ProtoSpec<() => {
            readonly baseUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
            readonly advUrl: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, true, false>;
        }, true, false>;
        readonly faceNameAlias: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.STRING, false, true>;
        readonly unknown10: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerWidth: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
        readonly aniStickerHeight: _tanebijs_protobuf.ProtoSpec<_tanebijs_protobuf.ScalarType.INT32, true, false>;
    }>>;
    readonly [dispatcher]: MessageDispatcher;
    private readonly friendCache;
    private readonly groupCache;
    private readonly globalMsg;
    /**
     * Whether the bot is logged in.
     */
    loggedIn: boolean;
    private qrCodeQueryIntervalRef?;
    private heartbeatIntervalRef?;
    private constructor();
    get uin(): number;
    get uid(): string;
    get name(): string;
    get gender(): number;
    get age(): number;
    /**
     * Login with QR code, accepts a callback function to handle QR code
     * @param onQrCode Callback function to handle QR code
     * @param queryQrCodeResultInterval Interval to query QR code result, >= 2000ms, 5000ms by default
     */
    qrCodeLogin(onQrCode: (qrCodeUrl: string, qrCodePng: Buffer) => unknown, queryQrCodeResultInterval?: number): Promise<void>;
    /**
     * Try getting online using existing session first;
     * if failed, refresh session and try NTEasyLogin
     */
    fastLogin(): Promise<void>;
    /**
     * Perform key exchange to refresh session
     */
    keyExchange(): Promise<void>;
    /**
     * Perform easy login using exchanged key.
     * Do not confuse this with `fastLogin`, which tries to get online using existing session first.
     * You should always rely on `fastLogin` unless you know what you are doing.
     */
    ntEasyLogin(): Promise<void>;
    /**
     * Get online using existing session
     */
    botOnline(): Promise<void>;
    private postOnline;
    /**
     * Dispose the bot instance.
     * You cannot use the bot instance again after disposing. Create a new instance instead.
     */
    dispose(): Promise<void>;
    /**
     * Get all friends
     * @param forceUpdate Whether to force update the friend list
     */
    getFriends(forceUpdate?: boolean): Promise<MapIterator<BotFriend>>;
    /**
     * Get a friend by Uin
     * @param uin Uin of the friend
     * @param forceUpdate Whether to force update the friend info
     */
    getFriend(uin: number, forceUpdate?: boolean): Promise<BotFriend | undefined>;
    /**
     * Get all groups
     * @param forceUpdate Whether to force update the group list
     */
    getGroups(forceUpdate?: boolean): Promise<MapIterator<BotGroup>>;
    /**
     * Get a group by Uin
     * @param uin Uin of the group
     * @param forceUpdate Whether to force update the group info
     */
    getGroup(uin: number, forceUpdate?: boolean): Promise<BotGroup | undefined>;
    /**
     * Get user info of specified uin / uid
     * @param uinOrUid Uin or Uid of the user
     * @param keys Keys to fetch; at least one
     * @returns User info of specified keys
     */
    getUserInfo<const K extends FetchUserInfoKey[] = []>(uinOrUid: number | string, keys?: K): Promise<Pick<FetchUserInfoGeneralReturn, "uin" | EnumToStringKey[K[number]]>>;
    /**
     * Send likes to a profile
     * @param targetUin Uin of the target user
     * @param count Number of likes to send
     * @param fromGroupUin Uin of the group which the target user is from
     */
    sendProfileLike(targetUin: number, count: number, fromGroupUin?: number): Promise<void>;
    /**
     * Listen to private messages
     */
    onPrivateMessage(listener: (friend: BotFriend, message: BotFriendMessage) => void): void;
    /**
     * Listen to group messages
     */
    onGroupMessage(listener: (group: BotGroup, sender: BotGroupMember, message: BotGroupMessage) => void): void;
    /**
     * Listen to force
     */
    onForceOffline(listener: (title: string, tip: string) => void): void;
    /**
     * Listen to keystore change
     */
    onKeystoreChange(listener: (keystore: Keystore) => void): void;
    /**
     * Listen to friend requests
     */
    onFriendRequest(listener: (request: BotFriendRequest) => void): void;
    /**
     * Listen to group invitation requests
     */
    onGroupInvitationRequest(listener: (request: BotGroupInvitationRequest) => void): void;
    /**
     * Listen to friend pokes
     */
    onFriendPoke(listener: (friend: BotFriend, isSelf: boolean, actionStr: string, actionImgUrl: string, suffix?: string) => void): void;
    /**
     * Listen to friend recalls
     */
    onFriendRecall(listener: (friend: BotFriend, clientSequence: number, tip: string) => void): void;
    /**
     * Listen to group join requests
     */
    onGroupJoinRequest(listener: (group: BotGroup, request: BotGroupJoinRequest) => void): void;
    /**
     * Listen to group invited join requests
     */
    onGroupInvitedJoinRequest(listener: (group: BotGroup, request: BotGroupInvitedJoinRequest) => void): void;
    /**
     * Listen to group admin changes
     */
    onGroupAdminChange(listener: (group: BotGroup, member: BotGroupMember, isPromote: boolean) => void): void;
    /**
     * Listen to group member increases
     */
    onGroupMemberIncrease(listener: (group: BotGroup, member: BotGroupMember, type: IncreaseType, operator?: BotGroupMember) => void): void;
    /**
     * Listen to group member decreases
     */
    onGroupMemberLeave(listener: (group: BotGroup, uin: number) => void): void;
    /**
     * Listen to group member card changes
     */
    onGroupMemberCardChange(listener: (group: BotGroup, member: BotGroupMember, newCard: string) => void): void;
    /**
     * Listen to group member kicks
     */
    onGroupMemberKick(listener: (group: BotGroup, uin: number, operator?: BotGroupMember) => void): void;
    /**
     * Listen to group mutes
     */
    onGroupMute(listener: (group: BotGroup, member: BotGroupMember, operator: BotGroupMember, duration: number) => void): void;
    /**
     * Listen to group unmutes
     */
    onGroupUnmute(listener: (group: BotGroup, member: BotGroupMember, operator: BotGroupMember) => void): void;
    /**
     * Listen to group mute all
     */
    onGroupMuteAll(listener: (group: BotGroup, operator: BotGroupMember, isSet: boolean) => void): void;
    /**
     * Listen to group pokes
     */
    onGroupPoke(listener: (group: BotGroup, sender: BotGroupMember, receiver: BotGroupMember, actionStr: string, actionImgUrl: string, suffix?: string) => void): void;
    /**
     * Listen to group essence message changes
     */
    onGroupEssenceMessageChange(listener: (group: BotGroup, sequence: number, operator: BotGroupMember, isAdd: boolean) => void): void;
    /**
     * Listen to group recalls
     */
    onGroupRecall(listener: (group: BotGroup, sequence: number, tip: string, operator: BotGroupMember) => void): void;
    /**
     * Listen to group reactions
     */
    onGroupReaction(listener: (group: BotGroup, sequence: number, operator: BotGroupMember, reactionCode: string, isAdd: boolean, count: number) => void): void;
    /**
     * Listen to trace logs
     */
    onTrace(listener: (module: string, message: string) => void): void;
    /**
     * @deprecated Use `onTrace` instead
     * Listen to trace logs; this is preserved for backward compatibility
     */
    onDebug(listener: (module: string, message: string) => void): void;
    /**
     * Listen to info logs
     */
    onInfo(listener: (module: string, message: string) => void): void;
    /**
     * Listen to warning logs
     */
    onWarning(listener: (module: string, message: string, error?: unknown) => void): void;
    /**
     * Listen to fatal logs
     */
    onFatal(listener: (module: string, message: string, error?: unknown) => void): void;
    /**
     * Create a new Bot instance and complete necessary initialization
     */
    static create(appInfo: AppInfo, coreConfig: CoreConfig, deviceInfo: DeviceInfo, keystore: Keystore, signProvider: SignProvider): Promise<Bot>;
}

export { AbstractMessageBuilder, type AppInfo, Bot, BotCacheService, BotContact, BotEntity, BotFriend, type BotFriendMessage, BotFriendRequest, type BotFriendSendMsgRef, BotGroup, BotGroupInvitationRequest, BotGroupInvitedJoinRequest, BotGroupJoinRequest, BotGroupMember, type BotGroupMessage, type BotGroupSendMsgRef, BotMsgBubble, BotMsgForwardBubble, BotMsgForwardPack, BotMsgImage, BotMsgLightApp, BotMsgRecord, type BotMsgType, BotMsgVideo, type BubbleSegment, type BufferSerialized, type CoreConfig, type DateSerialized, DecreaseType, type DeviceInfo, type DeviceInfoSerialized, type DispatchedMessage, type DispatchedMessageBody, FetchUserInfoKey, type ForwardedBubbleSegment, type ForwardedMessage, type ForwardedMessageBody, ForwardedMessageBuilder, ForwardedMessagePacker, GroupMemberPermission, GroupMessageBuilder, GroupRequestOperation, ImageSubType, IncreaseType, type Keystore, type KeystoreSerialized, LinuxAppInfoPreset, MessageDispatcher, MessageType, type OutgoingForwardedMessage, type OutgoingSegment, type OutgoingSegmentOf, PrivateMessageBuilder, ReactionType, type SignProvider, type SignResult, UrlSignProvider, UserInfoGender, blob, ctx, deserializeDeviceInfo, deserializeKeystore, dispatcher, eventsDX, eventsFDX, eventsGDX, faceCache, fetchAppInfoFromSignUrl, identityService, log, msgUid, newDeviceInfo, newKeystore, parsePushMsgBody, rawElems, rawMessage, sendBlob, serializeDeviceInfo, serializeKeystore };
