fix: 完成ts化
This commit is contained in:
parent
a79e7c16bc
commit
52d8992562
|
@ -11,7 +11,7 @@ import cfg from './config/config.js'
|
||||||
/**
|
/**
|
||||||
* 监听
|
* 监听
|
||||||
*/
|
*/
|
||||||
import ListenerLoader from './lib/listener/loader.js'
|
import ListenerLoader from './core/loader.js'
|
||||||
/**
|
/**
|
||||||
* 扩展
|
* 扩展
|
||||||
*/
|
*/
|
||||||
|
@ -64,6 +64,6 @@ export class Yunzai extends Client {
|
||||||
/** 全局变量 bot */
|
/** 全局变量 bot */
|
||||||
global.Bot = bot
|
global.Bot = bot
|
||||||
/** 加载插件 */
|
/** 加载插件 */
|
||||||
return await (await import('./lib/plugins/loader.js')).default.load()
|
return await (await import('./core/plugins/loader.js')).default.load()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,11 +99,11 @@ class Cfg {
|
||||||
* 主人qq
|
* 主人qq
|
||||||
*/
|
*/
|
||||||
get masterQQ() {
|
get masterQQ() {
|
||||||
const masterQQ = this.getConfig('other')?.masterQQ || []
|
const qqs = this.getConfig('other')?.masterQQ || []
|
||||||
if (Array.isArray(masterQQ)) {
|
if (Array.isArray(qqs)) {
|
||||||
return masterQQ.forEach(qq => { qq = String(qq) })
|
return qqs.map(qq => String(qq))
|
||||||
} else {
|
} else {
|
||||||
return [String(masterQQ)]
|
return [String(qqs)]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ export async function makeForwardMsg(
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (dec) {
|
if (dec && !Array.isArray(forwardMsg)) {
|
||||||
/**
|
/**
|
||||||
* 处理描述
|
* 处理描述
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import PluginsLoader from '../plugins/loader.js'
|
import PluginsLoader from './plugins/loader.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export default class EventListener {
|
export default class EventListener {
|
||||||
prefix = ''
|
prefix = ''
|
|
@ -5,14 +5,18 @@ import lodash from 'lodash'
|
||||||
* 加载监听事件
|
* 加载监听事件
|
||||||
*/
|
*/
|
||||||
class ListenerLoader {
|
class ListenerLoader {
|
||||||
|
client = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听事件加载
|
* 监听事件加载
|
||||||
* @param client Bot示例
|
* @param client Bot示例
|
||||||
*/
|
*/
|
||||||
async load (client) {
|
async load(client) {
|
||||||
this.client = client
|
this.client = client
|
||||||
|
|
||||||
const files = fs.readdirSync('./lib/events').filter(file => file.endsWith('.js'))
|
const files = fs
|
||||||
|
.readdirSync('./lib/events')
|
||||||
|
.filter(file => file.endsWith('.js'))
|
||||||
|
|
||||||
for (let File of files) {
|
for (let File of files) {
|
||||||
try {
|
try {
|
||||||
|
@ -25,13 +29,15 @@ class ListenerLoader {
|
||||||
const on = listener.once ? 'once' : 'on'
|
const on = listener.once ? 'once' : 'on'
|
||||||
|
|
||||||
if (lodash.isArray(listener.event)) {
|
if (lodash.isArray(listener.event)) {
|
||||||
listener.event.forEach((type) => {
|
listener.event.forEach(type => {
|
||||||
const e = listener[type] ? type : 'execute'
|
const e = listener[type] ? type : 'execute'
|
||||||
this.client[on](listener.prefix + type, event => listener[e](event))
|
this.client[on](listener.prefix + type, event => listener[e](event))
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const e = listener[listener.event] ? listener.event : 'execute'
|
const e = listener[listener.event] ? listener.event : 'execute'
|
||||||
this.client[on](listener.prefix + listener.event, event => listener[e](event))
|
this.client[on](listener.prefix + listener.event, event =>
|
||||||
|
listener[e](event)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.mark(`监听事件错误:${File}`)
|
logger.mark(`监听事件错误:${File}`)
|
||||||
|
@ -42,6 +48,6 @@ class ListenerLoader {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export default new ListenerLoader()
|
export default new ListenerLoader()
|
|
@ -1,5 +1,5 @@
|
||||||
import EventListener from '../listener/listener.js'
|
import EventListener from './listener.js'
|
||||||
import { sleep } from '../../utils/common.js'
|
import { sleep } from '../utils/common.js'
|
||||||
import inquirer from 'inquirer'
|
import inquirer from 'inquirer'
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import fetch from 'node-fetch'
|
import fetch from 'node-fetch'
|
||||||
|
@ -10,20 +10,17 @@ import fetch from 'node-fetch'
|
||||||
let inSlider = false
|
let inSlider = false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export default class loginEvent extends EventListener {
|
export default class loginEvent extends EventListener {
|
||||||
|
|
||||||
|
|
||||||
client = null
|
client = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
super({
|
super({
|
||||||
prefix: 'system.login.',
|
prefix: 'system.login.',
|
||||||
|
@ -33,17 +30,19 @@ export default class loginEvent extends EventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
async execute(event) { }
|
async execute(event) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 扫码登录现在仅能在同一ip下进行
|
* 扫码登录现在仅能在同一ip下进行
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
async qrcode(event) {
|
async qrcode(event) {
|
||||||
logger.mark(`请使用登录当前QQ的手机${logger.green('扫码')}完成登录,如果显示二维码过期,可以按${logger.green('回车键(Enter)')}刷新,重新输入密码请执行命令:${logger.green('node app login')}`)
|
logger.mark(
|
||||||
|
`请使用登录当前QQ的手机${logger.green('扫码')}完成登录,如果显示二维码过期,可以按${logger.green('回车键(Enter)')}刷新,重新输入密码请执行命令:${logger.green('node app login')}`
|
||||||
|
)
|
||||||
// logger.info('等待扫码中...')
|
// logger.info('等待扫码中...')
|
||||||
|
|
||||||
/** 获取扫码结果 */
|
/** 获取扫码结果 */
|
||||||
|
@ -70,36 +69,53 @@ export default class loginEvent extends EventListener {
|
||||||
/**
|
/**
|
||||||
* 刷新二维码
|
* 刷新二维码
|
||||||
*/
|
*/
|
||||||
inquirer.prompt({ type: 'input', message: '回车刷新二维码,等待扫码中...\n', name: 'enter' }).then(async () => {
|
inquirer
|
||||||
if (!inSlider) {
|
.prompt({
|
||||||
clearInterval(interval)
|
type: 'input',
|
||||||
console.log(' 重新刷新二维码...\n\n')
|
message: '回车刷新二维码,等待扫码中...\n',
|
||||||
await sleep(1000)
|
name: 'enter'
|
||||||
this.client.fetchQrcode()
|
})
|
||||||
}
|
.then(async () => {
|
||||||
})
|
if (!inSlider) {
|
||||||
|
clearInterval(interval)
|
||||||
|
console.log(' 重新刷新二维码...\n\n')
|
||||||
|
await sleep(1000)
|
||||||
|
this.client.fetchQrcode()
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 收到滑动验证码提示后,必须使用手机拉动,PC浏览器已经无效
|
* 收到滑动验证码提示后,必须使用手机拉动,PC浏览器已经无效
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
async slider(event) {
|
async slider(event) {
|
||||||
inSlider = true
|
inSlider = true
|
||||||
console.log(`\n\n------------------${logger.green('↓↓滑动验证链接↓↓')}----------------------\n`)
|
console.log(
|
||||||
|
`\n\n------------------${logger.green('↓↓滑动验证链接↓↓')}----------------------\n`
|
||||||
|
)
|
||||||
console.log(logger.green(event.url))
|
console.log(logger.green(event.url))
|
||||||
console.log('\n--------------------------------------------------------')
|
console.log('\n--------------------------------------------------------')
|
||||||
console.log(`提示:打开上面链接获取ticket,可使用${logger.green('【滑动验证app】')}获取`)
|
console.log(
|
||||||
console.log(`链接存在${logger.green('有效期')},请尽快操作,多次操作失败可能会被冻结`)
|
`提示:打开上面链接获取ticket,可使用${logger.green('【滑动验证app】')}获取`
|
||||||
console.log('滑动验证app下载地址:https://wwp.lanzouy.com/i6w3J08um92h 密码:3kuu\n')
|
)
|
||||||
|
console.log(
|
||||||
|
`链接存在${logger.green('有效期')},请尽快操作,多次操作失败可能会被冻结`
|
||||||
|
)
|
||||||
|
console.log(
|
||||||
|
'滑动验证app下载地址:https://wwp.lanzouy.com/i6w3J08um92h 密码:3kuu\n'
|
||||||
|
)
|
||||||
|
|
||||||
const ret = await inquirer.prompt([
|
const ret = await inquirer.prompt([
|
||||||
{
|
{
|
||||||
type: 'list',
|
type: 'list',
|
||||||
name: 'type',
|
name: 'type',
|
||||||
message: '触发滑动验证,需要获取ticket通过验证,请选择获取方式:',
|
message: '触发滑动验证,需要获取ticket通过验证,请选择获取方式:',
|
||||||
choices: ['0.自动获取ticket', '1.手动获取ticket', '2.滑动验证app请求码获取']
|
choices: [
|
||||||
|
'0.自动获取ticket',
|
||||||
|
'1.手动获取ticket',
|
||||||
|
'2.滑动验证app请求码获取'
|
||||||
|
]
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -135,9 +151,9 @@ export default class loginEvent extends EventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param url
|
* @param url
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async getTicket(url) {
|
async getTicket(url) {
|
||||||
let req = `https://hlhs-nb.cn/captcha/slider?key=${Bot.uin}`
|
let req = `https://hlhs-nb.cn/captcha/slider?key=${Bot.uin}`
|
||||||
|
@ -150,7 +166,11 @@ export default class loginEvent extends EventListener {
|
||||||
console.log(`${logger.green(req)}\n----完成后将自动进行登录----`)
|
console.log(`${logger.green(req)}\n----完成后将自动进行登录----`)
|
||||||
|
|
||||||
for (let i = 0; i < 40; i++) {
|
for (let i = 0; i < 40; i++) {
|
||||||
const res = await fetch(req, {
|
const res: {
|
||||||
|
data?: {
|
||||||
|
ticket: null
|
||||||
|
}
|
||||||
|
} = await fetch(req, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify({ submit: Bot.uin })
|
body: JSON.stringify({ submit: Bot.uin })
|
||||||
}).then(res => res.json())
|
}).then(res => res.json())
|
||||||
|
@ -160,9 +180,9 @@ export default class loginEvent extends EventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param url
|
* @param url
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async requestCode(url) {
|
async requestCode(url) {
|
||||||
let txhelper = {
|
let txhelper = {
|
||||||
|
@ -171,7 +191,9 @@ export default class loginEvent extends EventListener {
|
||||||
code: null,
|
code: null,
|
||||||
url: url.replace('ssl.captcha.qq.com', 'txhelper.glitch.me')
|
url: url.replace('ssl.captcha.qq.com', 'txhelper.glitch.me')
|
||||||
}
|
}
|
||||||
txhelper.req = await fetch(txhelper.url).catch((err) => console.log(err.toString()))
|
txhelper.req = await fetch(txhelper.url).catch(err =>
|
||||||
|
console.log(err.toString())
|
||||||
|
)
|
||||||
|
|
||||||
if (!txhelper.req?.ok) return false
|
if (!txhelper.req?.ok) return false
|
||||||
|
|
||||||
|
@ -181,7 +203,9 @@ export default class loginEvent extends EventListener {
|
||||||
txhelper.code = /\d+/g.exec(txhelper.req)
|
txhelper.code = /\d+/g.exec(txhelper.req)
|
||||||
if (!txhelper.code) return false
|
if (!txhelper.code) return false
|
||||||
|
|
||||||
console.log(`\n请打开滑动验证app,输入请求码${logger.green('【' + txhelper.code + '】')},然后完成滑动验证\n`)
|
console.log(
|
||||||
|
`\n请打开滑动验证app,输入请求码${logger.green('【' + txhelper.code + '】')},然后完成滑动验证\n`
|
||||||
|
)
|
||||||
|
|
||||||
await sleep(200)
|
await sleep(200)
|
||||||
|
|
||||||
|
@ -193,7 +217,9 @@ export default class loginEvent extends EventListener {
|
||||||
})
|
})
|
||||||
|
|
||||||
//
|
//
|
||||||
txhelper.res = await fetch(txhelper.url).catch((err) => console.log(err.toString()))
|
txhelper.res = await fetch(txhelper.url).catch(err =>
|
||||||
|
console.log(err.toString())
|
||||||
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
if (!txhelper.res) return false
|
if (!txhelper.res) return false
|
||||||
|
@ -211,14 +237,15 @@ export default class loginEvent extends EventListener {
|
||||||
return lodash.trim(txhelper.res)
|
return lodash.trim(txhelper.res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备锁
|
* 设备锁
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
async device(event) {
|
async device(event) {
|
||||||
global.inputTicket = false
|
global.inputTicket = false
|
||||||
console.log(`\n\n------------------${logger.green('↓↓设备锁验证↓↓')}----------------------\n`)
|
console.log(
|
||||||
|
`\n\n------------------${logger.green('↓↓设备锁验证↓↓')}----------------------\n`
|
||||||
|
)
|
||||||
const ret = await inquirer.prompt([
|
const ret = await inquirer.prompt([
|
||||||
{
|
{
|
||||||
type: 'list',
|
type: 'list',
|
||||||
|
@ -233,26 +260,37 @@ export default class loginEvent extends EventListener {
|
||||||
if (ret.type == '1.网页扫码验证') {
|
if (ret.type == '1.网页扫码验证') {
|
||||||
console.log('\n' + logger.green(event.url) + '\n')
|
console.log('\n' + logger.green(event.url) + '\n')
|
||||||
console.log('请打开上面链接,完成验证后按回车')
|
console.log('请打开上面链接,完成验证后按回车')
|
||||||
await inquirer.prompt({ type: 'input', message: '等待操作中...', name: 'enter' })
|
await inquirer.prompt({
|
||||||
|
type: 'input',
|
||||||
|
message: '等待操作中...',
|
||||||
|
name: 'enter'
|
||||||
|
})
|
||||||
await this.client.login()
|
await this.client.login()
|
||||||
} else {
|
} else {
|
||||||
console.log('\n')
|
console.log('\n')
|
||||||
this.client.sendSmsCode()
|
this.client.sendSmsCode()
|
||||||
await sleep(200)
|
await sleep(200)
|
||||||
logger.info(`验证码已发送:${event.phone}\n`)
|
logger.info(`验证码已发送:${event.phone}\n`)
|
||||||
let res = await inquirer.prompt({ type: 'input', message: '请输入短信验证码:', name: 'sms' })
|
let res = await inquirer.prompt({
|
||||||
|
type: 'input',
|
||||||
|
message: '请输入短信验证码:',
|
||||||
|
name: 'sms'
|
||||||
|
})
|
||||||
await this.client.submitSmsCode(res.sms)
|
await this.client.submitSmsCode(res.sms)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录错误
|
* 登录错误
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
error(event) {
|
error(event) {
|
||||||
if (Number(event.code) === 1) logger.error('QQ密码错误,运行命令重新登录:node app login')
|
if (Number(event.code) === 1)
|
||||||
|
logger.error('QQ密码错误,运行命令重新登录:node app login')
|
||||||
if (global.inputTicket && event.code == 237) {
|
if (global.inputTicket && event.code == 237) {
|
||||||
logger.error(`${logger.red('ticket')}输入错误或者已失效,已停止运行,请重新登录验证`)
|
logger.error(
|
||||||
|
`${logger.red('ticket')}输入错误或者已失效,已停止运行,请重新登录验证`
|
||||||
|
)
|
||||||
} else if (event?.message.includes('冻结')) {
|
} else if (event?.message.includes('冻结')) {
|
||||||
logger.error('账号已被冻结,已停止运行')
|
logger.error('账号已被冻结,已停止运行')
|
||||||
} else {
|
} else {
|
|
@ -0,0 +1,24 @@
|
||||||
|
import EventListener from './listener.js'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听群聊消息
|
||||||
|
*/
|
||||||
|
export default class messageEvent extends EventListener {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
super({ event: 'message', prefix: undefined, once: undefined })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
async execute(e) {
|
||||||
|
this.plugins.deal(e)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,26 +1,24 @@
|
||||||
import EventListener from '../listener/listener.js'
|
import EventListener from './listener.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听群聊消息
|
* 监听群聊消息
|
||||||
*/
|
*/
|
||||||
export default class noticeEvent extends EventListener {
|
export default class noticeEvent extends EventListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
constructor () {
|
constructor() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
super({ event: 'notice', prefix: undefined, once: undefined })
|
super({ event: 'notice', prefix: undefined, once: undefined })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
async execute (e) {
|
async execute(e) {
|
||||||
this.plugins.deal(e)
|
this.plugins.deal(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,37 +1,39 @@
|
||||||
import EventListener from '../listener/listener.js'
|
import EventListener from './listener.js'
|
||||||
import fetch from 'node-fetch'
|
import fetch from 'node-fetch'
|
||||||
import cfg from '../../config/config.js'
|
import cfg from '../config/config.js'
|
||||||
import { BOT_NAME } from '../../config/system.js'
|
import { BOT_NAME } from '../config/system.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听下线事件
|
* 监听下线事件
|
||||||
*/
|
*/
|
||||||
export default class offlineEvent extends EventListener {
|
export default class offlineEvent extends EventListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
super({ event: 'system.offline', prefix: undefined, once: undefined })
|
super({ event: 'system.offline', prefix: undefined, once: undefined })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认方法
|
* 默认方法
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
async execute(e) {
|
async execute(e) {
|
||||||
logger.mark('掉线了')
|
logger.mark('掉线了')
|
||||||
let config = cfg.getConfig('notice')
|
let config = cfg.getConfig('notice')
|
||||||
let title = `${BOT_NAME}(${Bot.nickname})已离线,请关注`
|
let title = `${BOT_NAME}(${Bot.nickname})已离线,请关注`
|
||||||
if (config.iyuu) {
|
if (config.iyuu) {
|
||||||
await fetch(`https://iyuu.cn/${config.iyuu}.send?text=${title}&desp=${e.message}`)
|
await fetch(
|
||||||
|
`https://iyuu.cn/${config.iyuu}.send?text=${title}&desp=${e.message}`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if (config.sct) {
|
if (config.sct) {
|
||||||
await fetch(`https://sctapi.ftqq.com/${config.sct}.send?title=${title}&content=${e.message}`)
|
await fetch(
|
||||||
|
`https://sctapi.ftqq.com/${config.sct}.send?title=${title}&content=${e.message}`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if (config.feishu_webhook) {
|
if (config.feishu_webhook) {
|
||||||
let offline_content = {
|
let offline_content = {
|
||||||
|
@ -41,15 +43,17 @@ export default class offlineEvent extends EventListener {
|
||||||
'zh-cn': {
|
'zh-cn': {
|
||||||
title: title,
|
title: title,
|
||||||
content: [
|
content: [
|
||||||
[{
|
[
|
||||||
tag: "text",
|
{
|
||||||
text: e.message
|
tag: 'text',
|
||||||
}]
|
text: e.message
|
||||||
|
}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
await fetch(config.feishu_webhook, {
|
await fetch(config.feishu_webhook, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
|
@ -1,35 +1,35 @@
|
||||||
import EventListener from '../listener/listener.js'
|
import EventListener from './listener.js'
|
||||||
import cfg from '../../config/config.js'
|
import cfg from '../config/config.js'
|
||||||
import { relpyPrivate } from '../../core/common.js'
|
import { relpyPrivate } from '../core/common.js'
|
||||||
import { BOT_NAME } from '../../config/system.js'
|
import { BOT_NAME } from '../config/system.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听上线事件
|
* 监听上线事件
|
||||||
*/
|
*/
|
||||||
export default class onlineEvent extends EventListener {
|
export default class onlineEvent extends EventListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
super({
|
super({
|
||||||
event: 'system.online',
|
event: 'system.online',
|
||||||
once: true,
|
once: true,
|
||||||
prefix: undefined,
|
prefix: undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认方法
|
* 默认方法
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
async execute(e) {
|
async execute(e) {
|
||||||
logger.mark('----^_^----')
|
logger.mark('----^_^----')
|
||||||
logger.mark(logger.green(`${BOT_NAME} 上线成功 版本v${cfg.package.version}`))
|
logger.mark(
|
||||||
|
logger.green(`${BOT_NAME} 上线成功 版本v${cfg.package.version}`)
|
||||||
|
)
|
||||||
logger.mark(logger.green('https://github.com/yoimiya-kokomi/Miao-Yunzai'))
|
logger.mark(logger.green('https://github.com/yoimiya-kokomi/Miao-Yunzai'))
|
||||||
// logger.mark('-----------')
|
// logger.mark('-----------')
|
||||||
/** 加载插件 */
|
/** 加载插件 */
|
||||||
|
@ -40,8 +40,8 @@ export default class onlineEvent extends EventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async loginMsg() {
|
async loginMsg() {
|
||||||
if (!cfg.bot.online_msg) return
|
if (!cfg.bot.online_msg) return
|
||||||
|
@ -56,4 +56,4 @@ export default class onlineEvent extends EventListener {
|
||||||
|
|
||||||
setTimeout(() => relpyPrivate(cfg.masterQQ[0], msg), 1000)
|
setTimeout(() => relpyPrivate(cfg.masterQQ[0], msg), 1000)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -110,5 +110,4 @@ const Handler = {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export default Handler
|
export default Handler
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { segment } from 'icqq'
|
||||||
import chokidar from 'chokidar'
|
import chokidar from 'chokidar'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import Runtime from '../../core/runtime.js'
|
import Runtime from './runtime.js'
|
||||||
import Handler from './handler.js'
|
import Handler from './handler.js'
|
||||||
|
|
||||||
|
|
||||||
|
@ -462,7 +462,7 @@ class PluginsLoader {
|
||||||
e.isGuild = true
|
e.isGuild = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.user_id && cfg.masterQQ.includes(Number(e.user_id) || String(e.user_id))) {
|
if (e.user_id && cfg.masterQQ.includes(String(e.user_id) || String(e.user_id))) {
|
||||||
e.isMaster = true
|
e.isMaster = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +497,7 @@ class PluginsLoader {
|
||||||
* @param data.recallMsg 群聊是否撤回消息,0-120秒,0不撤回
|
* @param data.recallMsg 群聊是否撤回消息,0-120秒,0不撤回
|
||||||
* @param data.at 是否at用户
|
* @param data.at 是否at用户
|
||||||
*/
|
*/
|
||||||
e.reply = async (msg = '', quote = false, data:any = {}) => {
|
e.reply = async (msg:any = '', quote = false, data:any = {}) => {
|
||||||
if (!msg) return false
|
if (!msg) return false
|
||||||
|
|
||||||
/** 禁言中 */
|
/** 禁言中 */
|
|
@ -1,6 +1,6 @@
|
||||||
import * as common from '../utils/common.js'
|
import * as common from '../../utils/common.js'
|
||||||
import cfg from '../config/config.js'
|
import cfg from '../../config/config.js'
|
||||||
import Handler from '../lib/plugins/handler.js'
|
import Handler from './handler.js'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
gsCfg,
|
gsCfg,
|
||||||
|
@ -8,7 +8,7 @@ import {
|
||||||
mysInfo as MysInfo,
|
mysInfo as MysInfo,
|
||||||
NoteUser,
|
NoteUser,
|
||||||
MysUser
|
MysUser
|
||||||
} from '../mys/index.js'
|
} from '../../mys/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ********************
|
* ********************
|
|
@ -0,0 +1,24 @@
|
||||||
|
import EventListener from './listener.js'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听群聊消息
|
||||||
|
*/
|
||||||
|
export default class requestEvent extends EventListener {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
super({ event: 'request', prefix: undefined, once: undefined })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
async execute(e) {
|
||||||
|
this.plugins.deal(e)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,28 +0,0 @@
|
||||||
import EventListener from '../listener/listener.js'
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 监听群聊消息
|
|
||||||
*/
|
|
||||||
export default class messageEvent extends EventListener {
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
constructor () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
super({ event: 'message' , prefix: undefined, once: undefined})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
async execute (e) {
|
|
||||||
this.plugins.deal(e)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
import EventListener from '../listener/listener.js'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 监听群聊消息
|
|
||||||
*/
|
|
||||||
export default class requestEvent extends EventListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
constructor () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
super({ event: 'request' , prefix: undefined, once: undefined})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
async execute (e) {
|
|
||||||
this.plugins.deal(e)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -257,8 +257,24 @@ export default class MysUser extends BaseModel {
|
||||||
* @returns {Promise<boolean|{msg: string, uids: *[], status: number}>}
|
* @returns {Promise<boolean|{msg: string, uids: *[], status: number}>}
|
||||||
*/
|
*/
|
||||||
static async checkCkStatus(ck) {
|
static async checkCkStatus(ck) {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (!ck) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
let uids = []
|
let uids = []
|
||||||
let err = (msg, status = 2) => {
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
* @param status
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const err = (msg, status = 2) => {
|
||||||
msg = msg + '\n请退出米游社并重新登录后,再次获取CK'
|
msg = msg + '\n请退出米游社并重新登录后,再次获取CK'
|
||||||
return {
|
return {
|
||||||
status,
|
status,
|
||||||
|
@ -266,18 +282,23 @@ export default class MysUser extends BaseModel {
|
||||||
uids
|
uids
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ck) {
|
|
||||||
return false
|
/**
|
||||||
}
|
* *********
|
||||||
|
* tudo
|
||||||
|
* **********
|
||||||
|
*/
|
||||||
|
|
||||||
// 检查绑定UID
|
// 检查绑定UID
|
||||||
uids = await MysUser.getCkUid(ck, true, true)
|
// uids = await MysUser.getCkUid(ck, true, true)
|
||||||
if (!uids.uids || uids.uids.length === 0) {
|
// if (!uids.uids || uids.uids.length === 0) {
|
||||||
return err(uids.msg || 'CK失效')
|
// return err(uids.msg || 'CK失效')
|
||||||
}
|
// }
|
||||||
uids = uids.uids
|
// uids = uids.uids
|
||||||
let uid = uids[0]
|
|
||||||
let mys = new MysApi(uid + '', ck, { log: false })
|
let uid = uids[0] ?? '0'
|
||||||
|
|
||||||
|
let mys = new MysApi(String(uid), ck, { log: false })
|
||||||
// 体力查询
|
// 体力查询
|
||||||
let noteRet = await mys.getData('dailyNote')
|
let noteRet = await mys.getData('dailyNote')
|
||||||
if (noteRet.retcode !== 0 || lodash.isEmpty(noteRet.data)) {
|
if (noteRet.retcode !== 0 || lodash.isEmpty(noteRet.data)) {
|
||||||
|
@ -504,14 +525,21 @@ export default class MysUser extends BaseModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
async initDB(db = false) {
|
async initDB(db) {
|
||||||
|
// 检查当前实例是否已有数据库连接
|
||||||
if (this.db && !db) {
|
if (this.db && !db) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// tudo
|
|
||||||
// ???
|
// 如果传入了 db 参数且 db 参数不为 true,则使用传入的 db;否则,调用 MysUserDB.find 获取 db
|
||||||
db = db && db !== true ? db : await MysUserDB.find(this.ltuid, true)
|
if (!db || db === true) {
|
||||||
|
db = await MysUserDB.find(this.ltuid, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置实例的 db 属性
|
||||||
this.db = db
|
this.db = db
|
||||||
|
|
||||||
|
// 调用 setCkData 方法,并传入 db
|
||||||
this.setCkData(db)
|
this.setCkData(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,9 +612,7 @@ export default class MysUser extends BaseModel {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
async initCache() {
|
async initCache() {
|
||||||
if (!this.ltuid || !this.ck) {
|
if (!this.ltuid || !this.ck) return
|
||||||
return
|
|
||||||
}
|
|
||||||
let self = this
|
let self = this
|
||||||
await MysUtil.eachGame(async game => {
|
await MysUtil.eachGame(async game => {
|
||||||
let uids = self.uids[game]
|
let uids = self.uids[game]
|
||||||
|
|
|
@ -121,7 +121,11 @@ export default class MysApi {
|
||||||
}
|
}
|
||||||
if (type === 'getFp' && !data?.Getfp) return this._device_fp
|
if (type === 'getFp' && !data?.Getfp) return this._device_fp
|
||||||
|
|
||||||
let { url, headers, body } = this.getUrl(type, data)
|
const UrlData = this.getUrl(type, data)
|
||||||
|
|
||||||
|
if (!UrlData) return false
|
||||||
|
|
||||||
|
let { url, headers, body } = UrlData
|
||||||
|
|
||||||
if (!url) return false
|
if (!url) return false
|
||||||
|
|
||||||
|
@ -156,40 +160,37 @@ export default class MysApi {
|
||||||
} else {
|
} else {
|
||||||
param.method = 'get'
|
param.method = 'get'
|
||||||
}
|
}
|
||||||
let response = {
|
|
||||||
ok: null,
|
|
||||||
status: null,
|
|
||||||
statusText: null
|
|
||||||
}
|
|
||||||
let start = Date.now()
|
let start = Date.now()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
response = await fetch(url, param)
|
const response = await fetch(url, param)
|
||||||
|
if (!response.ok) {
|
||||||
|
logger.error(
|
||||||
|
`[米游社接口][${type}][${this.uid}] ${response.status} ${response.statusText}`
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (this.option.log) {
|
||||||
|
logger.mark(
|
||||||
|
`[米游社接口][${type}][${this.uid}] ${Date.now() - start}ms`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
//
|
||||||
|
const data: {
|
||||||
|
api?: any
|
||||||
|
} = await response.json()
|
||||||
|
if (!data) {
|
||||||
|
logger.mark('mys接口没有返回')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
data.api = type
|
||||||
|
if (cached) this.cache(data, cacheKey)
|
||||||
|
return data
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(error.toString())
|
logger.error(error.toString())
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
logger.error(
|
|
||||||
`[米游社接口][${type}][${this.uid}] ${response.status} ${response.statusText}`
|
|
||||||
)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (this.option.log) {
|
|
||||||
logger.mark(`[米游社接口][${type}][${this.uid}] ${Date.now() - start}ms`)
|
|
||||||
}
|
|
||||||
const res = await response.json()
|
|
||||||
|
|
||||||
if (!res) {
|
|
||||||
logger.mark('mys接口没有返回')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
res.api = type
|
|
||||||
|
|
||||||
if (cached) this.cache(res, cacheKey)
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -227,7 +228,8 @@ export default class MysApi {
|
||||||
'x-rpc-client_type': client.client_type,
|
'x-rpc-client_type': client.client_type,
|
||||||
'User-Agent': client.User_Agent,
|
'User-Agent': client.User_Agent,
|
||||||
'Referer': client.Referer,
|
'Referer': client.Referer,
|
||||||
'DS': this.getDs(query, body)
|
'DS': this.getDs(query, body),
|
||||||
|
'Cookie': null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ export default class MysInfo {
|
||||||
*/
|
*/
|
||||||
this.mysButton = segment.button([
|
this.mysButton = segment.button([
|
||||||
{ text: '米游社', link: 'https://miyoushe.com' }
|
{ text: '米游社', link: 'https://miyoushe.com' }
|
||||||
])
|
] as any)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +153,7 @@ export default class MysInfo {
|
||||||
e.reply(
|
e.reply(
|
||||||
[
|
[
|
||||||
'尚未绑定uid',
|
'尚未绑定uid',
|
||||||
segment.button([{ text: '绑定UID', input: '#绑定uid' }])
|
segment.button([{ text: '绑定UID', input: '#绑定uid' }] as any)
|
||||||
],
|
],
|
||||||
false,
|
false,
|
||||||
{ at }
|
{ at }
|
||||||
|
@ -180,7 +180,7 @@ export default class MysInfo {
|
||||||
e.reply(
|
e.reply(
|
||||||
[
|
[
|
||||||
'请先#绑定uid',
|
'请先#绑定uid',
|
||||||
segment.button([{ text: '绑定UID', input: '#绑定uid' }])
|
segment.button([{ text: '绑定UID', input: '#绑定uid' }] as any)
|
||||||
],
|
],
|
||||||
false,
|
false,
|
||||||
{ at: at || true }
|
{ at: at || true }
|
||||||
|
@ -207,7 +207,9 @@ export default class MysInfo {
|
||||||
e.reply(
|
e.reply(
|
||||||
[
|
[
|
||||||
'尚未绑定Cookie',
|
'尚未绑定Cookie',
|
||||||
segment.button([{ text: 'Cookie帮助', callback: '#Cookie帮助' }])
|
segment.button([
|
||||||
|
{ text: 'Cookie帮助', callback: '#Cookie帮助' }
|
||||||
|
] as any)
|
||||||
],
|
],
|
||||||
false,
|
false,
|
||||||
{ at: selfUser.qq }
|
{ at: selfUser.qq }
|
||||||
|
@ -303,7 +305,8 @@ export default class MysInfo {
|
||||||
for (let ck of pubCks) {
|
for (let ck of pubCks) {
|
||||||
let pubUser = await MysUser.create(ck)
|
let pubUser = await MysUser.create(ck)
|
||||||
if (pubUser) {
|
if (pubUser) {
|
||||||
let ret = await pubUser.initCache({ qq: 'pub' })
|
// await pubUser.initCache({ qq: 'pub' })
|
||||||
|
let ret = await pubUser.initCache()
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pubCount++
|
pubCount++
|
||||||
}
|
}
|
||||||
|
@ -419,7 +422,7 @@ export default class MysInfo {
|
||||||
this.e.reply(
|
this.e.reply(
|
||||||
[
|
[
|
||||||
'请先#绑定uid',
|
'请先#绑定uid',
|
||||||
segment.button([{ text: '绑定UID', input: '#绑定uid' }])
|
segment.button([{ text: '绑定UID', input: '#绑定uid' }] as any)
|
||||||
],
|
],
|
||||||
false,
|
false,
|
||||||
{ at: true }
|
{ at: true }
|
||||||
|
@ -429,7 +432,7 @@ export default class MysInfo {
|
||||||
if (!this.ckInfo.ck) {
|
if (!this.ckInfo.ck) {
|
||||||
this.e.reply([
|
this.e.reply([
|
||||||
'暂无可用CK,请绑定更多用户或设置公共ck..',
|
'暂无可用CK,请绑定更多用户或设置公共ck..',
|
||||||
segment.button([{ text: 'Cookie帮助', callback: '#Cookie帮助' }])
|
segment.button([{ text: 'Cookie帮助', callback: '#Cookie帮助' }] as any)
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue