mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-13 23:59:19 +00:00
477 lines
18 KiB
JavaScript
477 lines
18 KiB
JavaScript
import _ from 'lodash';
|
||
import path from 'path';
|
||
import {
|
||
BILI_CDN_SELECT_LIST,
|
||
BILI_DOWNLOAD_METHOD,
|
||
BILI_RESOLUTION_LIST,
|
||
NETEASECLOUD_QUALITY_LIST,
|
||
YOUTUBE_GRAPHICS_LIST,
|
||
} from './constants/constant.js';
|
||
import { RESOLVE_CONTROLLER_NAME_ENUM } from './constants/resolve.js';
|
||
import model from './model/config.js';
|
||
|
||
const pluginName = `rconsole-plugin`;
|
||
|
||
const _path = process.cwd() + `/plugins/${pluginName}`;
|
||
export function supportGuoba() {
|
||
let globalWhitelist = Object.values(RESOLVE_CONTROLLER_NAME_ENUM).map((value) => ({ value }));
|
||
const globalWhitelistComponent = globalWhitelist.length === 0 ? 'GTags' : 'Select';
|
||
return {
|
||
pluginInfo: {
|
||
name: 'R插件',
|
||
title: pluginName,
|
||
author: '@zhiyu',
|
||
authorLink: 'https://gitee.com/kyrzy0416',
|
||
link: 'https://gitee.com/kyrzy0416/rconsole-plugin',
|
||
isV3: true,
|
||
isV2: false,
|
||
description: '专门为朋友们写的Yunzai-Bot插件,专注图片分享和生活的插件!',
|
||
// 是否显示在左侧菜单,可选值:auto、true、false
|
||
// 当为 auto 时,如果配置项大于等于 3 个,则显示在左侧菜单
|
||
showInMenu: 'auto',
|
||
// 显示图标,此为个性化配置
|
||
// 图标可在 https://icon-sets.iconify.design 这里进行搜索
|
||
icon: 'mdi:stove',
|
||
// 图标颜色,例:#FF0000 或 rgb(255, 0, 0)
|
||
iconColor: '#d19f56',
|
||
iconPath: path.join(_path, 'resources/img/rank/logo.png'),
|
||
},
|
||
configInfo: {
|
||
schemas: [
|
||
{
|
||
field: 'tools.globalBlackList',
|
||
label: '全局解析黑名单',
|
||
component: globalWhitelistComponent,
|
||
bottomHelpMessage: '添加后将全局禁用',
|
||
componentProps: {
|
||
allowAdd: true,
|
||
allowDel: true,
|
||
mode: 'multiple',
|
||
options: globalWhitelist,
|
||
},
|
||
},
|
||
{
|
||
field: 'globalImageLimit',
|
||
label: '解析图片是否合并转发',
|
||
bottomHelpMessage:
|
||
'超过配置的数字就会折叠。目前实现了此能的主要有米游社、b站动态专栏、微博、小红书',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入合并转发最大阈值',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.proxyAddr',
|
||
label: '魔法地址',
|
||
bottomHelpMessage: 'tiktok/小蓝鸟等要使用魔法时需要填写',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入魔法地址(默认:127.0.0.1)',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.proxyPort',
|
||
label: '魔法端口',
|
||
bottomHelpMessage: 'tiktok/小蓝鸟等要使用魔法时需要填写',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入端口(默认:7890)',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.forceOverseasServer',
|
||
label: '强制使用海外服务器',
|
||
bottomHelpMessage: '设置为开启时,Twitter、TikTok等平台将强制不使用代理',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.identifyPrefix',
|
||
label: '识别前缀',
|
||
bottomHelpMessage: '识别前缀,比如你识别哔哩哔哩,那么就有:✅ 识别:哔哩哔哩',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入识别前缀',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.deeplApiUrls',
|
||
label: 'DeeplX API地址集合',
|
||
bottomHelpMessage:
|
||
'可以参考:https://github.com/OwO-Network/DeepLX,进行搭建,也可以使用内置',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入DeeplX API地址集合',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.streamDuration',
|
||
label: '解析直播时长',
|
||
bottomHelpMessage:
|
||
'解析直播(目前涉及哔哩哔哩、抖音)时长,单位:秒(默认:10秒),建议时间为10~60,不然也没人看',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入最大解析直播时长',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.streamCompatibility',
|
||
label: '直播是否开启兼容模式',
|
||
bottomHelpMessage: '兼容模式,NCQQ不用开,其他ICQQ、LLO需要开启',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.defaultPath',
|
||
label: '视频暂存位置',
|
||
bottomHelpMessage: '视频暂存位置(如果你对你系统我的文件非常了解可以修改,不然不建议)',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入视频暂存位置',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.videoSizeLimit',
|
||
label: '视频大小限制',
|
||
bottomHelpMessage: '视频大小限制(单位MB),超过大小则转换成群文件上传',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入视频大小限制',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliSessData',
|
||
label: '哔哩哔哩SESSDATA',
|
||
bottomHelpMessage:
|
||
'如何获取具体参考我的文档说明:https://gitee.com/kyrzy0416/rconsole-plugin#Q&A',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入哔哩哔哩SESSDATA',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliDuration',
|
||
label: '视频最大时长限制',
|
||
bottomHelpMessage:
|
||
'超过时长无法解析(单位:秒),保护服务器性能,计算公式:8分钟 x 60秒 = 480秒',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入哔哩哔哩的视频最大限制时长(默认8分钟)',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliIntroLenLimit',
|
||
label: '哔哩哔哩的简介长度限制',
|
||
bottomHelpMessage: '防止简介过长刷屏',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder:
|
||
'请输入哔哩哔哩的简介长度限制(默认50个字符),填 0 或者 -1 可以不做任何限制,显示完整简介',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliDisplayCover',
|
||
label: '是否显示封面',
|
||
bottomHelpMessage: '默认显示,哔哩哔哩是否显示封面',
|
||
component: 'Switch',
|
||
required: true,
|
||
},
|
||
{
|
||
field: 'tools.biliDisplayInfo',
|
||
label: '是否显示相关信息',
|
||
bottomHelpMessage:
|
||
'默认显示,哔哩哔哩是否显示相关信息(点赞、硬币、收藏、分享、播放数、弹幕数、评论数)',
|
||
component: 'Switch',
|
||
required: true,
|
||
},
|
||
{
|
||
field: 'tools.biliDisplayIntro',
|
||
label: '是否显示简介',
|
||
bottomHelpMessage: '默认显示,哔哩哔哩是否显示简介',
|
||
component: 'Switch',
|
||
required: true,
|
||
},
|
||
{
|
||
field: 'tools.biliDisplayOnline',
|
||
label: '是否显示在线人数',
|
||
bottomHelpMessage: '默认显示,哔哩哔哩是否显示在线人数',
|
||
component: 'Switch',
|
||
required: true,
|
||
},
|
||
{
|
||
field: 'tools.biliDisplaySummary',
|
||
label: '是否显示总结',
|
||
bottomHelpMessage: '默认不显示,哔哩哔哩是否显示总结',
|
||
component: 'Switch',
|
||
required: true,
|
||
},
|
||
{
|
||
field: 'tools.biliUseBBDown',
|
||
label: 'BBDown接管下载',
|
||
bottomHelpMessage:
|
||
'【默认不开启,涉及范围只有哔哩哔哩,开启后默认最高画质发送】如果不爱折腾就使用默认下载方式,如果喜欢折腾就开启,开启后下载更强劲,并且一劳永逸!',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.biliCDN',
|
||
label: '强制使用CDN',
|
||
bottomHelpMessage:
|
||
'BBDown强制使用CDN:【只影响开启后的BBDown,一定程度可以影响BBDown速度】哔哩哔哩的CDN地址更换,如果不需要默认不使用,如果选择了其他的CDN将会使用',
|
||
component: 'Select',
|
||
componentProps: {
|
||
options: BILI_CDN_SELECT_LIST,
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliDownloadMethod',
|
||
label: 'bili下载方式',
|
||
bottomHelpMessage:
|
||
'哔哩哔哩的下载方式:默认使用原生稳定的下载方式,如果你在乎内存可以使用轻量的wget和axel下载方式,如果在乎性能可以使用Aria2下载',
|
||
component: 'Select',
|
||
componentProps: {
|
||
options: BILI_DOWNLOAD_METHOD,
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.biliResolution',
|
||
label: 'bili最高分辨率',
|
||
bottomHelpMessage:
|
||
'【开不开BBDown都同步】哔哩哔哩的最高分辨率,默认为480p,可以自行根据服务器进行调整',
|
||
component: 'Select',
|
||
componentProps: {
|
||
options: BILI_RESOLUTION_LIST,
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.youtubeDuration',
|
||
label: '油管最大解析时长',
|
||
bottomHelpMessage:
|
||
'超过时长不解析(单位:秒),保护魔法的流量,计算公式:8分钟 x 60秒 = 480秒,默认8分钟,最好不超过30分钟',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入YouTuBe视频最大时长限制',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.youtubeClipTime',
|
||
label: '油管截取时长',
|
||
bottomHelpMessage:
|
||
'超过时长会截取指定时间(单位:秒),保护魔法的流量,计算公式:3分钟 x 60秒 = 180秒,默认不开启,最好不超过5分钟,0表无限or不开启',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入截取时长',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.youtubeGraphicsOptions',
|
||
label: '油管最高分辨率',
|
||
bottomHelpMessage:
|
||
'油管下载的最高分辨率(默认720p,请根据自己魔法流量和服务器承载能力进行调整)',
|
||
component: 'Select',
|
||
componentProps: {
|
||
options: YOUTUBE_GRAPHICS_LIST,
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.youtubeCookiePath',
|
||
label: '油管Cookie文件路径',
|
||
bottomHelpMessage:
|
||
'【!重要:这里填写的是路径,例如/path/to/cookies.txt】如果无法解析油管就填写这个Cookie',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入Youtube Cookie所在的路径,例如:/path/to/cookies.txt',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.isSendVocal',
|
||
label: '网易云开启发送音频',
|
||
bottomHelpMessage: '默认开启,识别音乐之后是否转化群语音发送,关闭将获得一定的性能提升',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.useNeteaseSongRequest',
|
||
label: '开启网易云点歌功能',
|
||
bottomHelpMessage: '默认不开启,建议搭配自建网易云API使用,以获得最佳体验',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.songRequestMaxList',
|
||
label: '点歌列表长度',
|
||
bottomHelpMessage: '网易云点歌选择列表长度默认10',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '填入长度',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.useLocalNeteaseAPI',
|
||
label: '使用自建网易云API',
|
||
bottomHelpMessage:
|
||
'默认不开启,有条件可以查看https://gitlab.com/Binaryify/neteasecloudmusicapi进行搭建',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.neteaseCloudAPIServer',
|
||
label: '自建网易云API地址',
|
||
bottomHelpMessage: '填入自建API地址,例:http://localhost:3000',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '填入自建API地址',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.neteaseCookie',
|
||
label: '网易云Cookie',
|
||
bottomHelpMessage:
|
||
'可以发送 #RNQ / #rnq 快捷获取 或 者在网易云官网自己获取,格式为:MUSIC_U=xxx',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '使用vip账号登陆获取更高音质解析',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.neteaseCloudAudioQuality',
|
||
label: '网易云解析最高音质',
|
||
bottomHelpMessage:
|
||
'网易云解析最高音质(目前仅针对自建最新API服务器生效!!需vip账号ck!!默认极高,杜比全景声由于编码特殊需要设备支持,更高请根据登陆的账号和服务器承载能力进行选择)',
|
||
component: 'Select',
|
||
componentProps: {
|
||
options: NETEASECLOUD_QUALITY_LIST,
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.douyinCookie',
|
||
label: '抖音的Cookie',
|
||
bottomHelpMessage:
|
||
'登陆https://www.douyin.com/ - F12 - 自己替换一下:odin_tt=xxx;passport_fe_beating_status=xxx;sid_guard=xxx;uid_tt=xxx;uid_tt_ss=xxx;sid_tt=xxx;sessionid=xxx;sessionid_ss=xxx;sid_ucp_v1=xxx;ssid_ucp_v1=xxx;passport_assist_user=xxx;ttwid=xxx;',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入抖音的Cookie',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.douyinCompression',
|
||
label: '抖音是否使用压缩格式',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.douyinComments',
|
||
label: '抖音是否开启评论',
|
||
component: 'Switch',
|
||
required: false,
|
||
},
|
||
{
|
||
field: 'tools.xiaohongshuCookie',
|
||
label: '小红书的Cookie',
|
||
bottomHelpMessage: '2024-8-2后反馈必须使用ck,不然无法解析',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入小红书的Cookie',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.queueConcurrency',
|
||
label: '(高级)队列长度',
|
||
bottomHelpMessage:
|
||
'【目前只涉及哔哩哔哩的下载功能】允许队列下载个数:根据服务器性能设置可以并发下载的个数,如果你的服务器比较强劲,就选择4~12,较弱就一个一个下载,选择1',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder:
|
||
'如果你的服务器比较强劲,就写4~12(比如4,就是可以4个人同时下载),较弱就一个一个下载,写1',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.videoDownloadConcurrency',
|
||
label: '(高级)下载并发个数',
|
||
bottomHelpMessage:
|
||
'【涉及哔哩哔哩、抖音、YouTuBe、tiktok】下载并发个数:与【允许多用户下载个数】不同,这个功能影响下载速度。默认是1表示不使用,使用根据服务器性能进行选择,如果不确定是否可以用1即可,高性能服务器随意4~12都可以,看CPU的实力',
|
||
component: 'InputNumber',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '不确定用1即可,高性能服务器随意4~12都可以,看CPU的实力',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.aiBaseURL',
|
||
label: 'AI接口地址',
|
||
bottomHelpMessage:
|
||
'支持Kimi、OpenAI、Claude等,例如官方的可以填写:https://api.moonshot.cn,如果是本机可以填写:http://localhost:8000',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入AI接口地址',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.aiApiKey',
|
||
label: 'AI的key',
|
||
bottomHelpMessage:
|
||
'服务商提供的api key,如果是官方的就是sk-....,如果是本机的就是ey...(推荐使用ey因为sk没有联网功能)',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入AI的key',
|
||
},
|
||
},
|
||
{
|
||
field: 'tools.aiModel',
|
||
label: 'AI的模型',
|
||
bottomHelpMessage: '默认使用的是moonshot-v1-8k,也可以自定义模型,只要能联网就能使用!',
|
||
component: 'Input',
|
||
required: false,
|
||
componentProps: {
|
||
placeholder: '请输入AI的模型,例如:moonshot-v1-8k,使用kimi则不用填写',
|
||
},
|
||
},
|
||
],
|
||
getConfigData() {
|
||
const toolsData = {
|
||
tools: model.getConfig('RCtools'),
|
||
};
|
||
return toolsData;
|
||
},
|
||
setConfigData(data, { Result }) {
|
||
let config = {};
|
||
let cfg = model.getConfig('RCtools');
|
||
for (let [key, value] of Object.entries(data)) {
|
||
// 特殊处理这个,需要全覆盖
|
||
if (key === 'tools.globalBlackList') {
|
||
_.set(cfg, 'globalBlackList', value);
|
||
}
|
||
_.set(config, key, value);
|
||
}
|
||
// 合并配置项
|
||
config = _.merge({}, cfg, config.tools);
|
||
// 保存
|
||
model.saveAllConfig('RCtools', config);
|
||
return Result.ok({}, '保存成功~');
|
||
},
|
||
},
|
||
};
|
||
}
|