Skip to content

Jayfeather233/shinxbot2

Repository files navigation

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.hclass 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 的方法。

  1. ./src/functions 下新建目录并把代码放入,写一个类继承 ./src/interfaces/processable.h 中的类并实现virtual方法(可以参考我其他功能的写法,一个简单示例是 functions/getJapaneseImage/Anime_Img.cpp

  2. 继承的 virtual 方法里只要 check() 成功了就会执行 process() 方法

  3. ./src/functions/functions.h 中加入你的.h

  4. ./src/bots/mybot.cpp中 run 函数里加入 functions.push_back(new your_name());

开发提示

  1. 如果使用clang,根目录下.clang-format为你提供了自动格式化设置

  2. dev_tools下的sender.sh可用于向shinxbot发送信息,inspector则截获shinxbot向go-cqhttp发送的数据。inspector不能与go-cqhttp同时运行。这两者在功能上等同于go-cqhttp,为无法运行go-cqhttp的开发者提供了便利。(你可能需要更改inspector.cppsender.sh中的相关路径指向config文件) 例如:

bash sender.sh "bot.help"

TODO

  • 把所有的功能编译成动态库,方便更换和加载

  • 实现bot间消息广播