添加pid搜图和pixiv榜单
This commit is contained in:
108
apps/pixiv.js
Normal file
108
apps/pixiv.js
Normal file
@@ -0,0 +1,108 @@
|
||||
import plugin from '../../../lib/plugins/plugin.js'
|
||||
import { segment } from "oicq";
|
||||
import Pixiv from '../model/Pixiv.js'
|
||||
import Config from '../model/Config.js';
|
||||
import moment from 'moment';
|
||||
import fs from 'fs'
|
||||
|
||||
let type = {
|
||||
"日": "day",
|
||||
"周": "week",
|
||||
"月": "month",
|
||||
"男性向": 'male',
|
||||
"女性向": 'female',
|
||||
}
|
||||
|
||||
let listreg = new RegExp(`^#?看看(${Object.keys(type).join("|")})榜\\s?(第(\\d+)页)?$`)
|
||||
|
||||
export class example extends plugin {
|
||||
constructor() {
|
||||
super({
|
||||
name: '涩涩',
|
||||
dsc: '涩涩',
|
||||
event: 'message',
|
||||
priority: 5000,
|
||||
rule: [
|
||||
{
|
||||
reg: '^(p|P)(i|I)(d|D)搜图(\\d+)$',
|
||||
fnc: 'saucenaoPid'
|
||||
},
|
||||
{
|
||||
reg: listreg,
|
||||
fnc: 'pixivList'
|
||||
}
|
||||
]
|
||||
})
|
||||
this.path = "./plugins/yenai-plugin/config/setu/setu.json"
|
||||
}
|
||||
|
||||
//pid搜图
|
||||
async saucenaoPid(e) {
|
||||
let pids = e.msg.replace(/#|(p|P)(i|I)(d|D)搜图/g, "").trim()
|
||||
let res = await Pixiv.Worker(pids)
|
||||
|
||||
if (!res) return e.reply("可能接口失效或无该Pid信息")
|
||||
|
||||
let { title, pid, uresname, uresid, tags, url } = res
|
||||
let msg = [
|
||||
`标题:${title}\n`,
|
||||
`插画ID:${pid}\n`,
|
||||
`画师:${uresname}\n`,
|
||||
`画师ID:${uresid}\n`,
|
||||
`tag:${tags.join(",")}\n`,
|
||||
`直链:https://pixiv.re/${pid}.jpg`,
|
||||
]
|
||||
await e.reply(msg)
|
||||
|
||||
let img = [];
|
||||
for (let i of url) {
|
||||
img.push(segment.image(i))
|
||||
}
|
||||
|
||||
if (!await this.getsendMsg(e, img)) e.reply("消息发送失败,可能被风控")
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//p站排行榜
|
||||
async pixivList(e) {
|
||||
|
||||
let regRet = listreg.exec(e.msg)
|
||||
|
||||
let mode = `${type[regRet[1]]}`;
|
||||
|
||||
let date = moment().subtract(2, "days").format("YYYY-MM-DD")
|
||||
|
||||
let page = regRet[3] ? regRet[3] : "1"
|
||||
|
||||
let res = await Pixiv.Rank(page, date, mode)
|
||||
|
||||
if (!res) return e.reply("可能接口失效或无榜单信息")
|
||||
|
||||
if (!await this.getsendMsg(e, res)) e.reply("消息发送失败,可能被风控")
|
||||
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* @description:
|
||||
* @param {*} e oicq
|
||||
* @param {Array} msg 发送的消息
|
||||
* @return {Boolean}
|
||||
*/
|
||||
async getsendMsg(e, msg) {
|
||||
//获取CD
|
||||
let cfgs = {}
|
||||
let time = 120
|
||||
if (fs.existsSync(this.path)) {
|
||||
cfgs = await Config.getread(this.path)
|
||||
}
|
||||
|
||||
if (cfgs[e.group_id]) {
|
||||
time = cfgs[e.group_id].recall
|
||||
}
|
||||
let res = await Config.getforwardMsg(msg, e, time)
|
||||
if (!res) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,9 +88,10 @@ class Config {
|
||||
* @description:
|
||||
* @param {Array} message 发送的消息
|
||||
* @param {*} e oicq
|
||||
* @return {*}
|
||||
* @param {Number} time 撤回时间
|
||||
* @return {Boolean}
|
||||
*/
|
||||
async getforwardMsg(message, e) {
|
||||
async getforwardMsg(message, e, time = 0) {
|
||||
//制作转发消息
|
||||
let forwardMsg = []
|
||||
for (let i of message) {
|
||||
@@ -110,8 +111,15 @@ class Config {
|
||||
}
|
||||
|
||||
//发送消息
|
||||
e.reply(forwardMsg)
|
||||
|
||||
let res = await e.reply(forwardMsg)
|
||||
if (!res) return false
|
||||
if (time > 0 && res && res.message_id) {
|
||||
setTimeout(() => {
|
||||
e.group.recallMsg(res.message_id);
|
||||
logger.mark("[椰奶]执行撤回")
|
||||
}, time * 1000);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
82
model/Pixiv.js
Normal file
82
model/Pixiv.js
Normal file
@@ -0,0 +1,82 @@
|
||||
import fetch from "node-fetch";
|
||||
import lodash from "lodash";
|
||||
import { segment } from "oicq";
|
||||
|
||||
class Pixiv {
|
||||
/**
|
||||
* @description: 获取插画信息
|
||||
* @param {String} ids 插画ID
|
||||
* @return {Object}
|
||||
*/
|
||||
async Worker(ids) {
|
||||
let api = `https://api.imki.moe/api/pixiv/illust?id=${ids}`
|
||||
let res = await fetch(api).then(res => res.json()).catch(err => console.log(err))
|
||||
|
||||
if (!res) return false;
|
||||
if (res.error) return false;
|
||||
res = res.illust
|
||||
let tags = lodash.flattenDeep(res.tags.map(item => Object.values(item)))
|
||||
let caption = res.caption.replace(/<.*>/g, "").trim()
|
||||
let { id: pid, title, meta_single_page, meta_pages, user, } = res
|
||||
let url = []
|
||||
if (!lodash.isEmpty(meta_single_page)) {
|
||||
url.push(meta_single_page.original_image_url.replace("i.pximg.net", "proxy.pixivel.moe"))
|
||||
} else {
|
||||
url = meta_pages.map(item => item.image_urls.original.replace("i.pximg.net", "proxy.pixivel.moe"));
|
||||
}
|
||||
return {
|
||||
pid,
|
||||
title,
|
||||
url,
|
||||
uresid: user.id,
|
||||
uresname: user.name,
|
||||
tags,
|
||||
caption
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @description: 获取Pixiv榜单
|
||||
* @param {String} page 页数
|
||||
* @param {String} date 时间
|
||||
* @param {String} mode 榜单类型
|
||||
* @return {Array}
|
||||
*/
|
||||
async Rank(page, date, mode = "day") {
|
||||
let type = {
|
||||
"day": "日榜",
|
||||
"week": "周榜",
|
||||
"month": "月榜",
|
||||
'male': "男性向榜",
|
||||
'female': "女性向榜",
|
||||
}
|
||||
let api = `https://api.bbmang.me/ranks?page=${page}&date=${date}&mode=${mode}&pageSize=30`
|
||||
let res = await fetch(api).then(res => res.json()).catch(err => console.log(err))
|
||||
if (!res) return false;
|
||||
if (!res.data) return false;
|
||||
let list = [
|
||||
`${date}的${type[mode]}`,
|
||||
`当前为第${page}页`
|
||||
];
|
||||
for (let i of res.data) {
|
||||
let title = i.title;
|
||||
let pid = i.id;
|
||||
let uresname = i.artistPreView.name;
|
||||
let uresid = i.artistPreView.id;
|
||||
let tags = i.tags ? lodash.truncate(i.tags.map((item) => item.name).join(",")) : ""
|
||||
let url = i.imageUrls[0].large.replace("i.pximg.net", "proxy.pixivel.moe")
|
||||
list.push([
|
||||
`标题:${title}\n`,
|
||||
`插画ID:${pid}\n`,
|
||||
`画师:${uresname}\n`,
|
||||
`画师ID:${uresid}\n`,
|
||||
`tag:${tags}\n`,
|
||||
segment.image(url)
|
||||
])
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export default new Pixiv();
|
||||
Reference in New Issue
Block a user