将XZZ机器人使用go实现一遍
Find a file
2024-09-07 16:18:20 +08:00
config feat: 添加logrus依赖并优化配置加载逻辑 2024-08-17 19:37:24 +08:00
test feat(workers): 更新httpcat工作器以处理请求错误和更新User-Agent 2024-08-17 18:04:24 +08:00
tools Merge branch 'test' 2024-06-27 13:19:39 +08:00
utils feat(ai):修复ai获取图片失败的处理逻辑 2024-09-01 14:28:52 +08:00
workers feat(ai): 添加stripMarkdown函数以移除消息中的Markdown格式 2024-09-07 16:18:20 +08:00
.gitignore feat(workers): 添加httpcat工作器和更新依赖 2024-08-17 16:31:09 +08:00
config example.toml feat(readme): 更新项目介绍和部署指南 2024-07-20 15:49:03 +08:00
go.mod feat(ai): 使用第三方OpenAI库支持并更新依赖 2024-08-31 16:31:06 +08:00
go.sum feat(ai): 使用第三方OpenAI库支持并更新依赖 2024-08-31 16:31:06 +08:00
main.go feat: 添加logrus依赖并优化配置加载逻辑 2024-08-17 19:37:24 +08:00
README.md feat(ai): 使用第三方OpenAI库支持并更新依赖 2024-08-31 16:31:06 +08:00

使用Go语言重新实现 sihuan/XZZ 机器人项目

本项目是一个使用Go语言重新实现 sihuan/XZZ 机器人项目。原使用go-cqhttp的机器人项目由于go-cqhttp不再维护有众多bug无法使用所以更换使用 napcat 实现。

当前项目的功能都在workers目录下。同时所有接收到的消息都保存在一个sqlite数据库中文件名为data.db保存在项目根目录。

部署服务:

  1. 先使用docker部署napcat然后修改配置文件将机器人的token替换为napcat的token然后运行项目即可。 部署napcat可参考下面的docker-compose.yml文件

    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_KEYOPENAI_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目录下,并且都要有下面的代码:

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 命令的:

func (a *Ping) GetMsg() string {
	return "Pong!"
}