Git Product home page Git Product logo

knifehub's Introduction

header

repo size LICENSE Telegram Group QQ Group

docker pulls docker version Docker Image CI/CD - Release - knifehub Github All Releases CLA assistant FOSSA Status

Introduce

🧰 简单易用的效率工具平台

  • 简单易用 - 拒绝折腾, 专注于工作, 而非工具
  • WebUI 可视化 - 无需再在 Console 上操作, 轻松上手
  • 插件化架构 - 轻松使用插件扩展
  • 多平台多架构 - win,linux,osx,amd,arm 均可

通知
请尽快更新到 最新版 (KnifeHub-v1.1.0 +) ,
v1.1.0 开始将静默发送异常日志等到服务端, 使用本软件即代表同意此隐私授权

注意 : 本项目仅供学习使用, 所有第三方插件与本项目无关

技术栈

  • 后端: 主服务: ASP.NET Core (.NET/C#) & Nginx
  • 后端: 部分 API 服务: Hono (Node.js & TypeScript) & Flask (Python)
  • 前端: Next.js & React.js & TypeScript & Material UI & pnpm

关联线上产品:

功能

  • 大部分功能由插件提供
点我 打开/关闭 本仓库 维护的 官方插件

PUP (Public Universal Plugin)

不依赖于特定主程序, 可在 PluginCore 环境通用
若有前置依赖插件, 安装启用后, 可独立运行

请自行前往 plugins 查看插件列表,
插件可在 Releases 搜索下载

Online demo

Screenshots

Quick Start

部署

PluginCore Admin 用户名PluginCore Admin 密码 为你自己设置的后台登录用户名与密码, 随意设置即可, 自己记住就行

方式1:原生部署 (适合小白)

Releases - KnifeHub, 点我下载
找到并下载 KnifeHub 相应平台压缩包,
(Windows 系统 一般下载 Windows-64 版本即可, 即 KnifeHub-win-x64.zip)
解压里面有 KnifeHub.Web.exe , 运行它即可 (无需再安装其它任何运行库)
黑窗口中会显示一个 url 地址(Now listening on:后跟随的地址), 复制到浏览器中打开即可 保持此黑窗口在后台运行即可

方式2: 使用 Zeabur 免费 一键部署

  • 点击下方按钮 一键部署
  • 免费注册, 无需信用卡验证
  • 每月 $5.00 免费额度
  • 需要一定天数后延长免费时长
  • 支持 支付宝

Deploy on Zeabur

Zeabur 环境变量
环境变量名称 必填 备注
PLUGINCORE_ADMIN_USERNAME PluginCore Admin 用户名
PLUGINCORE_ADMIN_PASSWORD PluginCore Admin 密码

注意:
修改环境变量后, 需 Redeploy 才能生效

方式3: 使用 Render 免费 一键部署

注意: 此种方式 KonataPlugin 可能无法登录上线

  • 点击下方按钮 一键部署
  • 免费注册, 无需信用卡验证
  • Free Instance Hours: 750 hours/month
  • Free Bandwidth: 100 GB/month
  • Free Build Minutes: 500 min/month
  • 注意 : 免费实例类型上的 Web 服务在闲置 15 分钟后会自动停止运行, 当一个新的免费服务请求进来时, Render 会再次启动它, 以便它可以处理该请求, 因此为了保证存活, 请使用第三方监控保活, 例如: UptimeRobot: 免费网站监控服务

Deploy to Render

Render 环境变量
环境变量名称 必填 备注
PLUGINCORE_ADMIN_USERNAME PluginCore Admin 用户名
PLUGINCORE_ADMIN_PASSWORD PluginCore Admin 密码

方式4: 使用 Railway 免费 一键部署

  • 点击下方按钮 一键部署
  • 免费注册, 无需信用卡验证
  • 一次性 $5.00 免费额度 / 500 小时免费执行时间
  • 无需保活, 在免费额度用完之前永不停止运行

Deploy on Railway

Railway 环境变量
环境变量名称 必填 备注
PLUGINCORE_ADMIN_USERNAME PluginCore Admin 用户名
PLUGINCORE_ADMIN_PASSWORD PluginCore Admin 密码

注意:

  • Railway 修改环境变量 会 触发 重新 Deploy
  • Railway 重新 Deploy 后会删除数据, 你安装的所有插件及数据都将清空。

方式5: 使用 Heroku 一键部署

注意:此种方式 KonataPlugin 可能无法登录上线

  • 点击下方按钮 一键部署
  • 注意 : Heroku 应用一段时间不访问会自动休眠, 因此为了保证存活, 请使用第三方监控保活, 例如: UptimeRobot: 免费网站监控服务

Deploy on Heroku

Heroku 环境变量
环境变量名称 必填 备注
PLUGINCORE_ADMIN_USERNAME PluginCore Admin 用户名
PLUGINCORE_ADMIN_PASSWORD PluginCore Admin 密码

方式6: 使用 Docker

注意 : 请不要映射/挂载 容器内 /app/Plugins/ 目录, 否则可能导致 插件无法正常上传 , 此问题解决中

docker run -d --restart=always -p 53213:80 -e ASPNETCORE_URLS="http://*:80" -e ASPNETCORE_ENVIRONMENT="Production" -e TZ="Asia/Shanghai"  --name knifehub yiyungent/knifehub
# 可选, 进入容器 管理, 例如修改 /app/App_Data/PluginCore.Config.json 中的 PluginCore Admin 用户名与密码
docker exec -it knifehub bash

现在访问: http://your-domain/PluginCore/Admin your-domain 为黑窗口中显示的 url 地址

插件管理

访问: https://your-domain/PluginCore/Admin 进入 PluginCore Admin

插件:
下载插件包,

插件包下载见 Release , 直接插件上传 下载的 QQHelloWorldPlugin-net6.0.zip 即可

然后直接 上传 -> 安装 -> 文档 -> 设置 -> 启用 -> 文档 即可

守护进程(daemon)

守护进程: 开机自启动, 程序异常退出时自动重启程序

Windows

方式1: 简易 PowerShell 实现

PowerShell 实现简易 KnifeHub.Web.exe 异常退出时自动重启 KnifeHub.Web.exe
下载 仓库根目录 utils/start.ps1 utils/corn.ps1
start.ps1corn.ps1 放入与 KnifeHub.Web.exe 同目录文件夹下,
使用 Windows Terminal / PowerShell 运行 start.ps1 即可

# 确保进入程序目录再执行
cd "KnifeHub-win-x64/win-x64"

./start.ps1
方式2: ProcessGuard

强烈推荐新人使用, 稳定强大

Linux

推荐使用 Supervisor

更新 KnifeHub

查看最新版 Releases - KnifeHub

若你使用 Railway 一键部署,
只需要修改 Railway 创建的仓库 (例如: KnifeHub) 里的 Dockerfile 文件里的 yiyungent/knifehub:v0.5.2 , 更新最后的版本号 v0.5.2 到最新版即可

注意:
请更新前导出插件数据, QQStatPlugin 支持下载数据库到本地, 然后下载最新插件包, 解压, 将数据库文件替换为你导出的数据库文件, 然后在有 QQStatPlugin.sqlite 的路径下打包所有文件 为 zip, 上传插件即可
插件设置 可以通过保持打开插件设置页面的方式, 重新安装插件后, 再在此页面点击保存

一些更新 docker knifehub 可能需要用到的命令

cd /www/wwwroot/knifehub*
# docker-data 位置用于保存当前容器数据
mkdir -p docker-data/App_Data/
mkdir -p docker-data/Plugins/
mkdir -p docker-data/Plugins_wwwroot/
# 保存当前数据
docker cp knifehub:/app/appsettings.json docker-data/appsettings.json
docker cp knifehub:/app/App_Data/PluginCore.Config.json docker-data/App_Data/PluginCore.Config.json
docker cp knifehub:/app/App_Data/plugin.config.json docker-data/App_Data/plugin.config.json
docker cp knifehub:/app/Plugins/ docker-data/
docker cp knifehub:/app/Plugins_wwwroot/ docker-data/

# 移除当前
docker stop knifehub
docker rm knifehub
docker rmi yiyungent/knifehub

# 获取最新
# 建议不要使用 latest , 而是指定最新的版本号, 有可能你使用的 docker 仓储源还未同步, 而导致 latest 仍为旧版
#docker pull yiyungent/knifehub:v1.0.0
docker pull yiyungent/knifehub:latest
docker run -d --restart=always -p 53213:80 -e ASPNETCORE_URLS="http://*:80" -e ASPNETCORE_ENVIRONMENT="Production" -e TZ="Asia/Shanghai"  --name knifehub yiyungent/knifehub

# 这里我将原本备份的数据保存到了这个路径, 进入这个路径, 将备份数据覆盖到 docker 容器中
cd docker-data

docker cp appsettings.json knifehub:/app/appsettings.json
docker cp App_Data/PluginCore.Config.json knifehub:/app/App_Data/PluginCore.Config.json
docker cp App_Data/plugin.config.json knifehub:/app/App_Data/plugin.config.json
docker cp Plugins/ knifehub:/app/
docker cp Plugins_wwwroot/ knifehub:/app/

# 重启容器
docker restart knifehub

注意:
使用 yiyungent/knifehub:latest-amd-full 完整版,
每次升级, 内嵌的 filebrowser 都会被重置为默认用户名: admin, 默认密码: admin, 升级完需立即修改为自己的用户名及密码

插件开发

开发必读

注意:
所有纯基于 PluginCore.IPlugins 开发的插件都通用,
下载插件包, 然后 上传 -> 安装 -> 设置 -> 启用 即可

插件开发 可参考:

KnifeHub 插件开发包
插件开发包中已包含:

  • PluginCore.IPlugins.AspNetCore

注意: 如果你不需要 KnifeHub.Sdk 中的一些 Utils , 那么建议直接依赖 PluginCore.IPlugins.AspNetCore , 减少依赖项, 使之称为通用插件

dotnet add package KnifeHub.Sdk

注意:

  • 本项目目前直接使用的 PluginCore 插件框架, 插件采用激发式, 插件工作完成后, 实例会立即销毁, 无法常驻后台
  • 若需要定时任务, 可以使用 ITimeJobPlugin, 可见 PluginCore 的文档
  • 由于 QQBot 本身为常驻, 因此需额外注意 IPluginFinder 的服务的生命周期/范围, 这点和在 ASP.NET CoreController 中 直接使用不同

在线开发

  • 预设 Replit 开发模板
  • 免费注册, 无需信用卡验证
  • 免费在线实验环境, 可启动项目
  • Console/Shell 支持
  • 未注册用户注册登录后, 再回到此处点击上方链接, fork 此 Replit 模板项目, 基于此开发更方便, 但此模板可能不是最新版, 建议在实验环境中 git pull
  • 注意: 此实验环境 KonataPlugin 无法登录上线, 你依然需要做本地测试

相关项目

社区插件

欢迎 Pull Request !

赞助者

本列表由 afdian-action 自动更新

感谢这些来自爱发电的赞助者:

RemMai 浮沉 WiMi Dr MonoLogueChi
点我 打开/关闭 赞助者列表 RemMai ( 1 次赞助, 共 ¥15 ) 留言: 感谢提供插件灵感。 ...
浮沉 ( 1 次赞助, 共 ¥100 ) 留言:
WiMi ( 1 次赞助, 共 ¥30 ) 留言: 感谢分享
Dr ( 1 次赞助, 共 ¥10 ) 留言: 非常感谢
MonoLogueChi ( 1 次赞助, 共 ¥28.2 ) 留言: 感谢你的开源项目

Donate

KnifeHub is an Apache-2.0 licensed open source project and completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing.

We accept donations through these channels:

License

FOSSA Status

Author

  • KnifeHub.Web Apache-2.0
  • KnifeHub.Sdk Apache-2.0
  • QQHelloWorldPlugin GPL-3.0
  • MoLiPlugin GPL-3.0
  • QQStatPlugin GPL-3.0
  • BackupPlugin MIT
  • AutoLoginPlugin GPL-3.0
  • QQNotePlugin GPL-3.0
  • ZhiDaoPlugin GPL-3.0
  • WebMonitorPlugin Apache-2.0
  • QQChannelPlugin MIT
  • MoLi4QQChannelPlugin MIT

KnifeHub © yiyun, Released under the Apache-2.0 License.
Authored and maintained by yiyun with help from contributors (list).

GitHub @yiyungent Gitee @yiyungent

knifehub's People

Contributors

fossabot avatar github-actions[bot] avatar sweellong avatar yiyungent avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

knifehub's Issues

Unhandled exception. System.MissingMethodException: Method not found: 'Telegram.Bot.TelegramBotClient BotItemModel.get_TelegramBotClient()'

System.MissingMethodException: Method not found: 'Telegram.Bot.TelegramBotClient BotItemModel.get_TelegramBotClient()'.
  ?, in async Task TgBotStatPlugin.ExecuteAsync()
  File "AsyncMethodBuilderCore.cs", line 38, in void AsyncMethodBuilderCore.Start<TStateMachine>(ref TStateMachine stateMachine)
    stateMachine.MoveNext();
  ?, in Task TgBotStatPlugin.ExecuteAsync()
  ?, in void PluginTimeJobBackgroundService.DoWork(object state)
  File "Timer.cs", line 718, in void TimerQueueTimer.s_callCallbackInContext(object state)
    t._timerCallback(t._state);
  File "Timer.cs", line 709, in void TimerQueueTimer.CallCallback(bool isThreadPool)
    ExecutionContext.RunInternal(context, s_callCallbackInContext, this);
  File "Timer.cs", line 662, in void TimerQueueTimer.Fire(bool isThreadPool)
    CallCallback(isThreadPool);
  File "Timer.cs", line 326, in void TimerQueue.FireNextTimers()
    timerToFireOnThisThread?.Fire();
  File "Timer.CoreCLR.cs", line 59, in void TimerQueue.AppDomainTimerCallback(int id)
    Instances[id].FireNextTimers();

https://yiyungent.sentry.io/share/issue/376bdc0e57a14d118a73703b1e960204/

就算在本地主程序启动后,后启用 TgBotStatPlugin 也会出现此问题

进一步分离

  • Konata 相关提取为一个插件,其它需要的依赖于此插件,或 QQBotHub.Sdk.Konata nuget包,这样就可以防止没有用到的插件被感染 GPL-3

  • Dragonfly 的 WebMonitorPlugin 移植到本项目中

  • 以后主程序仅仅为一个壳子,甚至尽可能不包含任何机器人基础包,需要的可以以预装插件打包到 docker 镜像中

  • QQ登录提取到 /qq

  • 首页 导航 并提供前端扩展点,无需登录

KonataPlugin 无法登录上线

  1. 若 KonataPlugin 在某些国外地区无法登录上线,而 本地/国内 可登录上线
  2. 若 KonataApp 无法登录上线

以上两种情况 请前往 Konata.Core 官方 Telegram 群反馈, 若使用 KonataApp 可提供 Logs 文件夹下日志

https://t.me/konachan_wifi

点击上方链接加入 Konata.Core 官方 Telegram 群,不需要再在这里反馈了(

【重要】无法登录, 临时解决方案

由于 Konata.Core 长期不更新 NuGet 包关系,因此出此下策

下载解压下方 Konata.Core.zip , 复制其中的 Konata.Core.dll, 替换 ConsoleAppQQBotHub 中的 Konata.Core.dll 即可

注意: 此方法 只适用于使用 Docker 等方式部署的,由于 QQBotHub-win-x64.zip 采用独立打包, 因此无法通过替换 dll 的方式修复无法登录

下载我: Konata.Core.zip

System.Exception: No constructor was found that had all the dependencies satisfied.

Sentry Issue: KNIFEHUB-6

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'IServiceProvider'.
  ?, in object PluginFinder.ResolveUnregistered(Type type)+(ParameterInfo parameter) => { }
  ?, in object PluginFinder.ResolveUnregistered(Type type)

System.Exception: No constructor was found that had all the dependencies satisfied.
  ?, in object PluginFinder.ResolveUnregistered(Type type)
  ?, in IEnumerable<TPlugin> PluginFinder.EnablePlugins<TPlugin>()+MoveNext()
  ?, in void HomeController.ChannelBotItem(BotDevItemModel botConfig, SettingsModel settings)+(Exception ex) => { }
  ?, in async ValueTask BaseWebSocket.ConnectAsync(string url)
  ?, in async ValueTask ChannelBot.OnlineAsync()
...
(10 additional frame(s) were not displayed)

关于QQ知道插件的建议

使用下来,暂时有两个建议
使用场景:问题帮助机器人

  1. 在编辑关键词回复的时候可以在HUB后台直接加,感觉在群里#问#答添加有点那啥,而且还不能批量
  2. 虽然可以答案相同,可以重复添加相同答案不同问的词库,但还是希望给一个#答添加更多的关键字

当然上方问题可以使用茉莉插件配合茉莉的词库功能解决,但Issues是对于单独这个插件的建议(小声

DataAnalysisPlugin: TODO

DataAnalysisPlugin

  • 一个 Tab 页 多个图表, 并给出简单自动数据分析结论
  • BaseEntity.TenantId
    • 用户用租户实现, 更简单, 针对此种更多隔离情况, 更易用
  • UserEntity: BaseEntity
    • UserName, Password, Token, GitHubEntity
  • 通过 GitHub 注册并登录
    • UserEntity --一对一-- GitHubEntity --一对一-- TenantId
  • /plugins/DataAnalysisPlugin 全移除 PluginCore.Admin 权限, 此为前台, 由登录用户具体授权
  • 后台管理独立页面 (/plugins/DataAnalysisPlugin/admin): PluginCore.Admin 权限

【Warning】QQBotHub 重大更新

  1. 以前插件几乎全不可用
  2. Konata.Core 已作为插件分离,不需要用到的,不会再被 GPL 3 感染
  3. QQBotHub.Sdk 不再包含 Konata.Core
  4. 建议不需要 QQBotHub.Sdk 的插件,不要依赖它,只依赖 PluginCore 相关就会成为通用插件,在 使用 PluginCore 的系统中通用

@SweelLong

QQStatPlugin 插件使用

登录插件页面 出现插件的前端文件应当放在 wwwroot 文件夹下,还有哪些地方需要设置吗?

Docker 镜像时区 为 UTC0

image

看来 Dockerfile 环境变量 与 docker-compose.yml / docker cli 等环境变量 设置时区的方法还是不行,还是得手动来最靠谱

内存泄露

我刚测试发现 QQBotHub 啥插件都不加载,啥子都不做,内存占用++,
我的 OneTree(同样用了PluginCore),加载了一些插件,但内存占用一直没变

1. OneTree (PluginCore, 加载少量插件, 长时间运行, Portainer)

image

2. QQBotHub (PluginCore, 未加载插件,空新启动项目, Portainer)

一开始启动 27MB 左右, 内存++速度非常快!

image

3. QQBotHub (PluginCore, 加载大量插件,长时间运行, Railway)

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.