UNPKG

el-bot

Version:

A quick qq bot framework for mirai.

93 lines (83 loc) 1.73 kB
import type { Bot } from 'el-bot' import * as shell from 'shelljs' /** * 任务 */ interface Job { name: string do: string[] } /** * 步骤 */ interface Step { cmd: string async: boolean } /** * cli 配置项 */ export interface CliOptions { jobs: Job[] } /** * 执行对应任务 * @param jobs * @param name */ function doJobByName(jobs: Job[], name: string) { jobs.forEach((job: Job) => { if (job.name && job.name === name && job.do) { job.do.forEach((step: string | Step) => { let cmd = '' let async = false if (typeof step === 'string') { cmd = step } else { cmd = step.cmd async = step.async } if (cmd.includes('el run ')) { name = cmd.slice(7) doJobByName(jobs, name) } shell.exec(cmd, { async, }) }) } }) } /** * 为 program 添加初始指令 * @param ctx * @param options */ export function initProgram(ctx: Bot, options: CliOptions, qq: number) { const program = ctx.cli // 任务 program .command('jobs') .description('任务列表') .action(async () => { if (!ctx.user.isAllowed(qq, true)) return let content = '任务列表:' options.jobs.forEach((job: Job) => { if (job.name) content += `\n- ${job.name}` }) ctx.reply(content) }) // 自定义任务 program .command('run <name>') .description('运行自定义任务') .action(async (name: string) => { if (!ctx.user.isAllowed(qq, true)) return if (options && options.jobs && options.jobs.length > 0) doJobByName(options.jobs, name) }) }