el-bot
Version:
A quick qq bot framework for mirai.
56 lines (47 loc) • 1.28 kB
text/typescript
import type { Bot } from 'el-bot'
import type { EventEmitter } from 'node:events'
import type { IncomingMessage, ServerResponse } from 'node:http'
import * as octokit from '@octokit/webhooks'
import * as shell from 'shelljs'
// github handler
export interface handler extends EventEmitter {
(
req: IncomingMessage,
res: ServerResponse,
callback: (err: Error) => void
): void
}
/**
* Setup github webhook handler
* @see https://github.com/octokit/webhooks
*/
export function githubHandler(ctx: Bot) {
const config = {
secret: ctx.el.webhook?.secret || 'el-psy-congroo',
}
const handler = new octokit.Webhooks(config)
const middleware = octokit.createNodeMiddleware(handler, {
path: ctx.el.webhook?.path || '/webhook',
})
handler.onError((err) => {
ctx.logger.error(`Error: ${err}`)
})
// 处理
handler.on('push', (event) => {
ctx.logger.info(
`Received a push event for ${event.payload.repository.name} to ${event.payload.ref}`,
)
// git pull repo
if (shell.exec('git pull').code !== 0) {
ctx.logger.error('Git 拉取失败,请检查默认分支。')
}
else {
ctx.logger.info('安装依赖...')
shell.exec('yarn')
}
})
return {
handler,
middleware,
}
}