64 lines
3.3 KiB
Markdown
64 lines
3.3 KiB
Markdown
# 使用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文件即可。
|
||
|
||
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!"
|
||
}
|
||
```
|