go-bot/README.md

64 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用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!"
}
```