mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-14 08:09:19 +00:00
298 lines
10 KiB
JavaScript
298 lines
10 KiB
JavaScript
// 主库
|
||
import { segment } from 'oicq'
|
||
import common from '../../../lib/common/common.js'
|
||
import fetch from 'node-fetch'
|
||
// 配置文件
|
||
import config from '../model/index.js'
|
||
// 其他库
|
||
import _ from 'lodash'
|
||
// import mongodb from 'mongodb'
|
||
|
||
// Mongodb初始化
|
||
// function initMongo () {
|
||
// const MongoClient = mongodb.MongoClient
|
||
// const url = 'mongodb://localhost:27017/'
|
||
// return new Promise((resolve, reject) => {
|
||
// MongoClient.connect(url, (err, db) => {
|
||
// const dbo = db.db('test')
|
||
// if (err) {
|
||
// throw err // 和调用 reject(err) 效果类似
|
||
// }
|
||
// let collection = dbo.collection('temp')
|
||
// resolve(collection)
|
||
// })
|
||
// })
|
||
// }
|
||
//
|
||
// const mongo = initMongo()
|
||
// 60s后撤回
|
||
const recallTime = 109
|
||
|
||
export class mystery extends plugin {
|
||
constructor () {
|
||
super({
|
||
name: '神秘区域',
|
||
dsc: '神秘指令',
|
||
event: 'message.group',
|
||
priority: 500,
|
||
rule: [
|
||
{
|
||
reg: '^#(雀食|确实)$', fnc: 'mystery'
|
||
},
|
||
{
|
||
reg: '^#*来份涩图 (.*)$', fnc: 'setu'
|
||
},
|
||
{
|
||
reg: '^#(累了)$', fnc: 'cospro'
|
||
},
|
||
{
|
||
reg: '^#(啊?|啊?)$', fnc: 'aaa'
|
||
}
|
||
// {
|
||
// reg: '^#我靠', fnc: 'tuiimg'
|
||
// }
|
||
]
|
||
})
|
||
this.mysteryConfig = config.getConfig('mystery')
|
||
}
|
||
|
||
/** 接受到消息都会先执行一次 */
|
||
async accept() {
|
||
if (this.e.isGroup) {
|
||
let group = this.e.group;
|
||
if (!group.is_owner && (group.is_admin && group.mute_left > 0)) return;
|
||
if (!(group.is_owner || group.is_admin) && (group.all_muted || group.mute_left > 0)) return;
|
||
}
|
||
|
||
let old_reply = this.e.reply;
|
||
|
||
this.e.reply = async function (msgs, quote, data) {
|
||
if (!msgs) return false;
|
||
if (!Array.isArray(msgs)) msgs = [msgs];
|
||
let result = await old_reply(msgs, quote, data);
|
||
|
||
if (!result || !result.message_id) {
|
||
let isxml = false;
|
||
|
||
for (let msg of msgs) {
|
||
if (msg && msg?.type == 'xml' && msg?.data) {
|
||
msg.data = msg.data.replace(/^<\?xml.*version=.*?>/g, '<?xml version="1.0" encoding="utf-8" ?>');
|
||
isxml = true;
|
||
}
|
||
}
|
||
|
||
if (isxml) {
|
||
result = await old_reply(msgs, quote, data);
|
||
} else {
|
||
let MsgList = [{
|
||
message: msgs,
|
||
nickname: Bot.nickname,
|
||
user_id: Bot.uin
|
||
}];
|
||
|
||
let forwardMsg = await Bot.makeForwardMsg(MsgList);
|
||
|
||
forwardMsg.data = forwardMsg.data
|
||
.replace('<?xml version="1.0" encoding="utf-8"?>', '<?xml version="1.0" encoding="utf-8" ?>')
|
||
.replace(/\n/g, '')
|
||
.replace(/<title color="#777777" size="26">(.+?)<\/title>/g, '___')
|
||
.replace(/___+/, '<title color="#777777" size="26">请点击查看内容</title>');
|
||
msgs = forwardMsg;
|
||
result = await old_reply(msgs, quote, data);
|
||
}
|
||
|
||
if (!result || !result.message_id) {
|
||
logger.error('风控消息处理失败,请登录手机QQ查看是否可手动解除风控!');
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
|
||
async mystery (e) {
|
||
// 最大页数
|
||
const maxPage = this.mysteryConfig.mystery.maxPage
|
||
const maxPigObj = this.mysteryConfig.mystery.maxPigObj
|
||
// 限制最大图片数量
|
||
const imageCountLimit = this.mysteryConfig.mystery.imageCountLimit
|
||
// 随机算法
|
||
const page = _.random(1, maxPage)
|
||
const randomIndex = _.random(0, maxPigObj - 1)
|
||
// 回复
|
||
this.reply('确实是吧, 正在探索...')
|
||
// 请求
|
||
let url = `https://www.cos6.net/wp-json/wp/v2/posts?page=${ page }`
|
||
let images = []
|
||
await fetch(url)
|
||
.then((resp) => {
|
||
return resp.json()
|
||
})
|
||
.then((json) => {
|
||
const template = {
|
||
nickname: this.e.sender.card || this.e.user_id,
|
||
user_id: this.e.user_id
|
||
}
|
||
|
||
const content = json[randomIndex].content
|
||
images = this.getCos6Img(content.rendered)
|
||
// 洗牌
|
||
images = _.shuffle(images)
|
||
// 限制长度
|
||
if (images.length > imageCountLimit) {
|
||
images = images.slice(1, imageCountLimit + 1)
|
||
}
|
||
// 循环队列
|
||
for (let i = 0; i < images.length; i++) {
|
||
images[i] = {
|
||
message: segment.image(images[i]),
|
||
...template
|
||
}
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
this.e.reply('探索失败,你再我去一次吧')
|
||
logger.error(err)
|
||
return false
|
||
})
|
||
return !!(await this.reply(await Bot.makeForwardMsg(images)))
|
||
}
|
||
|
||
async cospro (e) {
|
||
let req = [ ...await fetch('https://imgapi.cn/cos2.php?return=jsonpro').then((resp) => resp.json()).then((json) => json.imgurls), ...await fetch('https://imgapi.cn/cos.php?return=jsonpro').then((resp) => resp.json()).then((json) => json.imgurls) ]
|
||
e.reply('哪天克火掉一定是在这个群里面...')
|
||
let images = []
|
||
req.forEach(item => {
|
||
images.push({
|
||
message: segment.image(encodeURI(item)),
|
||
nickname: this.e.sender.card || this.e.user_id,
|
||
user_id: this.e.user_id
|
||
})
|
||
})
|
||
return !!(await this.reply(await Bot.makeForwardMsg(images)))
|
||
}
|
||
|
||
async aaa (e) {
|
||
// https://yingtall.com/wp-json/wp/v2/posts?page=64
|
||
// 最大页数
|
||
const maxPage = this.mysteryConfig.aaa.maxPage
|
||
const maxPigObj = this.mysteryConfig.aaa.maxPigObj
|
||
// 限制最大图片数量
|
||
const imageCountLimit = this.mysteryConfig.aaa.imageCountLimit
|
||
// 随机算法
|
||
const page = _.random(1, maxPage)
|
||
const randomIndex = _.random(0, maxPigObj - 1)
|
||
// 回复
|
||
this.reply('真变态啊...')
|
||
// 请求
|
||
let images = []
|
||
let imgData = []
|
||
let url = `https://yingtall.com/wp-json/wp/v2/posts?page=${ page }`
|
||
await fetch(url)
|
||
.then((resp) => {
|
||
return resp.json()
|
||
})
|
||
.then((json) => {
|
||
if (!json.length) {
|
||
e.reply('探索失败,你再我去一次吧')
|
||
return false
|
||
}
|
||
const content = json[randomIndex].content
|
||
images = this.getImages2(content.rendered)
|
||
// 如果图片为空直接返回
|
||
if (images.length === 0) {
|
||
e.reply('探索失败,你再我去一次吧')
|
||
return false
|
||
}
|
||
// 洗牌
|
||
images = _.shuffle(images)
|
||
// 限制长度
|
||
if (images.length > imageCountLimit) {
|
||
images = images.slice(1, imageCountLimit + 1)
|
||
}
|
||
// 循环队列
|
||
images.forEach((item) => {
|
||
imgData.push({
|
||
message: segment.image(item),
|
||
nickname: e.sender.card || e.user_id,
|
||
user_id: e.user_id
|
||
})
|
||
})
|
||
})
|
||
.catch((err) => logger.error(err))
|
||
return !!(await this.reply(await Bot.makeForwardMsg(imgData)))
|
||
}
|
||
|
||
async setu (e) {
|
||
const keyword = e.msg.split(' ')[1]
|
||
const numb = this.mysteryConfig.setu.count
|
||
await e.reply('正在给你找图片啦~', true, { recallMsg: 7 });
|
||
|
||
let url = `https://api.lolicon.app/setu/v2?r18=${ keyword }&num=${ numb }`;//←此处修改图片类型,0为非18,1为18,2为18非18混合
|
||
const response = await fetch(url);
|
||
const imgJson = await response.json();
|
||
|
||
const images = []
|
||
for (let image of imgJson.data) {
|
||
images.push({
|
||
message: segment.image(image.urls.original),
|
||
nickname: e.sender.card || e.user_id,
|
||
user_id: e.user_id
|
||
})
|
||
}
|
||
|
||
const res = await this.reply(
|
||
await Bot.makeForwardMsg(images),
|
||
false,
|
||
{ recallMsg: 60 })
|
||
|
||
if (!res) {
|
||
return e.reply('好、好涩(//// ^ ////)……不、不行啦……被、被吞啦o(≧口≦)o',true,{recallMsg:60});
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
// async tuiimg (e) {
|
||
// const MAX_SIZE = this.mysteryConfig.tuiimg.count
|
||
// this.reply('这群早晚被你整没了...')
|
||
// let images = []
|
||
// const template = {
|
||
// nickname: this.e.sender.card || this.e.user_id, user_id: this.e.user_id
|
||
// }
|
||
// await mongo.then(conn => {
|
||
// return conn.aggregate([ { $sample: { size: MAX_SIZE } } ]).toArray()
|
||
// }).then((result) => {
|
||
// result.forEach((item) => {
|
||
// images.push({
|
||
// message: segment.image(item.url), ...template
|
||
// })
|
||
// })
|
||
// })
|
||
// return !!(await this.reply(await Bot.makeForwardMsg(images), false, {
|
||
// recallMsg: recallTime
|
||
// }))
|
||
// }
|
||
|
||
// 正则:获取图片
|
||
getCos6Img (string) {
|
||
const imgRex = /\/([\w].*?).(jpg|JPG|png|PNG|gif|GIF|jpeg|JPEG|svg)/g
|
||
const images = []
|
||
let img
|
||
while ((img = imgRex.exec(string))) {
|
||
images.push(`https://www.cos6.net/${ img[1] }.jpg`)
|
||
}
|
||
return images
|
||
}
|
||
|
||
// 正则:获取图片
|
||
getImages2 (string) {
|
||
const imgRex = /<img.*?src="(.*?)"[^>]+>/g
|
||
const images = []
|
||
let img
|
||
while ((img = imgRex.exec(string))) {
|
||
images.push(img[1])
|
||
}
|
||
return images
|
||
}
|
||
}
|