go-bot/README.md

68 lines
3.6 KiB
Markdown
Raw Normal View History

# 使用Go语言重新实现 [sihuan/XZZ](https://github.com/sihuan/XZZ) 机器人项目
本项目是一个使用Go语言重新实现 [sihuan/XZZ](https://github.com/sihuan/XZZ) 机器人项目。原使用go-cqhttp的机器人项目由于go-cqhttp不再维护有众多bug无法使用所以更换使用 [napcat](https://github.com/NapNeko/NapCatQQ) 实现。
当前项目的功能都在`workers`目录下。同时所有接收到的消息都保存在一个sqlite数据库中文件名为`data.db`保存在项目根目录。
## 部署服务:
1. 先使用docker部署[napcat](https://github.com/NapNeko/NapCatQQ)然后修改配置文件将机器人的token替换为napcat的token然后运行项目即可。
部署[napcat](https://github.com/NapNeko/NapCatQQ)可参考下面的docker-compose.yml文件
```yaml
version: '3'
services:
napcat:
image: mlikiowa/napcat-docker:latest
container_name: napcat
environment:
- ACCOUNT=<QQ号>
- HTTP_ENABLE=true
- HTTP_POST_ENABLE=true
- HTTP_URLS=["http://172.17.0.1:5580/"]
ports:
- "5700:3000"
- "6099:6099"
volumes:
- ~/dockerfile/napcat/config:/usr/src/app/napcat/config
- ~/dockerfile/napcat/QQ:/root/.config/QQ
```
然后启动docker-compose.yml文件即可。
新版的napcat把文件路径改了所以需要把上面的`~/dockerfile/napcat/QQ:/root/.config/QQ` 改为 `/app/.config/QQ:/app/.config/QQ`,否则会导致获取不到图片地址。
也可以不修改配置,手动创建软链接`ln -s ~/dockerfile/napcat/QQ /app/.config/QQ`
2. 运行本项目前需要先修改配置文件,将本项目目录下的`config example.toml` 重命名为`config.toml`,然后修改配置文件,默认的配置端口跟上面的 docker-compose.yml文件一致不需要修改。如果需要使用ai功能需要修改配置文件里的`MODEL`,`OPENAI_API_KEY`和`OPENAI_BaseURL`这三个字段。
3. 启动项目安装go环境然后运行`go run main.go`即可。你也可以使用`go build main/go -o go-bot`编译为可执行文件,
## 使用说明:
1. 默认的配置端口是5580如果需要修改请修改配置文件里的`APIURL`字段。默认获取以`!`开头的消息,如果需要修改,请修改配置文件里的`Prefix`字段。
当前拥有的插件:
- `ping`:判断程序运行,会响应`Pong!`
- `ip`查询一个ip的详细信息使用方法`ip <域名/ip>`
- `lsp`:请求`api.lolicon.app`获取`Pixiv`壁纸,暂时只简单实现获取随机壁纸。
- `hhsh`:“能不能好好说话”,使用方式:`hhsh <拼音简写>`,如:`hhsh awsl`
- `pkg`:用于查询`ArchLinux`软件包信息,包含官方仓库和`AUR`的软件包,使用方式:`pkg linux`
- `ai`:加入`ChatGPT`,支持文字和图片识别,图片识别需要`GPT4`相关模型,使用方式:`ai 你好`,图片识别需要选中回复群聊的图片,然后使用如:`ai 图片上有什么内容`来调用。
## 编写插件:
所有的插件放在`workers`目录下,并且都要有下面的代码:
```go
package workers
func init() {
RegisterWorkerFactory("ping", func(parms []string, uid, gid, role, mid, rawMsg string) Worker {
return &Ping{
StdAns: NewStdAns(parms, uid, gid, role, mid, rawMsg),
}
})
}
type Ping struct {
*StdAns
}
```
上面的例子是实现里`ping`这个插件的注册,在群组中以`!ping`指令激活。
同时所有的功能需要写在实现的`GetMsg()`方法里,如`!ping` 命令的:
```go
func (a *Ping) GetMsg() string {
return "Pong!"
}
```