Mioki API
Mioki 框架提供的 API 和工具函数。
插件运行时状态
getPluginRuntimeState
获取指定插件的运行时状态对象。如果该插件尚未写入状态,会返回一个空对象。
pluginName: 插件名 返回:T- 插件运行时状态对象
setPluginRuntimeState
向指定插件的运行时状态对象写入字段,适合在 setup() 中把队列、缓存、长连接客户端等对象挂进去。
pluginName: 插件名nextState: 需要合并写入的状态 返回:T- 合并后的运行时状态对象
resetPluginRuntimeState
清空指定插件的运行时状态,适合在插件卸载时调用。
pluginName: 插件名 返回:void
点击展开完整类型定义
function getPluginRuntimeState<T extends Record<string, any>>(
pluginName: string,
): T;
function setPluginRuntimeState<T extends Record<string, any>>(
pluginName: string,
nextState: Partial<T>,
): T;
function resetPluginRuntimeState(pluginName: string): void;工具函数 (Utils)
日志
getMiokiLogger
获取 Mioki 日志记录器。
level: 日志级别 返回:Logger- 日志记录器
getLogFilePath
获取日志文件路径。
type?: 日志类型 返回:string- 日志文件路径
点击展开完整类型定义
function getMiokiLogger(level?: LogLevel): Logger;
function getLogFilePath(type?: "app" | "error" | "mioki"): string;文件系统
fs
Node.js 文件系统模块。
返回:
FileSystemAdapter- fs 适配器
path
Node.js 路径模块。
返回:
PathUtil- 路径工具
点击展开完整类型定义
const fs: FileSystemAdapter;
const path: PathUtil;字符串处理
md5
计算 MD5 哈希值。
text: 待加密文本encoding?: 编码方式 返回:Buffer | string- 加密结果
base64Encode
进行 Base64 编码。
str: 待编码字符串 返回:string- Base64 编码结果
base64Decode
进行 Base64 解码。
str: 待解码字符串type?: 解码类型 返回:string | Buffer- 解码结果
qs
将对象序列化为 URL 参数字符串。
obj: 待序列化对象 返回:string- URL 参数字符串
点击展开完整类型定义
function md5(text: string, encoding?: BufferEncoding): Buffer | string;
function base64Encode(str: string): string;
function base64Decode(str: string, type?: "string" | "buffer"): string | Buffer;
function qs(obj: Record<string, any>): string;时间处理
localeDate
获取本地日期字符串。
ts?: 时间戳options?: 选项 返回:string- 固定日期字符串
localeTime
获取本地时间字符串。
ts?: 时间戳options?: 选项 返回:string- 固定时间字符串
formatDuration
格式化时间间隔。
ms: 毫秒数 返回:string- 格式化的时间间隔
formatQQLevel
格式化 QQ 等级。
level: QQ 等级 返回:number- 格式化后的等级
prettyMs
格式化毫秒数。
ms: 毫秒数options?: 选项 返回:string- 格式化的毫秒
点击展开完整类型定义
function localeDate(
ts?: number,
options?: { locale?: string; timeZone?: string },
): string;
function localeTime(
ts?: number,
options?: { locale?: string; timeZone?: string },
): string;
function formatDuration(ms: number): string;
function formatQQLevel(level: number): number;
function prettyMs(ms: number, options?: prettyMs.Options): string;随机
randomInt
生成指定范围内的随机整数。
min: 最小值max: 最大值hashArgs?: 稳定随机参数 返回:number- 随机整数
randomItem
从数组中随机取出一项。
array: 数组hashArgs?: 稳定随机参数 返回:T- 随机取出的项
randomItems
从数组中随机取出多项。
array: 数组count: 取出数量hashArgs?: 稳定随机参数 返回:T[]- 随机取出的多项
randomId
生成随机 ID。
返回:
string- 随机 ID
uuid
生成 UUID 字符串。
返回:
string- UUID 字符串
点击展开完整类型定义
function randomInt(min: number, max: number, ...hashArgs: any[]): number;
function randomItem<T>(array: T[], ...hashArgs: any[]): T;
function randomItems<T>(array: T[], count: number, ...hashArgs: any[]): T[];
function randomId(): string;
function uuid(): string;数组/对象
unique
去除数组重复项。
array: 数组 返回:T[]- 去重后的数组
toArray
确保值为数组。
value: 值或数组 返回:T[]- 确保为数组
clamp
限制数值在指定范围内。
n: 数值min: 最小值max: 最大值 返回:number- 限制范围内的数值
toMsgId
生成消息 ID。
event: 包含 seq 和 rand 的对象 返回:string- 消息 ID
点击展开完整类型定义
function unique<T>(array: T[]): T[];
function toArray<T>(value: T | T[]): T[];
function clamp(n: number, min: number, max: number): number;
function toMsgId(event: { seq: number; rand: number }): string;类型判断
isDefined
判断值是否已定义。
val: 值 返回:val is T- 是否已定义
isFunction
判断值是否为函数。
val: 值 返回:val is T- 是否为函数
isNumber
判断值是否为数字。
val: 值 返回:val is number- 是否为数字
isBoolean
判断值是否为布尔值。
val: 值 返回:val is boolean- 是否为布尔值
isString
判断值是否为字符串。
val: 值 返回:val is string- 是否为字符串
isObject
判断值是否为对象。
val: 值 返回:val is object- 是否为对象
isGroupMsg
判断事件是否为群消息。
event: 事件对象 返回:event is GroupMessageEvent- 是否为群消息
isPrivateMsg
判断事件是否为私聊消息。
event: 事件对象 返回:event is PrivateMessageEvent- 是否为私聊消息
点击展开完整类型定义
function isDefined<T>(val: T | undefined | null): val is T;
function isFunction<T>(val: any): val is T;
function isNumber(val: any): val is number;
function isBoolean(val: any): val is boolean;
function isString(val: any): val is string;
function isObject(val: any): val is object;
function isGroupMsg(event: Event): event is GroupMessageEvent;
function isPrivateMsg(event: Event): event is PrivateMessageEvent;等待/延时
wait
延时等待。
ms: 毫秒数 返回:Promise<void>- Promise
getTerminalInput
获取终端用户输入。
inputTip?: 提示文字 返回:Promise<string>- 用户输入
点击展开完整类型定义
function wait(ms: number): Promise<void>;
function getTerminalInput(inputTip?: string): Promise<string>;命令解析
createCmd
解析命令字符串。
cmdStr: 命令字符串options?: 解析选项 返回:{ cmd: string | undefined, params: string[], options: Record<string, any> }- 解析结果
点击展开完整类型定义
function createCmd(
cmdStr: string,
options?: { prefix?: string },
): {
cmd: string | undefined;
params: string[];
options: Record<string, any>;
};数据库
createDB
创建数据库实例。
filename: 文件名options?: 选项 返回:Promise<Low<T>>- 数据库实例
createStore
创建存储实例。
defaultData: 默认数据options?: 选项 返回:Promise<Low<T>>- 存储实例
点击展开完整类型定义
function createDB<T>(
filename: string,
options?: Low.Options<T>,
): Promise<Low<T>>;
function createStore<T>(
defaultData: T,
options?: Low.Options<T>,
): Promise<Low<T>>;消息处理
text
提取消息文本。
event: 消息事件options?: 选项 返回:string- 消息文本
find
查找指定类型的消息元素。
event: 消息事件type: 元素类型 返回:Element | undefined- 找到的元素
filter
过滤指定类型的消息元素。
event: 消息事件type: 元素类型 返回:Element[]- 所有匹配的元素
match
匹配并发送消息。
event: 消息事件pattern: 匹配模式quote?: 是否引用 返回:Promise<{ message_id: number } | null>- 匹配结果
runWithReaction
使用表态执行函数。
e: 事件对象fn: 执行函数id?: 表态 ID 返回:Promise<Return>- 执行结果
ensureBuffer
确保缓冲区为图片元素。
buffer: 缓冲区text?: 文本 返回:Sendable | null- 图片元素
点击展开完整类型定义
function text(
event: Event,
options?: { clean?: boolean; trim?: boolean },
): string;
function find<T extends Element>(event: Event, type: string): T | undefined;
function filter<T extends Element>(event: Event, type: string): T[];
function match(
event: Event,
pattern: string,
quote?: boolean,
): Promise<{ message_id: number } | null>;
async function runWithReaction<T>(
e: Event,
fn: () => Promise<T>,
id?: number,
): Promise<T>;
function ensureBuffer(buffer: Buffer, text?: string): Sendable | null;图片/头像
getQQAvatarLink
获取 QQ 头像链接。
size?: 头像大小 返回:string- 头像链接
getGroupAvatarLink
获取群头像链接。
group: 群号size?: 头像大小 返回:string- 群头像链接
getImage
获取消息中的图片元素。
event: 消息事件 返回:RecvImageElement | null- 图片元素
getImageUrl
获取消息中的图片 URL。
event: 消息事件 返回:Promise<string>- 图片链接
getQuoteMsg
获取引用的消息。
event: 消息事件timeout?: 超时时间 返回:Promise<Event | null>- 引用的消息事件
getMentionedImage
获取 @ 提及中的图片。
event: 消息事件 返回:Promise<RecvImageElement | null>- 提及的图片
getBfaceUrl
获取表情包链接。
file: 文件名 返回:Promise<string | null>- 表情包链接
点击展开完整类型定义
function getQQAvatarLink(qq: number | string, size?: number): string;
function getGroupAvatarLink(group: number | string, size?: number): string;
function getImage(event: Event): RecvImageElement | null;
function getImageUrl(event: Event): Promise<string>;
function getQuoteMsg(event: Event, timeout?: number): Promise<Event | null>;
function getMentionedImage(event: Event): Promise<RecvImageElement | null>;
function getBfaceUrl(file: string): Promise<string | null>;用户信息
getMentionedUserId
获取 @ 提及的用户 QQ 号。
event: 消息事件 返回:Promise<number | 0>- 提及的用户 QQ 号
getQuoteText
获取引用消息的文本。
event: 消息事件 返回:Promise<string>- 引用消息文本
点击展开完整类型定义
function getMentionedUserId(event: Event): Promise<number | 0>;
function getQuoteText(event: Event): Promise<string>;登录相关
requestLoginViaDevTools
请求开发者工具登录。
返回:
{ code: string, url: string }- 登录码和 URL
queryDevToolsLoginStatus
查询开发者工具登录状态。
code: 登录码 返回:{ status, ticket? }- 登录状态
getAuthCodeViaTicket
通过票据获取 AuthCode。
ticket: 票据appid: 应用 ID 返回:Promise<string>- AuthCode
getMinicoTokenViaAuthCode
通过 AuthCode 获取 minico Token。
authCode: AuthCodeappid: 应用 ID 返回:Promise<any>- minico Token
点击展开完整类型定义
function requestLoginViaDevTools(): Promise<{ code: string; url: string }>;
function queryDevToolsLoginStatus(
code: string,
): Promise<{ status: string; ticket?: string }>;
function getAuthCodeViaTicket(ticket: string, appid: string): Promise<string>;
function getMinicoTokenViaAuthCode(
authCode: string,
appid: string,
): Promise<any>;GTK
getGTk
计算 GTK 值。
pskey: PSKEY 返回:number- GTK 值
点击展开完整类型定义
function getGTk(pskey: string): number;常量
START_TIME
启动时间。
返回:
Date- 启动时间
ChromeUA
Chrome User-Agent 字符串。
返回:
string- Chrome User-Agent
CORE_PLUGINS
核心插件列表。
返回:
string[]- 核心插件列表
BUILTIN_PLUGINS
内置插件列表。
返回:
MiokiPlugin[]- 内置插件列表
点击展开完整类型定义
const START_TIME: Date;
const ChromeUA: string;
const CORE_PLUGINS: string[];
const BUILTIN_PLUGINS: MiokiPlugin[];Actions
消息操作
runWithErrorHandler
带错误处理执行函数。
bot: NapCat 实例fn: 执行函数event?: 事件对象message?: 错误消息 返回:Promise<any>- 执行结果
createForwardMsg
创建转发消息。
bot: NapCat 实例message?: 消息数组options?: 选项 返回:Sendable- 转发消息
signArk
签名 Ark 消息。
bot: NapCat 实例json: JSON 字符串 返回:Promise<string>- 签名后的 JSON
点击展开完整类型定义
function runWithErrorHandler(
bot: NapCat,
fn: () => Promise<any>,
event?: Event,
message?: string,
): Promise<any>;
function createForwardMsg(
bot: NapCat,
message?: any[],
options?: { hint?: string; trace?: boolean },
): Sendable;
function signArk(bot: NapCat, json: string): Promise<string>;图片上传
uploadImageToCollection
上传图片到收藏。
bot: NapCat 实例buffer: 图片缓冲区 返回:Promise<string>- 图片链接
uploadImageToGroupHomework
上传图片到群作业。
bot: NapCat 实例imgBase64: Base64 图片 返回:Promise<string>- 图片链接
uploadImageToGroupNotice
上传图片到群公告。
bot: NapCat 实例urlOrBlob: URL 或 Blob 返回:{ h, w, id, url... }- 公告图片信息
点击展开完整类型定义
function uploadImageToCollection(bot: NapCat, buffer: Buffer): Promise<string>;
function uploadImageToGroupHomework(
bot: NapCat,
imgBase64: string,
): Promise<string>;
function uploadImageToGroupNotice(
bot: NapCat,
urlOrBlob: string | Blob,
): Promise<{ h: number; w: number; id: string; url: string }>;群发消息
noticeGroups
通知多个群。
bot: NapCat 实例groupIdList: 群号列表message?: 消息内容delay?: 发送延迟 返回:Promise<void>
noticeFriends
通知多个好友。
bot: NapCat 实例friendIdList: 好友列表message?: 消息内容delay?: 发送延迟 返回:Promise<void>
noticeAdmins
通知所有管理员。
bot: NapCat 实例message?: 消息内容delay?: 发送延迟 返回:Promise<void>
noticeOwners
通知所有群主。
bot: NapCat 实例message?: 消息内容delay?: 发送延迟 返回:Promise<void>
noticeMainOwner
通知主群主。
bot: NapCat 实例message?: 消息内容 返回:Promise<void>
点击展开完整类型定义
function noticeGroups(
bot: NapCat,
groupIdList: number[],
message?: Sendable,
delay?: number,
): Promise<void>;
function noticeFriends(
bot: NapCat,
friendIdList: number[],
message?: Sendable,
delay?: number,
): Promise<void>;
function noticeAdmins(
bot: NapCat,
message?: Sendable,
delay?: number,
): Promise<void>;
function noticeOwners(
bot: NapCat,
message?: Sendable,
delay?: number,
): Promise<void>;
function noticeMainOwner(bot: NapCat, message?: Sendable): Promise<void>;违规记录
getViolationRecords
获取违规记录列表。
bot: NapCat 实例authCode: AuthCodeappid: 应用 IDsize?: 记录数量 返回:{ type, time, duration, reason }[]- 违规记录列表
点击展开完整类型定义
function getViolationRecords(
bot: NapCat,
authCode: string,
appid: string,
size?: number,
): Promise<{ type: number; time: number; duration: number; reason: string }[]>;getLogFilePath
获取日志文件路径。
type?: 日志类型 返回:string- 日志文件路径
点击展开完整类型定义
function getLogFilePath(type?: "app" | "error" | "mioki"): string;文件系统
fs
Node.js 文件系统模块。
返回:
FileSystemAdapter- fs 适配器
点击展开完整类型定义
const fs: FileSystemAdapter;path
Node.js 路径模块。
返回:
PathUtil- 路径工具
点击展开完整类型定义
const path: PathUtil;字符串处理
md5
计算 MD5 哈希值。
text: 待加密文本encoding?: 编码方式 返回:Buffer | string- 加密结果
点击展开完整类型定义
function md5(text: string, encoding?: BufferEncoding): Buffer | string;base64Encode
进行 Base64 编码。
str: 待编码字符串 返回:string- Base64 编码结果
点击展开完整类型定义
function base64Encode(str: string): string;base64Decode
进行 Base64 解码。
str: 待解码字符串type?: 解码类型 返回:string | Buffer- 解码结果
点击展开完整类型定义
function base64Decode(str: string, type?: "string" | "buffer"): string | Buffer;qs
将对象序列化为 URL 参数字符串。
obj: 待序列化对象 返回:string- URL 参数字符串
点击展开完整类型定义
function qs(obj: Record<string, any>): string;时间处理
localeDate
获取本地日期字符串。
ts?: 时间戳options?: 选项 返回:string- 固定日期字符串
点击展开完整类型定义
function localeDate(
ts?: number,
options?: { locale?: string; timeZone?: string },
): string;localeTime
获取本地时间字符串。
ts?: 时间戳options?: 选项 返回:string- 固定时间字符串
点击展开完整类型定义
function localeTime(
ts?: number,
options?: { locale?: string; timeZone?: string },
): string;formatDuration
格式化时间间隔。
ms: 毫秒数 返回:string- 格式化的时间间隔
点击展开完整类型定义
function formatDuration(ms: number): string;formatQQLevel
格式化 QQ 等级。
level: QQ 等级 返回:number- 格式化后的等级
点击展开完整类型定义
function formatQQLevel(level: number): number;prettyMs
格式化毫秒数。
ms: 毫秒数options?: 选项 返回:string- 格式化的毫秒
点击展开完整类型定义
function prettyMs(ms: number, options?: prettyMs.Options): string;随机
randomInt
生成指定范围内的随机整数。
min: 最小值max: 最大值hashArgs?: 稳定随机参数 返回:number- 随机整数
点击展开完整类型定义
function randomInt(min: number, max: number, ...hashArgs: any[]): number;randomItem
从数组中随机取出一项。
array: 数组hashArgs?: 稳定随机参数 返回:T- 随机取出的项
点击展开完整类型定义
function randomItem<T>(array: T[], ...hashArgs: any[]): T;randomItems
从数组中随机取出多项。
array: 数组count: 取出数量hashArgs?: 稳定随机参数 返回:T[]- 随机取出的多项
点击展开完整类型定义
function randomItems<T>(array: T[], count: number, ...hashArgs: any[]): T[];randomId
生成随机 ID。
返回:
string- 随机 ID
点击展开完整类型定义
function randomId(): string;uuid
生成 UUID 字符串。
返回:
string- UUID 字符串
点击展开完整类型定义
function uuid(): string;数组/对象
unique
去除数组重复项。
array: 数组 返回:T[]- 去重后的数组
点击展开完整类型定义
function unique<T>(array: T[]): T[];toArray
确保值为数组。
value: 值或数组 返回:T[]- 确保为数组
点击展开完整类型定义
function toArray<T>(value: T | T[]): T[];clamp
限制数值在指定范围内。
n: 数值min: 最小值max: 最大值 返回:number- 限制范围内的数值
点击展开完整类型定义
function clamp(n: number, min: number, max: number): number;toMsgId
生成消息 ID。
event: 包含 seq 和 rand 的对象 返回:string- 消息 ID
点击展开完整类型定义
function toMsgId(event: { seq: number; rand: number }): string;类型判断
isDefined
判断值是否已定义。
val: 值 返回:val is T- 是否已定义
点击展开完整类型定义
function isDefined<T>(val: T | undefined | null): val is T;isFunction
判断值是否为函数。
val: 值 返回:val is T- 是否为函数
点击展开完整类型定义
function isFunction<T>(val: any): val is T;isNumber
判断值是否为数字。
val: 值 返回:val is number- 是否为数字
点击展开完整类型定义
function isNumber(val: any): val is number;isBoolean
判断值是否为布尔值。
val: 值 返回:val is boolean- 是否为布尔值
点击展开完整类型定义
function isBoolean(val: any): val is boolean;isString
判断值是否为字符串。
val: 值 返回:val is string- 是否为字符串
点击展开完整类型定义
function isString(val: any): val is string;isObject
判断值是否为对象。
val: 值 返回:val is object- 是否为对象
点击展开完整类型定义
function isObject(val: any): val is object;isGroupMsg
判断事件是否为群消息。
event: 事件对象 返回:event is GroupMessageEvent- 是否为群消息
点击展开完整类型定义
function isGroupMsg(event: Event): event is GroupMessageEvent;isPrivateMsg
判断事件是否为私聊消息。
event: 事件对象 返回:event is PrivateMessageEvent- 是否为私聊消息
点击展开完整类型定义
function isPrivateMsg(event: Event): event is PrivateMessageEvent;等待/延时
wait
延时等待。
ms: 毫秒数 返回:Promise<void>- Promise
点击展开完整类型定义
function wait(ms: number): Promise<void>;getTerminalInput
获取终端用户输入。
inputTip?: 提示文字 返回:Promise<string>- 用户输入
点击展开完整类型定义
function getTerminalInput(inputTip?: string): Promise<string>;命令解析
createCmd
解析命令字符串。
cmdStr: 命令字符串options?: 解析选项 返回:{ cmd: string | undefined, params: string[], options: Record<string, any> }- 解析结果
点击展开完整类型定义
function createCmd(
cmdStr: string,
options?: { prefix?: string },
): {
cmd: string | undefined;
params: string[];
options: Record<string, any>;
};数据库
createDB
创建数据库实例。
filename: 文件名options?: 选项 返回:Promise<Low<T>>- 数据库实例
点击展开完整类型定义
function createDB<T>(
filename: string,
options?: Low.Options<T>,
): Promise<Low<T>>;createStore
创建存储实例。
defaultData: 默认数据options?: 选项 返回:Promise<Low<T>>- 存储实例
点击展开完整类型定义
function createStore<T>(
defaultData: T,
options?: Low.Options<T>,
): Promise<Low<T>>;消息处理
text
提取消息文本。
event: 消息事件options?: 选项 返回:string- 消息文本
点击展开完整类型定义
function text(
event: Event,
options?: { clean?: boolean; trim?: boolean },
): string;find
查找指定类型的消息元素。
event: 消息事件type: 元素类型 返回:Element | undefined- 找到的元素
点击展开完整类型定义
function find<T extends Element>(event: Event, type: string): T | undefined;filter
过滤指定类型的消息元素。
event: 消息事件type: 元素类型 返回:Element[]- 所有匹配的元素
点击展开完整类型定义
function filter<T extends Element>(event: Event, type: string): T[];match
匹配并发送消息。
event: 消息事件pattern: 匹配模式quote?: 是否引用 返回:Promise<{ message_id: number } | null>- 匹配结果
点击展开完整类型定义
function match(
event: Event,
pattern: string,
quote?: boolean,
): Promise<{ message_id: number } | null>;runWithReaction
使用表态执行函数。
e: 事件对象fn: 执行函数id?: 表态 ID 返回:Promise<Return>- 执行结果
点击展开完整类型定义
async function runWithReaction<T>(
e: Event,
fn: () => Promise<T>,
id?: number,
): Promise<T>;ensureBuffer
确保缓冲区为图片元素。
buffer: 缓冲区text?: 文本 返回:Sendable | null- 图片元素
点击展开完整类型定义
function ensureBuffer(buffer: Buffer, text?: string): Sendable | null;图片/头像
getQQAvatarLink
获取 QQ 头像链接。
size?: 头像大小 返回:string- 头像链接
点击展开完整类型定义
function getQQAvatarLink(qq: number | string, size?: number): string;getGroupAvatarLink
获取群头像链接。
group: 群号size?: 头像大小 返回:string- 群头像链接
点击展开完整类型定义
function getGroupAvatarLink(group: number | string, size?: number): string;getImage
获取消息中的图片元素。
event: 消息事件 返回:RecvImageElement | null- 图片元素
点击展开完整类型定义
function getImage(event: Event): RecvImageElement | null;getImageUrl
获取消息中的图片 URL。
event: 消息事件 返回:Promise<string>- 图片链接
点击展开完整类型定义
function getImageUrl(event: Event): Promise<string>;getQuoteMsg
获取引用的消息。
event: 消息事件timeout?: 超时时间 返回:Promise<Event | null>- 引用的消息事件
点击展开完整类型定义
function getQuoteMsg(event: Event, timeout?: number): Promise<Event | null>;getMentionedImage
获取 @ 提及中的图片。
event: 消息事件 返回:Promise<RecvImageElement | null>- 提及的图片
点击展开完整类型定义
function getMentionedImage(event: Event): Promise<RecvImageElement | null>;getBfaceUrl
获取表情包链接。
file: 文件名 返回:Promise<string | null>- 表情包链接
点击展开完整类型定义
function getBfaceUrl(file: string): Promise<string | null>;用户信息
getMentionedUserId
获取 @ 提及的用户 QQ 号。
event: 消息事件 返回:Promise<number | 0>- 提及的用户 QQ 号
点击展开完整类型定义
function getMentionedUserId(event: Event): Promise<number | 0>;getQuoteText
获取引用消息的文本。
event: 消息事件 返回:Promise<string>- 引用消息文本
点击展开完整类型定义
function getQuoteText(event: Event): Promise<string>;登录相关
requestLoginViaDevTools
请求开发者工具登录。
返回:
{ code: string, url: string }- 登录码和 URL
点击展开完整类型定义
function requestLoginViaDevTools(): Promise<{ code: string; url: string }>;queryDevToolsLoginStatus
查询开发者工具登录状态。
code: 登录码 返回:{ status, ticket? }- 登录状态
点击展开完整类型定义
function queryDevToolsLoginStatus(
code: string,
): Promise<{ status: string; ticket?: string }>;getAuthCodeViaTicket
通过票据获取 AuthCode。
ticket: 票据appid: 应用 ID 返回:Promise<string>- AuthCode
点击展开完整类型定义
function getAuthCodeViaTicket(ticket: string, appid: string): Promise<string>;getMinicoTokenViaAuthCode
通过 AuthCode 获取 minico Token。
authCode: AuthCodeappid: 应用 ID 返回:Promise<any>- minico Token
点击展开完整类型定义
function getMinicoTokenViaAuthCode(
authCode: string,
appid: string,
): Promise<any>;GTK
getGTk
计算 GTK 值。
pskey: PSKEY 返回:number- GTK 值
点击展开完整类型定义
function getGTk(pskey: string): number;常量
START_TIME
启动时间。
返回:
Date- 启动时间
点击展开完整类型定义
const START_TIME: Date;ChromeUA
Chrome User-Agent 字符串。
返回:
string- Chrome User-Agent
点击展开完整类型定义
const ChromeUA: string;CORE_PLUGINS
核心插件列表。
返回:
string[]- 核心插件列表
点击展开完整类型定义
const CORE_PLUGINS: string[];BUILTIN_PLUGINS
内置插件列表。
返回:
MiokiPlugin[]- 内置插件列表
点击展开完整类型定义
const BUILTIN_PLUGINS: MiokiPlugin[];Actions
消息操作
runWithErrorHandler
带错误处理执行函数。
bot: NapCat 实例fn: 执行函数event?: 事件对象message?: 错误消息 返回:Promise<any>- 执行结果
点击展开完整类型定义
function runWithErrorHandler(
bot: NapCat,
fn: () => Promise<any>,
event?: Event,
message?: string,
): Promise<any>;createForwardMsg
创建转发消息。
bot: NapCat 实例message?: 消息数组options?: 选项 返回:Sendable- 转发消息
点击展开完整类型定义
function createForwardMsg(
bot: NapCat,
message?: any[],
options?: { hint?: string; trace?: boolean },
): Sendable;signArk
签名 Ark 消息。
bot: NapCat 实例json: JSON 字符串 返回:Promise<string>- 签名后的 JSON
点击展开完整类型定义
function signArk(bot: NapCat, json: string): Promise<string>;图片上传
uploadImageToCollection
上传图片到收藏。
bot: NapCat 实例buffer: 图片缓冲区 返回:Promise<string>- 图片链接
点击展开完整类型定义
function uploadImageToCollection(bot: NapCat, buffer: Buffer): Promise<string>;uploadImageToGroupHomework
上传图片到群作业。
bot: NapCat 实例imgBase64: Base64 图片 返回:Promise<string>- 图片链接
点击展开完整类型定义
function uploadImageToGroupHomework(
bot: NapCat,
imgBase64: string,
): Promise<string>;uploadImageToGroupNotice
上传图片到群公告。
bot: NapCat 实例urlOrBlob: URL 或 Blob 返回:{ h, w, id, url... }- 公告图片信息
点击展开完整类型定义
function uploadImageToGroupNotice(
bot: NapCat,
urlOrBlob: string | Blob,
): Promise<{ h: number; w: number; id: string; url: string }>;群发消息
noticeGroups
通知多个群。
bot: NapCat 实例groupIdList: 群号列表message?: 消息内容delay?: 发送延迟 返回:Promise<void>
点击展开完整类型定义
function noticeGroups(
bot: NapCat,
groupIdList: number[],
message?: Sendable,
delay?: number,
): Promise<void>;noticeFriends
通知多个好友。
bot: NapCat 实例friendIdList: 好友列表message?: 消息内容delay?: 发送延迟 返回:Promise<void>
点击展开完整类型定义
function noticeFriends(
bot: NapCat,
friendIdList: number[],
message?: Sendable,
delay?: number,
): Promise<void>;noticeAdmins
通知所有管理员。
bot: NapCat 实例message?: 消息内容delay?: 发送延迟 返回:Promise<void>
点击展开完整类型定义
function noticeAdmins(
bot: NapCat,
message?: Sendable,
delay?: number,
): Promise<void>;noticeOwners
通知所有群主。
bot: NapCat 实例message?: 消息内容delay?: 发送延迟 返回:Promise<void>
点击展开完整类型定义
function noticeOwners(
bot: NapCat,
message?: Sendable,
delay?: number,
): Promise<void>;noticeMainOwner
通知主群主。
bot: NapCat 实例message?: 消息内容 返回:Promise<void>
点击展开完整类型定义
function noticeMainOwner(bot: NapCat, message?: Sendable): Promise<void>;违规记录
getViolationRecords
获取违规记录列表。
bot: NapCat 实例authCode: AuthCodeappid: 应用 IDsize?: 记录数量 返回:{ type, time, duration, reason }[]- 违规记录列表
点击展开完整类型定义
function getViolationRecords(
bot: NapCat,
authCode: string,
appid: string,
size?: number,
): Promise<{ type: number; time: number; duration: number; reason: string }[]>;Configs
配置读取
botConfig: MiokiConfig
当前配置
BOT_CWD: { value: string }
工作目录
isInPm2: boolean
是否在 PM2 中运行
readMiokiConfig(): MiokiConfig
返回:
MiokiConfig- Mioki 配置
readPackageJson(): Record
返回:
Record- package.json 内容
writePackageJson(pkg): void
pkg: package.json 对象 返回: void
updateBotConfig(draftFn): Promise<void>
draftFn: 配置更新函数 返回:Promise<void>
updateBotCWD(root): void
root: 工作目录 返回: void
normalizeNapCatConfig(config): NapCatConfig
config: NapCat 配置 返回:NapCatConfig- 规范化后的配置
权限判断
isOwner(id): boolean
id: 用户 ID 或事件对象 返回:boolean- 是否主人
isAdmin(id): boolean
id: 用户 ID 或事件对象 返回:boolean- 是否管理员(非主人)
isOwnerOrAdmin(id): boolean
id: 用户 ID 或事件对象 返回:boolean- 是否主人或管理员
hasRight(id): boolean
id: 用户 ID 或事件对象 返回:boolean- 是否有权限
Services
服务管理
services: MiokiServices
全局服务集合
addService(name, service, cover?): () => void
name: 服务名称service: 服务对象cover?: 是否覆盖 返回:() => void- 移除服务函数
getMiokiStatus(): Promise<MiokiStatus>
返回:
Promise<MiokiStatus>- 系统状态
formatMiokiStatus(status): Promise<string>
status: MiokiStatus 对象 返回:Promise<string>- 格式化的状态字符串
插件系统
插件定义
definePlugin(plugin): MiokiPlugin
plugin: 插件对象 返回:MiokiPlugin- 插件对象
enablePlugin(bots, plugin, type?): Promise<MiokiPlugin>
bots: NapCat 实例数组plugin: 插件对象type?: 插件类型 返回:Promise<MiokiPlugin>- 启用的插件
findLocalPlugins(): Promise<{ name, absPath }[]>
返回:
{ name, absPath }[]- 本地插件列表
ensurePluginDir(): void
返回: void
getAbsPluginDir(defaultDir?): string
defaultDir?: 默认目录 返回:string- 插件目录绝对路径
去重器
deduplicator: Deduplicator
事件去重器
isProcessed(event, scope?): boolean
event: 事件对象scope?: 作用域 返回:boolean- 是否已处理
markProcessed(event, scope?): void
event: 事件对象scope?: 作用域 返回: void
启动
start(options?): Promise<void>
options?: 启动选项 返回:Promise<void>
connectedBots: Map<number, ExtendedNapCat>
已连接的机器人
点击展开完整类型定义
// Logger
const logger: Logger;
function getMiokiLogger(level: LogLevel): Logger;
function getLogFilePath(type?: string): string;
// Utils
const fs: typeof import("fs");
const path: typeof import("path");
function md5(text: BinaryLike, encoding: "buffer"): Buffer;
function md5(text: BinaryLike, encoding?: BinaryToTextEncoding): string;
function base64Encode(str: string | number | Buffer): string;
function base64Decode(
str: string,
type?: "buffer" | BufferEncoding,
): string | Buffer;
function qs(obj: Record<number | string, any>): string;
const dayjs: typeof import("dayjs");
function localeDate(
ts?: number | string | Date,
options?: FormatOptions,
): string;
function localeTime(
ts?: number | string,
options?: FormatOptions & { seconds?: boolean },
): string;
function formatDuration(ms: number): string;
function formatQQLevel(level: number): string;
function prettyMs(ms: number, options?: object): string;
function randomInt(min: number, max: number, ...hashArgs: any[]): number;
function randomItem<T = any>(array: readonly T[], ...hashArgs: any[]): T;
function randomItems<T = any>(
array: readonly T[],
count: number,
...hashArgs: any[]
): T[];
function randomId(): string;
function uuid(): string;
function unique<T>(array: T[]): T[];
function toArray<T>(value: T | T[]): T[];
function clamp(n: number, min: number, max: number): number;
function toMsgId(event: { seq: number; rand: number }): string;
function isDefined<T = unknown>(val?: T): val is T;
function isFunction<T extends AnyFunc>(val: unknown): val is T;
function isNumber(val: unknown): val is number;
function isBoolean(val: unknown): val is boolean;
function isString(val: unknown): val is string;
function isObject(val: unknown): val is object;
function isGroupMsg(event: MessageEvent): event is GroupMessageEvent;
function isPrivateMsg(event: MessageEvent): event is PrivateMessageEvent;
function wait(ms: number): Promise<void>;
function getTerminalInput(inputTip?: string): Promise<string>;
function createCmd(
cmdStr: string,
options?: CreateCmdOptions,
): { cmd: string | undefined; params: string[]; options: Record<string, any> };
function createDB<T extends object = object>(
filename: string,
options?: { defaultData?: T; compress?: boolean },
): Promise<Low<T>>;
function createStore<T extends object = object>(
defaultData: T,
options?: {
__dirname?: string;
importMeta?: ImportMeta;
compress?: boolean;
filename?: string;
},
): Promise<Low<T>>;
function text(
event: HasMessage,
options?: { trim?: boolean | "whole" | "each" },
): string;
function find<Type extends Pick<RecvElement, "type">["type"]>(
event: HasMessage,
type: Type,
): Extract<RecvElement, { type: Type }> | undefined;
function filter<Type extends Pick<RecvElement, "type">["type"]>(
event: HasMessage,
type: Type,
): Extract<RecvElement, { type: Type }>[];
function match<E extends MessageEvent>(
event: E,
pattern: Record<string, MatchValue<E>>,
quote?: boolean,
): Promise<{ message_id: number } | null>;
function runWithReaction<T extends AnyFunc>(
e: GroupMessageEvent,
fn: T,
id?: string,
): Promise<ReturnType<T>>;
function ensureBuffer(buffer?: Buffer | null | undefined, text?: null): null;
function ensureBuffer(
buffer?: Buffer | null | undefined,
text?: string,
): Sendable;
function getQQAvatarLink(qq: number, size?: number): string;
function getGroupAvatarLink(group: number, size?: number): string;
function getImage(event: HasMessage): RecvImageElement | null;
function getImageUrl(event: HasMessage): Promise<string>;
function getQuoteMsg(
event: MessageEvent,
timeout?: number,
): Promise<GroupMessageEvent | PrivateMessageEvent | null>;
function getQuoteImage(event: MessageEvent): Promise<RecvImageElement | null>;
function getQuoteImageUrl(event: MessageEvent): Promise<string>;
function getMentionedImage(
event: MessageEvent,
): Promise<RecvImageElement | null>;
function getMentionedImageUrl(event: MessageEvent): Promise<string>;
function getBfaceUrl(file: string): Promise<string | null>;
function getMentionedUserId(event: MessageEvent): Promise<number | 0>;
function getQuoteText(event: MessageEvent): Promise<string>;
function requestLoginViaDevTools(): Promise<{ code: string; url: string }>;
function queryDevToolsLoginStatus(code: string): Promise<{
status: "OK" | "Wait" | "Expired" | "Used" | "Error";
ticket?: string;
}>;
function getAuthCodeViaTicket(ticket: string, appid: number): Promise<string>;
function getMinicoTokenViaAuthCode(
authCode: string,
appid: number,
): Promise<any>;
function localNum(num: number, locale?: string): string;
function getGTk(pskey: string): number;
const START_TIME: Date;
const ChromeUA = "Mozilla/5.0 (Windows NT 10.0; Win64, x64) Chrome/131.0.0.0";
const CORE_PLUGINS: string[];
const BUILTIN_PLUGINS: MiokiPlugin[];
// Actions
function runWithErrorHandler(
bot: NapCat,
fn: () => any,
event?: {
reply: (
content: Sendable,
quote?: boolean,
) => Promise<{ message_id: number }>;
},
message?: Sendable | ((error: string) => Sendable),
): Promise<any>;
function createForwardMsg(
bot: NapCat,
message?: Sendable[],
options?: { user_id?: number; nickname?: string },
): Sendable;
function signArk(bot: NapCat, json: string): Promise<string>;
function uploadImageToCollection(
bot: NapCat,
buffer: ArrayBuffer,
): Promise<string>;
function uploadImageToGroupHomework(
bot: NapCat,
imgBase64: string,
): Promise<string>;
function uploadImageToGroupNotice(
bot: NapCat,
urlOrBlob: string | Blob,
): Promise<{
h: string;
w: string;
id: string;
url: string;
url2: string;
url3: string;
url4: string;
url5: string;
url6: string;
}>;
function noticeGroups(
bot: NapCat,
groupIdList: number[],
message?: Sendable | null,
delay?: number,
): Promise<void>;
function noticeFriends(
bot: NapCat,
friendIdList: number[],
message?: Sendable | null,
delay?: number,
): Promise<void>;
function noticeAdmins(
bot: NapCat,
message?: Sendable | null,
delay?: number,
): Promise<void>;
function noticeOwners(
bot: NapCat,
message?: Sendable | null,
delay?: number,
): Promise<void>;
function noticeMainOwner(bot: NapCat, message?: Sendable | null): Promise<void>;
function getViolationRecords(
bot: NapCat,
authCode: string,
appid: number,
size?: number,
): Promise<{ type: string; time: string; duration: string; reason: number }[]>;
// Configs
const botConfig: MiokiConfig;
const BOT_CWD: { value: string };
const isInPm2: boolean;
function readMiokiConfig(): MiokiConfig;
function readPackageJson(): Record<"mioki" | (string & {}), any>;
function writePackageJson(pkg: Record<string, any>): void;
function updateBotConfig(draftFn: (config: MiokiConfig) => any): Promise<void>;
function updateBotCWD(root: string): void;
function normalizeNapCatConfig(
config: NapCatInstanceConfig | NapCatInstanceConfig[],
): NapCatConfig;
function isOwner(
id: number | { sender: { user_id: number } } | { user_id: number },
): boolean;
function isAdmin(
id: number | { sender: { user_id: number } } | { user_id: number },
): boolean;
function isOwnerOrAdmin(
id: number | { sender: { user_id: number } } | { user_id: number },
): boolean;
function hasRight(
id: number | { sender: { user_id: number } } | { user_id: number },
): boolean;
// Services
const services: MiokiServices;
function addService(name: string, service: any, cover?: boolean): () => void;
function getMiokiStatus(bots: ExtendedNapCat[]): Promise<MiokiStatus>;
function formatMiokiStatus(status: MiokiStatus): Promise<string>;
// Plugin
const runtimePlugins: Map<
string,
{
name: string;
type: "builtin" | "external";
version: string;
description: string;
plugin: MiokiPlugin;
disable: () => any;
}
>;
const deduplicator: Deduplicator;
const connectedBots: Map<number, ExtendedNapCat>;
function start(options?: StartOptions): Promise<void>;
function definePlugin(plugin: MiokiPlugin): MiokiPlugin;
function enablePlugin(
bots: ExtendedNapCat[],
plugin: MiokiPlugin,
type?: "builtin" | "external",
): Promise<MiokiPlugin>;
function findLocalPlugins(): Promise<{ name: string; absPath: string }[]>;
function ensurePluginDir(): void;
function getAbsPluginDir(defaultDir?: string): string;