shinxbot2
shinxbot2 copied to clipboard
A QQ bot with lots of functions
shinxBot2
一个基于 ~~go-cqhttp~~ Lagrange.Onebot(已迁移,如有bug提issue) 的机器人以及(轻微的(还没写))多机器人管理框架。
~~做着玩的~~
是我原来项目shinxBot的C++重构版,
它能做什么?
-
恶臭数字论证器,来源:itorr
-
来点二次元。来源:dmoe
-
首字母缩写识别,来源:itorr
-
在群或私聊中生成一个假的转发信息。
-
来点色图:随机色卡
-
赛博养猫(与 gpt3.5 共同创作)
-
cat image for http code。来源httpcats
-
图片OCR (qq自带的那个)
-
图片处理:对称、旋转、万花筒
-
openai的
gpt-3.5-turbo
API支持 -
google的
gemini-pro[-vision]
API支持,url -
StableDiffusion的
SDXL-Turbo
API支持,url -
群友聊天截图保存功能(美图)
-
龙王提醒
-
群成员变动提醒
-
人云亦云(复读)
-
不同群聊,私聊的消息互相转发
-
灰名单管理
-
管理多个bot,并(以后)可以通过广播传递消息
关于源文件
./src/functions 所有功能的代码
./src/inc 功能头文件
./src/interfaces 接口,所有功能继承这个类
./src/utils 一些工具
如何运行这个机器人
需要几个支持库:libcurl + openssl-dev / jsoncpp / base64 / libzip / Magick++
base64: please git clone them into ./lib
libcurl: sudo apt-get install libcurl4-openssl-dev
openssl: sudo apt-get install openssl-dev (or libssl-dev)
jsoncpp: sudo apt-get install libjsoncpp-dev
libzip: sudo apt-get install libzip-dev
Magick++:
sudo apt-get install libmagick++-dev libmagick++-6.q16hdri-dev
then remove them (this step actually do dependency install),
then refer to [Magick++ installing page](https://www.imagemagick.org/Magick++/Install.html) to manually install it. (for a higher version of 7)
maybe it will work
base64 作为子模块在 ./lib 下,请也一并 clone 它。
需要先配置并启动 go-cqhttp。打开 "反向HTTP POST地址",并设置你自己的接收端口。(一般在go-cqhttp目录下的config.yaml)
linux: 运行 build.sh ,自动执行cmake和make编译,使用 start.sh 开始后台运行。主程序作为管理程序,会以子进程方式启动其他bot。
windows:手动通过CMake编译,需要更改TCP连接的头文件(和可能的代码细微差别,包括不限于sleep,file:///)本人没有使用Windows编译过(
如何添加新bot
所有的bot应该继承./src/interfaces/bot.h
里class bot
。在./config/port.txt
中加入你的发送与接收端口。在./src/main.cpp
的main()中加入add_new_bot(new yourbot(receive_port[id], send_port[id]));
可以直接复制./src/bots
里的mybot
,是一个已经接好gocq的类。
如何添加新功能
仅限于class mybot,如果是其他类型bot,可以参考我的功能插件实现。
本节中functions和events可以互换,functions传参仅为消息相关,events传入事件的JSON数据,在收到聊天消息的时候调用 functions 里的方法,在其他提示性消息的时候用 events 的方法。
-
./src/functions 下新建目录并把代码放入,写一个类继承
./src/interfaces/processable.h
中的类并实现virtual方法(可以参考我其他功能的写法,一个简单示例是functions/getJapaneseImage/Anime_Img.cpp
) -
继承的 virtual 方法里只要 check() 成功了就会执行 process() 方法
-
./src/functions/functions.h 中加入你的.h
-
./src/bots/mybot.cpp中 run 函数里加入
functions.push_back(new your_name());
开发提示
-
如果使用clang,根目录下
.clang-format
为你提供了自动格式化设置 -
dev_tools
下的sender.sh
可用于向shinxbot发送信息,inspector
则截获shinxbot向go-cqhttp发送的数据。inspector
不能与go-cqhttp同时运行。这两者在功能上等同于go-cqhttp,为无法运行go-cqhttp的开发者提供了便利。(你可能需要更改inspector.cpp
与sender.sh
中的相关路径指向config
文件) 例如:
bash sender.sh "bot.help"
TODO
-
[ ] 把所有的功能编译成动态库,方便更换和加载
-
[ ] 实现bot间消息广播