参考
参考B站视频群聊机器人
以及nonebot官方文档
创建运行环境
升级python
需要升级python到python3.10以上(ubuntu20默认python3.8)
如果您的python版本本身就大于3.10,可以进入第二步
请参照此网页进行
1. 添加源 sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update 2. 安装 sudo apt install python3.10 3. 设置默认版本为 Python3.10 查看系统已存在的所有python版本 ls -l /usr/bin/python* sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2 4. 选择默认版本,提示信息中回车即可. sudo update-alternatives --config python3 5. 修复 pip sudo apt install python3.10-distutils curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py sudo python3 get-pip.py 6. 权限问题 sudo python3 get-pip.py --user 7. pip升级 pip install --upgrade pip 8. 检查配置文件 sudo vi /usr/local/bin/pip3 第一行是 #!/usr/bin/python3 即可. 输入python3,回车,看输出信息是否是python3.10 输入pip --version,看输出是否是链接到python3.10 9.清除pip缓存 sudo rm -r ~/.cache/pip 10. 安装python虚拟环境 sudo apt install python3.10-venv
创建独立的screen会话
sudo apt-get install screen
screen -S nonebot
#nonebot是我取的名字,你可以不一样
关于screen的使用
- 先按
Crtl+a
,然后按d
,就可以退出当前会话(会在后台运行) - 如果重新登陆服务器后想要恢复会话,就输入
screen -r nonebot
如果提示没有可恢复的会话,如下
There is a screen on: 54100.nonebot (11/21/2022 01:15:17 AM) (Attached) There is no screen to be resumed matching nonebot.
说明上次没有规范退出,那就先
screen -d nonebot
再
screen -r nonebot
创建python虚拟环境
mkdir ~/qqbot
cd ~/qqbot
python3 -m venv nonebot
source ./nonebot/bin/activate
使用参考一个简单教程python虚拟环境管理工具venv教程
go-cqhttp安装及使用
安装go-cqhttp
参考快速使用说明
#使用wget下载安装包
wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_1.0.0-rc3_linux_amd64.deb
#使用gdebi安装go-cqhttp
sudo apt install gdebi
sudo gdebi go-cqhttp_1.0.0-rc3_linux_amd64.deb
也可以不使用deb包安装,使用压缩包安装运行,但只是每次运行都需要cd到文件夹运行
使用cqhttp
初始化
参考快速使用说明
go-cqhttp
#在弹出选项中输入 3 回车选择
3: 反向 Websocket 通信
编辑生成的config.yml
关于config.yml的设置说明
vim config.yml
#1.修改qq账号,密码(不填即为扫码登陆)
#2.设置`universal: ws://127.0.0.1:11451/onebot/v11/ws/`
#11451为随意设置的端口,只要和nonebot中的设置保持一致就可以
设置完成后理论上再运行go-cqhttp
,按照提示拖动验证框就可以正常运行了,但事实上很多人的账号都不行,尤其是我之前就设置过且触发过风控的。
(如果你成功登陆就跳过下一步)
关于go-cqhttp无法顺利登陆
- 在win电脑上下载,go-cqhttp免安装的压缩包就可以了
- 在win命令行运行
.\go-http
,然后编辑设置config.yml
- 在同一个wifi网下扫码登陆
- 把生成的
device.json
和session.token
使用FTP工具上传到服务器对应文件夹中 - 在服务器上再次运行
go-cqhttp
应该就可以登陆成功了 - 登陆成功时会出现
登录成功 欢迎使用: XXXX
的字样,
至于后面的连接到反向WebSocket Universal服务器 ws://127.0.0.1:11451/onebot/v11/ws/ 时出现错误: dial tcp 127.0.0.1:11451: connect: connection refused
,可以不用管,那是因为还没有启动nonebot
为了能发送语音,安装ffmpeg
sudo apt install -y ffmpeg
Nonebot安装及使用
安装nonebot
pip install nb-cli
#如果提示缺少pip,就尝试pip3,如果依旧没有,就先安装python3-pip
创建nonebot
nb create
然后根据提示选择(上下移动,空格选择,回车确认)
[?] Project Name: lucy #这是我给机器人取的名字,你自己随便取一个
[?] Where to store the plugin? 2) In a "src" folder #选择在本文件夹存放插件,你也可以选'lucy',后续某些命令需要自己改下位置
[?] Which builtin plugin(s) would you like to use? echo #请保持一致
[?] Which adapter(s) would you like to use? OneBot V11 #请保持一致
修改配置
查看全部文件
cd lucy ls -a #可以看到很多隐藏文件,如.env,.env.dev
修改编辑
关于如何编辑配置,参考官方文档vim .env 然后将dev改为prod #.env.dev意思是测试环境,.env.prod意思是生产环境,当然不改也完全可以 vim .env.prod 将HOST改为之前设置的127.0.0.1 将PORT端口改为之前设置的11451
进阶配置
这里附一份官方文档中的示例配置,供参考,目前看不懂的项可以先不配置,日后再写
更详细的解释参考详细配置HOST=0.0.0.0 # 配置 NoneBot2 监听的 IP/主机名 PORT=8080 # 配置 NoneBot2 监听的端口 SUPERUSERS=["123456789", "987654321"] # 配置 NoneBot 超级用户 NICKNAME=["awesome", "bot"] # 配置机器人的昵称 COMMAND_START=["/", ""] # 配置命令起始字符 COMMAND_SEP=["."] # 配置命令分割字符 #Custom Configs CUSTOM_CONFIG1="config in env file" CUSTOM_CONFIG2= # 留空则从系统环境变量读取,如不存在则为空字符串
运行机器人
试运行
nb run #或者 python ./bot.py 如果没有报错就先Ctrl+C退出,因为还要同时运行go-cqhttp
后台运行go-cqhttp
#退回到qqbot所在文件夹(放有device.json的文件夹) cd .. #后台运行 nohup go-cqhttp & #查看进程 ps #如果不想运行或者出错了,可以用 kill 命令杀死后台进程
运行nonebot
#回到第一步文件夹 cd lucy #运行nonebot nb run #或者 python ./bot.py
- 验证
如果没有报错,就在手机上对你设置为机器人的那个账号发送/echo 1234
,如果回复你1234
,机器人就设置完成了
安装第三方插件
前往商店挑选你要安装的插件,复制命令到服务器运行
建议每安装一个插件,就运行一次nonebot测试调整功能,防止插件报错也不知道是哪个引起的,安装前只需要结束nonebot进程就可以,go-cqhttp进程可以一直在后台运行不结束
服务器状态查看
- [x] 完美运行
作用:通过戳一戳获取服务器状态
nb plugin install nonebot-plugin-status
修改返回状态的样式,参考github文档
在 NoneBot 全局配置中编辑修改
vim .env.prod
我的模版如下#服务器状态查看配置 server_status_only_superusers=True #是否仅允许超级用户使用 #配置文件示例 SERVER_STATUS_TEMPLATE=' CPU: {{ "%2d" % cpu_usage }}.{{"%-2d" % (cpu_usage%1*100)}}% Memory: {{ "%2d" % memory_usage.percent }}.{{"%-2d" % (memory_usage.percent%1*100)}}% Memory_Used: {{"%d" % (memory_usage.used//1000000)}}MB Memory_Available: {{"%d" % (memory_usage.available//1000000)}}MB Runtime: {{ uptime | relative_time | humanize_delta }} NonebotTime: {{ runtime | relative_time | humanize_delta }} {% if swap_usage.total %}Swap: {{ "%02d" % swap_usage.percent }}%{% endif %} Disk: {% for name, usage in disk_usage.items() %} Total: {{"%d" % (usage.total//2**30)}}GB Used : {{"%d" % (usage.used//2**30)}}GB Details: {{ name }} : {{ "%2d" % usage.percent }}% {% endfor %} '
待完成
- [ ] 发送
ps
,top cpu
,top mem
命令,返回当前进程列表,或是占CPU/内存最高的10个进程
(使用python里的psutil模块,如psutil.Process(),psutil.
- [ ] 发送
Bison
- [x] 完美运行
作用:通用订阅推送插件
安装命令:(先不要执行)
nb plugin install nonebot-bison
通过阅读FAQ可知
FAQ
1. 报错TypeError: 'type' object is not subscriptable
本项目使用了 Python 3.10 的语法,请将 Python 版本升级到 3.10 及以上,推荐使用 docker 部署
2. bot 不理我
请确认自己是群主或者管理员,并且检查COMMAND_START环境变量是否设为[""] 或者按照COMMAND_START中的设置添加命令前缀,例: COMMAND_START=["/"]则应发送/添加订阅
3.微博漏订阅了 微博更新了新的风控措施,某些含有某些关键词的微博会获取不到。
4. 无法使用后台管理页面
确认自己正确配置了 nonebot 的端口,如果在远程或容器外访问网页请确保HOST=0.0.0.0
确认自己的云服务器的防火墙配置正确
确认自己使用了正确的方法安装插件
参与开发
1. 修复python版本问题
需要升级python到python3.10以上(ubuntu20默认python3.8)(一开始进行过这一步的可以跳过了)
请参照此网页进行1. 添加源 sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update 2. 安装 sudo apt install python3.10 3. 设置默认版本为 Python3.10 查看系统已存在的所有python版本 ls -l /usr/bin/python* update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2 4. 选择默认版本,提示信息中回车即可. update-alternatives --config python3 5. 修复 pip sudo apt install python3.10-distutils curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py sudo python3 get-pip.py 6. 权限问题 sudo python3 get-pip.py --user 7. 检查配置文件 sudo vi /usr/local/bin/pip3 第一行是 #!/usr/bin/python3 即可. 输入python3,回车,看输出是否是3.10
- 重新安装原有的python包(同上,仅仅给刚刚才升级的用)
sudo apt install python3.10-venv
pip install nb-cli
nb plugin install nonebot-plugin-status
- 重新运行
nb run
,测试功能有无报错。
2. 安装bison
安装命令:
nb plugin install nonebot-bison
安装执行过程中,捕获到一个warning
Using legacy 'setup.py install' for bs4, since package 'wheel' is not installed.
Using legacy 'setup.py install' for sgmllib3k, since package 'wheel' is not installed.
由于缺少wheel
包导致的报错
所以安装wheel
pip install wheel
重新执行
nb plugin install nonebot-bison
无报错,完成
3. 配置文件
具体配置文件请参考官方说明
更改方式为
vim .env.prod
配置外网访问端口
默认是
8080
端口,更改为你实际使用的端口,而且要在服务器防火墙端放行。文档原文:
BISON_OUTER_URL: 从外部访问服务器的地址,默认为http://localhost:8080/bison,如果你的插件部署 在服务器上,建议配置为http://<你的服务器ip>:8080/bison
注意:不应该是
8080
,而是你自己设定的端口,比如我就应该是http://<你的服务器ip>:11451/bison
在
.end.prod
中添加BISON_OUTER_URL = "http://xxxxxxxx:11451/bison/"
确保HOST设置为0.0.0.0,检查
.env.prod
中的设置如果需要从外网或者 Docker 容器外访问后台页面,请确保
HOST=0.0.0.0
4. 启动bison
- 启动后会安装chromium 核心和ffmpeg等,请确保有足够权限及网络条件,观察输出无报错
3. 如何使用
参见官方说明
此处做一个转载备份
命令
#在本群中进行配置
所有命令都需要@bot 触发
添加订阅(仅管理员和群主和 SUPERUSER):添加订阅
关于中止订阅
对于v0.5.1及以上的版本中,已经为添加订阅命令添加了中止订阅的功能。
在添加订阅命令的几乎各个阶段,都可以向 Bot 发送取消消息来中止订阅过程(需要订阅发起者本人发送)
查询订阅:查询订阅
删除订阅(仅管理员和群主和 SUPERUSER):删除订阅
#私聊机器人获取后台地址
后台管理,之后点击返回的链接
如果你是 superuser,那么你可以管理所有群的订阅;
如果你是 bot 所在的群的其中部分群的管理,你可以管理你管理的群里的订阅;
如果你不是任意一个群的管理,那么 bot 将会报错。
TIP
可以和 bot 通过临时聊天触发
WARNING
网页的身份鉴别机制全部由 bot 返回的链接确定,所以这个链接并不能透露给别人。
并且链接会过期,所以一段时间后需要重新私聊 bot 获取新的链接。
#私聊机器人进行配置(需要 SUPERUER 权限)
请私聊 bot群管理
关于中止订阅
与普通的添加订阅命令一样,在群管理命令中使用的添加订阅命令也可以使用取消来中止订阅过程
#所支持平台的 uid
#Weibo
对于一般用户主页https://weibo.com/u/6441489862?xxxxxxxxxxxxxxx,/u/后面的数字即为 uid
对于有个性域名的用户如:https://weibo.com/arknights,需要点击左侧信息标签下“更多”,链接为https://weibo.com/6279793937/about,其中中间数字即为 uid
#Bilibili
主页链接一般为https://space.bilibili.com/161775300?xxxxxxxxxx,数字即为 uid
#RSS
RSS 链接即为 uid
#网易云音乐-歌手
在网易云网页上歌手的链接一般为https://music.163.com/#/artist?id=32540734,id= 后面的数字即为 uid
#网易云音乐-电台
在网易云网页上电台的链接一般为https://music.163.com/#/djradio?id=793745436,id= 后面的数字即为 uid
疫情提醒推送
- [x] 完美运行
安装
nb plugin install nonebot_plugin_covid19_news
基本无需设置,开箱即用
用法
epic限免资讯
- [x] 完美运行
安装
nb plugin install nonebot_plugin_epicfree
设置
提醒时间,在
.env.prod
中添加EPIC_SCHEDULER="5 8 8 8"
限免游戏资讯订阅默认每周六 08:08:08 发送,定义
EPIC_SCHEDULER
环境变量即可指定推送时间,该配置的四个数字依次代表day_of_week
hour
minute
second
。使用
- 发送「喜加一」查找限免游戏
- 发送「喜加一订阅」订阅游戏资讯
- 发送「喜加一订阅删除」取消订阅游戏资讯
插件响应基于正则匹配,所以,甚至「EpIc喜+1」这样的指令都可用!
Apex Legends API 查询插件
- [x] 完美运行
安装
nb plugin install nonebot-plugin-apex-api-query
在此处申请api密钥
0cf4f7985811fbe8455f263f61abc10c
配置文件
使用方法 在 __init__.py 中第 9 行 api_key = '' 里填入您的 API 密钥。
这个写的很烂,因为必须找到
__init__.py
而不能在总设置里直接添加。因为我使用了venv虚拟环境,所以包都安装在了~/qqbot/nonebot/lib/python3.10/site-packages
具体要修改
cd ~/qqbot/nonebot/lib/python3.10/site-packages vim ./nonebot_plugin_apex_api_query/__init__.py
运行
nb run
使用,详见文档
查询玩家信息
/bridge [玩家名称]` 、 `/玩家 [玩家名称]`、 `/uid [玩家UID]`、 `/UID [玩家UID]
暂不支持除 PC 外的平台查询。
查询大逃杀地图轮换
/maprotation` 、 `/地图
查询猎杀者信息
/predator` 、 `/猎杀
查询复制器轮换
/crafting` 、 `/制造
每日60s读世界
- [x] 完美运行
安装
nb plugin install nonebot-plugin-read-60s
配置
在nonebot的.env.prod中输入以下内容
#定时发送配置 read_qq_friends=[12345678910] #设定要发送的QQ好友 read_qq_groups=[123456789,123456789,123456789] #设定要发送的群 read_inform_time=[{"HOUR":9,"MINUTE":1}] #在输入时间的时候 不要 以0开头如{"HOUR":06,"MINUTE":08}是错误的
- 设置好时间,运行
提取B站视频封面
- [x] 完美运行
安装
nb plugin install nonebot-plugin-bilicover
使用
指令 说明 提取封面 + 视频链接/av号/bv号 提取对应视频的封面图片
动漫资源获取插件
- [x] 完美运行
安装
nb plugin install nonebot-plugin-animeres
配置参数
CARTOON_PROXY= # 设置代理端口 CARTOON_FORWARD=false # 合并转发的形式发送消息 CARTOON_LENGTH=3 # 每次发送的数量,用-1表示全部取出 CARTOON_FORMANT="{title}\n{magnet}" # 发送的消息格式化 CARTOON_ONESKIP=true # 当只有一个选项时跳过
CARTOON_PROXY
通过
CARTOON_PROXY
参数可以设置代理来加速资源的获取或者获取不到的情况CARTOON_FORWARD
用来发送合并消息
CARTOON_FORMANT
格式化字符串
标签 说明 title 资源名称 tag 资源标签类型 size 资源大小 magnet 种子链接 使用
命令
资源
、动漫资源
参数
资源名称
- 如
资源 孤独摇滚
青年大学习推送(有冲突)
安装
nb plugin install nonebot-plugin-youthstudy
解决冲突
青年大学习与疫情推送冲突
安装后
nonebot-plugin-apscheduler
和nonebot_plugin_covid19_news
中要求冲突,nonebot-plugin-apscheduler
版本被强行降低至0.1.4,重新安装nonebot-plugin-apscheduler
0.2.0pip install nonebot-plugin-apscheduler==0.2.0
- 试运行,无报错
添加配置
- 运行一遍bot,然后关闭
在bot目录的data目录下修改生成的
study_config.json
文件,添加如下配置:"SUPER_USERS": ["超级用户qq号"]
用法
命令 举例 说明 青年大学习/大学习 青年大学习 获取大学习答案 开启/关闭大学习推送 开启大学习推送 在群聊中仅有超级用户能开启推送,私聊任何人都能开启推送,但需要加好友 开启/关闭大学习全局推送 关闭大学习全局推送 关闭全局推送后,所有的群聊、私聊推送任务都会关闭,仅超级用户使用 同意/拒绝+qq号 同意1234567 处理好友请求,仅超级用户使用 同意/拒绝所有好友请求 拒绝所有好友请求 拒绝所有的好友请求,仅超级用户使用 大学习截图 大学习截图 获取主页截图 完成截图 完成截图 获取大学习完成截图 大学习帮助 大学习帮助 获取命令列表
和风天气(X)
安装
nb plugin install nonebot-plugin-heweather
获取和风天气API
访问官网,注册账号,创建免费项目,获取API
编辑配置
vim .env.prod
apikey 必须配置 环境配置
QWEATHER_APIKEY = xxx
api类型 可选配置 环境配置
0 = 普通版(3天天气预报) 1 = 个人开发版(7天天气预报) 2 = 商业版 (7天天气预报)
运行
nb run
无报错
指令
天气+地区 或 地区+天气
涩图插件(X)
安装
nb plugin install nonebot_plugin_setu
解决冲突
青年大学习与色图插件冲突
报错如下:
Installing collected packages: python-socks, tqdm, h11, httpcore, httpx-socks, nonebot-plugin-setu Attempting uninstall: h11 Found existing installation: h11 0.14.0 Uninstalling h11-0.14.0: Successfully uninstalled h11-0.14.0 Attempting uninstall: httpcore Found existing installation: httpcore 0.16.1 Uninstalling httpcore-0.16.1: Successfully uninstalled httpcore-0.16.1 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. nonebot-plugin-youthstudy 1.1.6 requires nonebot-plugin-apscheduler<0.2.0,>=0.1.2, but you have nonebot-plugin-apscheduler 0.2.0 which is incompatible.
两次冲突都是由于青年大学习插件,如果不是必要,可以考虑卸载了。
如果能使用,那就暂时不动。
配置
- 首先运行一遍robot,然后在robot目录的data目录下修改setu_config.json配置文件,然后重启robot
添加配置
在你的setu_config.json文件中修改如下配置:
SUPERUSERS = ["主人的qq号"],可添加多个
PROXIES_HTTP = 'HTTP魔法地址(例如
http://127.0.0.1:7890
),这与你使用的魔法有关'PROXIES_SOCKS = 'SOCKS5魔法地址(例如
socks5://127.0.0.1:10808
),这与你使用的魔法有关'注:若没有魔法或者不会设置可不填
另一个色图插件
安装
2. env 配置项
> 以下配置项均可不填,插件会按照默认值读取
| config | type | default | example | usage |
| ------------------- | ---- | ----------- | ------------------------------------------------------------ | ------------------------------------------------------ |
| setu_disable_wlist | bool | False | setu_disable_wlist = True | 是否禁用白名单检查(极度不推荐禁用)(详见权限控制系统) |
| setu_enable_private | bool | False | setu_enable_private = True | 是否允许未在白名单的私聊会话使用(详见权限控制系统) |
| setu_perm_cfg_path | str | see example | setu_perm_cfg_path = './data/setu4' | 会话(群号或QQ号)启用、r18及其他独立配置项 |
| setu_save | str | None | setu_save = './data/setu4/img' | setu保存到本地的路径, 留空则不保存至本地 |
| setu_regex | str | see example | setu_save = see description[1](https://github.com/Special-Week/nonebot_plugin_setu4#user-content-fn-1-9ac6dd8b7b7add059f61300a936301fa) | setu插件的正则表达式匹配 |
| setu_database_path | str | see example | setu_database_path = see description[2](https://github.com/Special-Week/nonebot_plugin_setu4#user-content-fn-2-9ac6dd8b7b7add059f61300a936301fa) | 更新使用的数据库的地址, 默认为此项目的resource文件夹下 |
| setu_cd* | int | 20 | setu_cd = 30 | setu默认cd[0,+∞], 为0时无cd |
| setu_withdraw_time* | int | 100 | setu_withdraw_time = 30 | setu默认撤回时间[0,100], 为0时不撤回 |
| setu_max_num* | int | 10 | setu_max_num = 20 | setu默认一次性最大数量[1,25] |
| setu_proxy | str | i.pixiv.re | setu_proxy = "i.pixiv.re" | 下载图片的代理(一般我会把可用的代理设置成默认 |
> 带有*标识的设置项可在指定群聊被setu_perm_cfg.json中的内容覆盖
Comments | NOTHING