rc-plugin/guoba.support.js
2025-09-03 21:04:28 +08:00

481 lines
23 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import _ from "lodash";
import path from "path";
import { BILI_CDN_SELECT_LIST, BILI_DOWNLOAD_METHOD, BILI_RESOLUTION_LIST, YOUTUBE_GRAPHICS_LIST, NETEASECLOUD_QUALITY_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("tools"),
};
return toolsData;
},
setConfigData(data, { Result }) {
let config = {};
let cfg = model.getConfig("tools");
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("tools", config);
return Result.ok({}, "保存成功~");
},
},
};
}