添加bika相关功能
This commit is contained in:
35
apps/bika.js
35
apps/bika.js
@@ -6,10 +6,10 @@ const SWITCH_ERROR = '主人没有开放这个功能哦(*/ω\*)'
|
||||
|
||||
// 汉字数字匹配正则
|
||||
const numReg = '[一壹二两三四五六七八九十百千万亿\\d]+'
|
||||
|
||||
const Prefix = '(bika|哔咔)'
|
||||
// 命令正则
|
||||
const searchReg = new RegExp(`^#?(bika|哔咔)搜索(.*?)(第(${numReg})页)?$`)
|
||||
const comicPageReg = new RegExp(`^#?(bika|哔咔)id(.*?)(第(${numReg})页)?$`)
|
||||
const searchReg = new RegExp(`^#?${Prefix}(类别|作者)?搜索(.*?)(第(${numReg})页)?$`)
|
||||
const comicPageReg = new RegExp(`^#?${Prefix}id(.*?)(第(${numReg})页)?$`)
|
||||
export class newBika extends plugin {
|
||||
constructor () {
|
||||
super({
|
||||
@@ -24,6 +24,14 @@ export class newBika extends plugin {
|
||||
{
|
||||
reg: comicPageReg,
|
||||
fnc: 'comicPage'
|
||||
},
|
||||
{
|
||||
reg: `#?${Prefix}类别列表`,
|
||||
fnc: 'categories'
|
||||
},
|
||||
{
|
||||
reg: `#?${Prefix}(详情|细节)(.*)`,
|
||||
fnc: 'comicDetail'
|
||||
}
|
||||
]
|
||||
|
||||
@@ -35,8 +43,8 @@ export class newBika extends plugin {
|
||||
if (!this.handlePermission()) return e.reply(SWITCH_ERROR)
|
||||
e.reply(Pixiv.startMsg)
|
||||
let regRet = e.msg.match(searchReg)
|
||||
let page = common.translateChinaNum(regRet[4])
|
||||
let msg = await Bika.search(regRet[2], page)
|
||||
let page = common.translateChinaNum(regRet[5])
|
||||
let msg = await Bika.search(regRet[3], page, regRet[2])
|
||||
if (msg.error) return e.reply(msg.error)
|
||||
common.getRecallsendMsg(e, msg)
|
||||
}
|
||||
@@ -52,6 +60,23 @@ export class newBika extends plugin {
|
||||
common.getRecallsendMsg(e, msg)
|
||||
}
|
||||
|
||||
/** 类别列表 */
|
||||
async categories (e) {
|
||||
if (!this.handlePermission()) return e.reply(SWITCH_ERROR)
|
||||
e.reply(Pixiv.startMsg)
|
||||
let msg = await Bika.categories()
|
||||
common.getRecallsendMsg(e, msg)
|
||||
}
|
||||
|
||||
/** 漫画细节 */
|
||||
async comicDetail (e) {
|
||||
if (!this.handlePermission()) return e.reply(SWITCH_ERROR)
|
||||
e.reply(Pixiv.startMsg)
|
||||
let id = e.msg.match(new RegExp(`#?${Prefix}(详情|细节)(.*)`))[3]
|
||||
let msg = await Bika.comicDetail(id)
|
||||
common.getRecallsendMsg(e, msg, { oneMsg: true })
|
||||
}
|
||||
|
||||
/** 权限判定 */
|
||||
handlePermission () {
|
||||
let { sesepro } = Config.getGroup(this.e.group_id)
|
||||
|
||||
@@ -19,21 +19,40 @@ export default new (class {
|
||||
* @description: 搜索关键词
|
||||
* @param {String} keyword 关键词
|
||||
* @param {Number} page 页数
|
||||
* @return {*}
|
||||
* @param {'dd'|'da'|'ld'|'vd'} sort dd : 最新发布 da : 最早发布 ld : 最多喜欢 vd : 最多浏览
|
||||
* @param {'search'|'category'|'类别'} type search为高级搜索acategory为类别搜索
|
||||
* @return {Array}
|
||||
*/
|
||||
async search (keyword, page = 1) {
|
||||
let res = await fetch(`${this.domain}/advanced_search?keyword=${keyword}&page=${page}&sort=ld`, this.hearder)
|
||||
async search (keyword, page = 1, type = 'search', sort = 'ld') {
|
||||
let types = [
|
||||
{
|
||||
alias: ['高级搜索', 'search'],
|
||||
url: `${this.domain}/advanced_search?keyword=${keyword}&page=${page}&sort=${sort}`,
|
||||
default: true
|
||||
},
|
||||
{
|
||||
alias: ['类别', 'category'],
|
||||
url: `${this.domain}/category_list?category=${keyword}&page=${page}&sort=${sort}`
|
||||
},
|
||||
{
|
||||
alias: ['作者', 'author'],
|
||||
url: `${this.domain}/author_list?author=${keyword}&page=${page}&sort=${sort}`
|
||||
}
|
||||
]
|
||||
type = types.find(item => item.alias.includes(type))
|
||||
console.log(type)
|
||||
let res = await fetch(type.url, this.hearder)
|
||||
.then((res) => res.json())
|
||||
.catch((err) => console.log(err))
|
||||
if (!res) return { error: API_ERROR }
|
||||
let { docs, total, page: pg, pages } = res.data.comics
|
||||
if (total == 0) return { error: '未找到作品,换个关键词试试吧' }
|
||||
if (total == 0) return { error: `未找到作品,换个${type.alias[1]}试试吧` }
|
||||
|
||||
return [
|
||||
`共找到${total}个关于${keyword}的作品`,
|
||||
`共找到${total}个关于「${keyword}」${type.alias[1]}的作品`,
|
||||
`当前为第${pg}页,共${pages}页`,
|
||||
...docs.map((item) => {
|
||||
let { title, tags, categories, author, description, likesCount, thumb, _id } = item
|
||||
let { title, tags, categories, author, description = '未知', likesCount, thumb, _id, finished } = item
|
||||
return [
|
||||
`id:${_id}\n`,
|
||||
`标题:${title}\n`,
|
||||
@@ -41,7 +60,8 @@ export default new (class {
|
||||
`描述:${lodash.truncate(description)}\n`,
|
||||
`分类:${categories.join(',')}\n`,
|
||||
`喜欢:${likesCount}\n`,
|
||||
`tag:${lodash.truncate(tags.join(','))}\n`,
|
||||
`完结:${finished}\n`,
|
||||
tags ? `tag:${lodash.truncate(tags.join(','))}\n` : '',
|
||||
segment.image(this.imgproxy + thumb.path)
|
||||
]
|
||||
})
|
||||
@@ -66,7 +86,58 @@ export default new (class {
|
||||
return [
|
||||
`id: ${_id}, ${title}`,
|
||||
`共${total}张,当前为第${pg}页,共${pages}页`,
|
||||
docs.map(item => segment.image(this.imgproxy + item.media.path))
|
||||
...docs.map(item => segment.image(this.imgproxy + item.media.path))
|
||||
]
|
||||
}
|
||||
|
||||
/** 类别列表 */
|
||||
async categories () {
|
||||
let key = 'yenai:bika:categories'
|
||||
let res = JSON.parse(await redis.get(key))
|
||||
if (!res) {
|
||||
res = await fetch(`${this.domain}/categories`, this.hearder)
|
||||
.then((res) => res.json())
|
||||
.catch((err) => console.log(err))
|
||||
if (!res) return { error: API_ERROR }
|
||||
if (res.error) return { error: res.message }
|
||||
res = res.data.categories.filter(item => !item.isWeb)
|
||||
await redis.set(key, JSON.stringify(res), { EX: 43200 })
|
||||
}
|
||||
return res.map(item => {
|
||||
let { title, thumb, description = '未知' } = item
|
||||
let { fileServer, path } = thumb
|
||||
return [
|
||||
`category: ${title}\n`,
|
||||
`描述:${description}\n`,
|
||||
segment.image((/storage(-b|1).picacomic.com/.test(fileServer) ? this.imgproxy : fileServer) + path)
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
async comicDetail (id) {
|
||||
let res = await fetch(`${this.domain}/comic_detail?id=${id}`, this.hearder)
|
||||
.then((res) => res.json())
|
||||
.catch((err) => console.log(err))
|
||||
if (!res) return { error: API_ERROR }
|
||||
if (res.error) return { error: res.message }
|
||||
let {
|
||||
_id, title, description, author, chineseTeam, categories, tags, pagesCount, epsCount, finished, totalLikes, totalViews, totalComments, thumb
|
||||
} = res.data.comic
|
||||
return [
|
||||
`id: ${_id}\n`,
|
||||
`title:${title}\n`,
|
||||
`描述:${lodash.truncate(description)}\n`,
|
||||
`作者:${author}\n`,
|
||||
`汉化:${chineseTeam}\n`,
|
||||
`页数:${pagesCount}\n`,
|
||||
`话数:${epsCount}\n`,
|
||||
`完结:${finished}\n`,
|
||||
`喜欢:${totalLikes}\n`,
|
||||
`浏览量:${totalViews}\n`,
|
||||
`评论量:${totalComments}\n`,
|
||||
`分类:${categories.join(',')}\n`,
|
||||
`tag:${tags.join(',')}`,
|
||||
segment.image(this.imgproxy + thumb.path)
|
||||
]
|
||||
}
|
||||
})()
|
||||
|
||||
@@ -147,7 +147,7 @@ export default new class Pixiv {
|
||||
if (page > pageAll) {
|
||||
return { error: '哪有那么多图片给你辣(•̀へ •́ ╮ )' }
|
||||
}
|
||||
if (!date) date = moment().subtract(moment().hour() >= 12 ? 1 : 2, 'days').format('YYYY-MM-DD')
|
||||
if (!date) date = moment().subtract(moment().utcOffset(9).hour() >= 12 ? 1 : 2, 'days').format('YYYY-MM-DD')
|
||||
|
||||
let parame = `mode=${type}&page=${page}&date=${date}`
|
||||
// 请求api
|
||||
|
||||
@@ -71,19 +71,19 @@ export default new class newCommon {
|
||||
* @param {Boolean} data.isBot 转发信息是否以bot信息发送
|
||||
* @param {String} data.fkmsg 风控消息不传则默认消息
|
||||
* @param {Boolean} data.isxml 是否处理卡片
|
||||
* @param {Boolean} data.oneMsg 是否只有一条消息
|
||||
* @return {Object} 消息是否发送成功的对象
|
||||
*/
|
||||
async getforwardMsg (e, message, { recallMsg = 0, isBot = true, fkmsg = '', isxml = false } = {}) {
|
||||
async getforwardMsg (e, message, { recallMsg = 0, isBot = true, fkmsg = '', isxml = false, oneMsg = false } = {}) {
|
||||
let forwardMsg = []
|
||||
for (let i of message) {
|
||||
forwardMsg.push(
|
||||
{
|
||||
message: i,
|
||||
nickname: isBot ? Bot.nickname : e.sender.card || e.sender.nickname,
|
||||
user_id: isBot ? Bot.uin : e.sender.user_id
|
||||
}
|
||||
)
|
||||
}
|
||||
let add = (msg) => forwardMsg.push(
|
||||
{
|
||||
message: msg,
|
||||
nickname: isBot ? Bot.nickname : e.sender.card || e.sender.nickname,
|
||||
user_id: isBot ? Bot.uin : e.sender.user_id
|
||||
}
|
||||
)
|
||||
oneMsg ? add(message) : message.forEach(item => add(item))
|
||||
// 发送
|
||||
if (e.isGroup) {
|
||||
forwardMsg = await e.group.makeForwardMsg(forwardMsg)
|
||||
@@ -124,15 +124,16 @@ export default new class newCommon {
|
||||
* @param {*} e oicq
|
||||
* @param {Array} msg 发送的消息
|
||||
* @param {String} fkmsg 风控消息
|
||||
* @param {Object} data 其他参数
|
||||
* @return {Object} 消息是否发送成功的对象
|
||||
*/
|
||||
async getRecallsendMsg (e, msg, fkmsg = '') {
|
||||
async getRecallsendMsg (e, msg, data = {}) {
|
||||
let recalltime = setu.getRecallTime(e.group_id)
|
||||
return await this.getforwardMsg(e, msg, {
|
||||
recallMsg: recalltime,
|
||||
isBot: false,
|
||||
fkmsg,
|
||||
isxml: true
|
||||
isxml: true,
|
||||
...data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user