🐱🤖 一个以娱乐功能为主的QQ机器人,基于Nonebot2开发。

su226 73717c6900 修复 user_help 不出现和多次出现的问题 4 days ago
plugins b02f00cd21 B站动态推送支持预约有奖和商品推荐 5 days ago
util 73717c6900 修复 user_help 不出现和多次出现的问题 4 days ago
.gitignore 2f0e4ca1ec gitignore中.pdm.toml改为.pdm-python 1 month ago
LICENSE 5d6a3c54a2 MIT协议 1 year ago
README.md 748cd31267 由于Pyppeteer作者弃坑,换用Playwright 6 months ago
bot.py afdb75d486 20221111:大幅重构和改名 6 months ago
pdm.lock 597b3fc883 依赖更新至 Python 3.11 2 weeks ago
pyproject.toml 597b3fc883 依赖更新至 Python 3.11 2 weeks ago

README.md

# 🐱 IdhagnBot 🤖 一个以娱乐功能为主的QQ机器人,基于Nonebot2开发 [文档](https://idhagnbot.su226.tk/)

本项目以我的兽设命名,主要服务我自己的闲聊群

功能

详见我的博客 已过时,新文档正在施工中

部分功能需要可选依赖:

  • 离线维基百科:libzim(注意这个是GPL协议)、playwright(默认路径为null,也就是使用playwright附带的浏览器,可修改为其他路径)
  • wttr.in天气:playwright(因为使用了xterm.js来本地渲染终端)
  • MC服务器状态:mctools
  • IdhagnFetch(仿neofetch的状态信息):psutil
    • 注:显卡信息直接从/sys/class/drm读取,因此只支持Linux
  • text_generator的部分功能:jieba
  • meme_pic的部分功能:opencv
  • 词云、排行和统计:wordcloud、jieba、sql
  • B站动态推送的gRPC模式(更快):grpc
  • auto_recall的SQL模式:sql

你可以使用 pdm install -G 上述提到的名称 来安装上述依赖,如:pdm install -G opencv

部分功能需安装第三方软件:

  • 沙箱执行Python:bubblewrap(虽然这个也是GPL,但是是subprocess调用的)
  • 沙箱执行JavaScript: bubblewrap、nodejs、npm
  • 配置文件使用PyYAML解析,安装libyaml以使用C语言解析器(否则将使用纯Python解析器)
  • qalc计算器:libqalculate

安装

本项目使用Linux + Python 3.10开发,未在Windows或MacOS上测试过,理论上也兼容3.8、3.9和3.11,但测试不不如3.10充分。 (部分可选依赖不兼容3.11:libzim和wordcloud)

# 以ArchLinux为例,请自行换成你的发行版的包管理器
sudo pacman -S cairo pango gobject-introspection python-pdm
git clone https://github.com/su226/IdhagnBot.git
cd IdhagnBot
# 只安装基础功能
pdm install
# 或者安装全部功能
# 编译 python-libzim 时需要安装 libzim,但使用 PyPI 上的二进制包时不需要,可自行去除
sudo pacman -S libyaml bubblewrap nodejs npm libqalculate libzim
pdm install -G :all

使用

你需要先安装一个OneBot V11(原CQHTTP)实现,并且选择一个NoneBot2驱动器,这里以go-cqhttp和AIOHTTP(正向WebSocket连接)为例。(AIOHTTP也作为部分插件的HTTP库使用,因此使用其他适配器也必须安装)

可参照Nonebot2的文档:

你可以使用 .env 来配置 Nonebot2,或者你希望Nonebot2 配置文件和其他配置文件一样使用 YAML 的话,你也可以使用 configs/nonebot.yaml

driver: ~aiohttp
onebot_ws_urls: # 端口号要与协议端一致
- ws://127.0.0.1:6700
superusers: # 超管用户 QQ 号,可以指定多个,将会接收到出错等消息
- 123456789
- 987654321

默认情况下,机器人只会响应私聊,如需响应群聊,请修改 configs/contexts.yaml

groups:
  123456789: [别名] # 替换为群号,别名也可以指定多个或不指定
  987654321: [] # 可指定多个群
private_limit: [1234567890] # 私聊黑名单
private_limit_whitelist: true # 将私聊黑名单反转为白名单
timeout: 600 # 运行/ctx命令后,几秒内不操作,自动运行/ctx exit
# 可指定一部分命令只能在特定群聊内触发,如果要在私聊使用这些命令,有两种情况
# 命令若指定为has_group,机器人会自动检测私聊用户是否在群聊中,适合娱乐命令
# 命令若指定为in_group,需要私聊用户输入/ctx 群号(或者/ctx 别名)手动指定群,适合管理命令

所有配置文件,以及配置文件内的选项都是可选的,当配置文件不存在时会在日志中提示,而选项会使用默认值 以后会完善其他配置文件的文档(翻译:🕊️🕊️🕊️)

本项目不使用nb-cli,因此配置完成后直接使用 pdm start 运行机器人即可

项目结构

安装完成后的 IdhagnBot 有如下的目录结构,其中带 ⚠️ 的在 .gitignore 内并且可能需要自行创建。

📁IdhagnBot
|-📁⚠️ configs 配置目录,如果对应插件没有配置,会在日志中提示
| |-📁 * 插件群配置
| | |-📄 群号.yaml
| | \-📄 default.yaml 在创建不存在的群配置且default.yaml存在时,会自动复制一份
| |-📄 *.yaml 插件共享配置
| \-📄 nonebot.yaml 另一种Nonebot2配置文件
|-📁 plugins Nonebot2插件(含所需的资源)
| |-📁 * 较为复杂,包含资源文件或分多个模块的插件为文件夹
| \-📄 *.py 一些简单的插件通常是单文件
|-📁⚠️ resources 用户自定义资源
|-📁⚠️ states 状态文件,用于记录缓存、统计数据等,可能被自动修改,而配置一定只能手动修改(不建议手动编辑)
| |-📁 * 插件群状态
| | |-📄 群号.yaml
| | \-📄 default.yaml 尽管状态也支持default.yaml,但并不建议使用
| \-📄 *.yaml 插件共享状态
|-📁⚠️ user_plugins 用户插件,可以根据自己的需要拓展机器人功能
|-📁 util 插件之间共用的代码
|-📄⚠️ .env* Nonebot2配置文件(也可使用configs/nonebot.yaml,见上文)
|-📄 .gitignore
|-📄 bot.py 机器人主程序
|-📄 pdm.lock
|-📄 pyproject.yaml
|-📄 README.md
\-📄 LICENSE

特别感谢

IdhagnBot 的诞生离不开以下项目带来的启发和参考。