mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-14 16:19:18 +00:00
317 lines
11 KiB
JavaScript
317 lines
11 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;
|
||
}
|
||
}
|