一个基于go-cqhttp的机器人以及(轻微的)多机器人管理框架。
做着玩的
是我原来项目shinxBot的C++重构版,
-
恶臭数字论证器,来源:itorr
-
来点二次元。来源:dmoe
-
首字母缩写识别,来源:itorr
-
在群或私聊中生成一个假的转发信息。
-
来点色图:随机色卡
-
赛博养猫(与 gpt3.5 共同创作)
-
cat image for http code。来源httpcats
-
图片OCR (qq自带的那个)
-
openai的
gpt-3.5-turbo
API支持 -
群友聊天截图保存功能(美图)
-
龙王提醒
-
群成员变动提醒
-
人云亦云(复读)
-
不同群聊,私聊的消息互相转发
-
灰名单管理
-
管理多个bot,并(以后)可以通过广播传递消息
./functions 所有功能的代码
./inc 功能头文件
./interfaces 接口,所有功能继承这个类
./utils 一些工具
需要几个支持库:libcurl + openssl-dev / jsoncpp / CImg / base64 / libzip
CImg & 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
CImg: already included
and sudo apt-get install libjpeg-dev libpng-dev
base64: already included
libzip: sudo apt-get install libzip-dev
maybe it will work
CImg 与 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应该继承./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"
-
把所有的功能编译成动态库,方便更换和加载
-
实现bot间消息广播