From 0384a12e06cfe3793368cec20dce617b348b3b42 Mon Sep 17 00:00:00 2001 From: Dragon-Fish Date: Sat, 21 Sep 2024 16:05:31 +0800 Subject: [PATCH] feat: + jm-comic, rename files --- src/index.ts | 24 ++---- src/plugins/jm-comic.tsx | 85 +++++++++++++++++++ src/plugins/{powerUser.ts => power-user.ts} | 0 src/plugins/{siliName.ts => sili-name.ts} | 0 src/plugins/{toImage.ts => to-image.ts} | 0 ...ifyFandomUser.ts => verify-fandom-user.ts} | 0 src/plugins/{whoAsked.tsx => who-asked.tsx} | 0 7 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 src/plugins/jm-comic.tsx rename src/plugins/{powerUser.ts => power-user.ts} (100%) rename src/plugins/{siliName.ts => sili-name.ts} (100%) rename src/plugins/{toImage.ts => to-image.ts} (100%) rename src/plugins/{verifyFandomUser.ts => verify-fandom-user.ts} (100%) rename src/plugins/{whoAsked.tsx => who-asked.tsx} (100%) diff --git a/src/index.ts b/src/index.ts index 4332d45..5a2bb53 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,6 @@ import { App, Dict, Random, type Session, Time } from 'koishi' import { resolve } from 'node:path' -import { MinecraftBot } from '@/adapters/adapter-minecraft' import FallbackHandler from '@/modules/FallbackHandler' import MessagesLogger from '@/modules/MessagesLogger' import { MinecraftConnect } from '@/modules/MinecraftConnect' @@ -25,6 +24,7 @@ import PluginDatabaseAdmin from '~/dbadmin' import { PluginDebug } from '~/debug' import PluginDice from '~/dice' import PluginHljs from '~/hljs' +import PluginJMComic from '~/jm-comic' import { PluginLookupIP } from '~/lookup-ip' import PluginMediawiki from '~/mediawiki' import PluginMinecraft from '~/minecraft' @@ -32,19 +32,19 @@ import PluginMute from '~/mute' import PluginOpenAi from '~/openai' import PluginPing from '~/ping' import PluginPixiv from '~/pixiv' -import PluginPowerUser from '~/powerUser' +import PluginPowerUser from '~/power-user' import PluginProfile from '~/profile' import PluginQueue from '~/queue' import PluginReboot from '~/reboot' import PluginSensitiveFilter from '~/sensitive-words-filter' -import PluginSiliName from '~/siliName' +import PluginSiliName from '~/sili-name' import PluginSpawn from '~/spawn' import PluginSticker from '~/sticker' -import PluginToImage from '~/toImage' -import PluginVerifyFandomUser from '~/verifyFandomUser' +import PluginToImage from '~/to-image' +import PluginVerifyFandomUser from '~/verify-fandom-user' import PluginVersion from '~/version' import PluginWebShot from '~/webshot' -import PluginWhoAsked from '~/whoAsked' +import PluginWhoAsked from '~/who-asked' import PluginYoudao from '~/youdao' import AdapterDingtalk from '@koishijs/plugin-adapter-dingtalk' @@ -133,17 +133,6 @@ app.plugin(function PluginCollectionAdapters(ctx) { selfId: env.ONEBOT_SELFID?.trim(), endpoint: env.ONEBOT_ENDPOINT, }) - // ctx.plugin(AdapterRed, { - // endpoint: env.CHRONOCAT_RED_ENDPOINT, - // token: env.CHRONOCAT_TOKEN, - // selfId: env.ONEBOT_SELFID?.trim(), - // path: '/assets/red', - // selfUrl: env.KOISHI_SELF_URL, - // }) - // ctx.plugin(AdapterSatori, { - // endpoint: env.CHRONOCAT_SATORI_ENDPOINT, - // token: env.CHRONOCAT_TOKEN, - // }) // Discord // ctx.plugin(AdapterDiscord, { @@ -305,6 +294,7 @@ app.plugin(function PluginCollectionSILICore(ctx) { ctx.plugin(PluginAbout) ctx.plugin(PluginDice) ctx.plugin(PluginHljs) + ctx.plugin(PluginJMComic) if (process.env.TOKEN_IPGEOLOCATION) { ctx.plugin(PluginLookupIP, { ipgeoApiKey: process.env.TOKEN_IPGEOLOCATION, diff --git a/src/plugins/jm-comic.tsx b/src/plugins/jm-comic.tsx new file mode 100644 index 0000000..68f2059 --- /dev/null +++ b/src/plugins/jm-comic.tsx @@ -0,0 +1,85 @@ +import { Context, h } from 'koishi' + +import BasePlugin from '~/_boilerplate' + +import { load } from 'cheerio' + +export default class PluginJMComic extends BasePlugin { + readonly JM_SOURCE = [ + 'https://18comic.vip', + 'https://18comic.org', + 'https://jmcomic1.me', + 'https://18comic-palworld.vip', + 'https://18comic-c.art', + ] + + constructor(readonly ctx: Context) { + super(ctx, {}, '18comic') + + ctx + .command('jm', ' 18comic', { maxUsage: 10 }) + .option('quiet', '-q 静默模式', { hidden: true }) + .action(async ({ options }, album) => { + const albumNum = this.getAlbumNumFromStrig(album || '') + if (!albumNum) { + return options.quiet ? '' : '未找到作品编号' + } + const albumInfo = await this.fetchAlbum(albumNum) + if (!albumInfo.title) { + return options.quiet ? '' : `可能需要登录查看:\n${albumInfo.url}` + } else { + return `${albumInfo.title}\n${albumInfo.url}` + } + }) + + ctx.middleware(async (session, next) => { + const albumNum = this.getAlbumNumFromStrig( + h.select(session.elements, 'text').join('') + ) + if (!albumNum) { + return next() + } + + return session.execute({ + name: 'jm', + args: [albumNum], + options: { quiet: true }, + }) + }) + } + + getAlbumNumFromStrig(str: string) { + const num = str.replace(/\D/g, '') + if (num.length >= 6 && num.length <= 8) { + return num + } else { + return '' + } + } + + async fetchAlbum(album: string) { + const url = `https://18comic.vip/album/${album}` + try { + const html = await fetch(url).then((res) => res.text()) + const $ = load(html) + const title = $('h1#book-name, title') + .text() + .replace('Comics - 禁漫天堂', '') + .trim() + // 404 + if (title === '禁漫天堂') { + throw new Error('404') + } + return { + title, + url, + } + } catch (e) { + this.logger.warn(`fetchAlbum(${album}) failed:`, e) + return { + url, + title: '', + } + } + } +} diff --git a/src/plugins/powerUser.ts b/src/plugins/power-user.ts similarity index 100% rename from src/plugins/powerUser.ts rename to src/plugins/power-user.ts diff --git a/src/plugins/siliName.ts b/src/plugins/sili-name.ts similarity index 100% rename from src/plugins/siliName.ts rename to src/plugins/sili-name.ts diff --git a/src/plugins/toImage.ts b/src/plugins/to-image.ts similarity index 100% rename from src/plugins/toImage.ts rename to src/plugins/to-image.ts diff --git a/src/plugins/verifyFandomUser.ts b/src/plugins/verify-fandom-user.ts similarity index 100% rename from src/plugins/verifyFandomUser.ts rename to src/plugins/verify-fandom-user.ts diff --git a/src/plugins/whoAsked.tsx b/src/plugins/who-asked.tsx similarity index 100% rename from src/plugins/whoAsked.tsx rename to src/plugins/who-asked.tsx