V3 目前已实现:
全局每日限制次数/冷却时间/合并转发/撤回 分模块快捷配置
新增:百度一下,vtuber查询功能
新增七海娜娜米语音
修复词云,新增人生重来
更新插件,修复依赖文件不完整的问题(使用了pipreqs导出项目依赖)
更新README, 删除了错误的描述
更新资源包
新增&更新多个插件并做Haru适配(魔改),增加hoshino原生语音调用支持
目前遗留问题:requirements.txt不完整,部分依赖缺失
更新musedashwiki
计划更新:全局自定义回复语,更生动 ~~moe~~ 的语言库
HoshinoBot-Harubot是基于Go-cqhttp,HoshinoBot的娱乐型QQ机器人
~~因本人已从 pcr AFK,且日常使用会战功能频率不高~~。故本bot未搭载任何会战相关的功能。但本bot仍可与yobot兼容。
目前,harubot仍使用python 3.8.5+
环境和nonebot1
运行
与市面上大多数HoshinoBot及其衍生不同的是,harubot具有以下独特的功能。 - [x] (伪)全局消息合并转发 - [x] (伪)全局消息定时撤回 - [x] 原生Hoshino的语音调用支持 - [x] 风格统一,完善的指令说明 - [x] 统一文件配置参数 - [ ] 自定义适配的功能模块(逐步魔改中) - [ ] 汇总统一自定义bot菜单提示信息 - [ ] ……
感谢Go-cqhttp项目 ,HoshinoBot项目和 众多bot插件 的开发者们!
本README具有时效性,请注意。
本项目正处于频繁快速的更新迭代中,README可能更新不及时
仅提供Windows系统的部署指南。
此处部署步骤可参考我的另一篇部署指南,~~该篇指南已失效,但前期部署的准备步骤是相通的。~~
准备一台Windows系统的服务器(或个人本地电脑)
登录服务器控制台,在防火墙/安全组等界面,放通80,8080,8090端口
以腾讯云为例:
在 云服务器 - 安全组 - 安全组规则 里 添加 入站与出站规则
以阿里云为例:
在 云服务器 - 防火墙 里 添加规则以本地个人电脑为例:(Windows 10)
在 控制面板 - 系统和安全 - Windows Defender 防火墙 - 高级设置 里 添加 入站规则 与 出站规则
建议在用服务器搭建前,先尝试运行在本地个人电脑上。
在任意位置打开任意一个文件夹,点击左上方的查看
-显示/隐藏
页面中,勾选文件扩展名
(可选)使用Bot 的QQ号登录网页QQ安全中心并保持登录。或使用常用QQ(小号)作为bot。~~(即使不执行此步骤,Bot 仍然可正常搭建运行,但部分群聊消息可能会被tx吞,且异地登录有冻结风险)~~
安装下列软件/工具
国内网络可能访问缓慢,这里提供已整合好的压缩文件 (2020/9/14) ~~百度网盘:安装资源整合包~~ ~~提取码:4396~~ 注意:资源包仍可下载,但不保证其中的文件适配当前版本bot(好像我也没更过新啥的,应该能用。)
以上软件/工具可在整合包里的backups/software里找到
在合适的文件目录新建文件夹
并双击打开,点击文件夹左上角的 文件 -> 打开Windows Powershell
,输入以下命令
powershell
git clone https://github.com/Soung2279/haru-bot-setup.git
或者直接下载本分支文件Haru-Bot-Setup-master.zip
在合适的文件目录新建文件夹,建议重命名为Resources
将收集到的 图片/语音资源 放入该文件夹,注意文件目录结构
应当具有以下路径(Windows环境下)
X:\Resources
X:\Resources\img 总的图片资源
X:\Resources\explorion 爆裂魔法语音(历史遗留问题单独存放)
X:\Resources\record 总的语音文件
......
推荐使用本人已经打包好的资源包。
百度网盘:harubot资源2021-9-10.zip 提取码:2279 约3个G,包含了当前Harubot运行所需的所有资源文件。 已含本人自用setu库
(Windows环境下)如果使用资源包,建议解压到 C://Resources
根据本指南部署的bot默认搭载以下模块:
B站爬虫
, Arcaea查询
, 服务器检查
, 大司马发病评论
, 命运2
, 原神相关
, 网抑云
, 表情包生成
, 谜语人翻译
, pcr小游戏
, 在线涩图
, 本地涩图
, 识别图片
等
```python
MODULES_ON = { '300hero', #300英雄出租查询 '5000choyen', #5000兆元(红白字)图片生成器 'advance_check', #服务器增强自检 'aichat', #腾讯智能闲聊(新) 'aircon', #群空调 #'anticoncurrency', #反并发 'arcaea', #Arcaea查询 'asill', #A-SOUL发病小作文 'bandori', #邦邦车站 'bh3_calendar', #崩坏3日历 #'bilidynamicpush', #B站动态 #'bilisearchspider', #B站爬虫 #'botchat', #语言库 'botmanage', #bot功能性管理 'cp', #土味情话 'check', #服务器自检 #'CQTwitter', #推特推送 'dasima', #大司马发病评论 #'destiny2', #命运2 'dice', #骰子 'emergeface', #换脸 #'epixiv', #pixiv搜图 'eqa', #问答 'explosion', #爆裂魔法 'falali', #------------------- 'fishf14', #ff14钓鱼 'flac', #无损音乐 'functions', #小功能合集 'generator', #文章生成器 'Genshin', #原神相关 'groupmaster', #bot群功能相关 'guaihua', #涩涩的翻译 'hedao', #合刀计算 'hiumsentences', #网抑云 'holiday', #假期查询 #'horsenews', #赛马娘新闻 #'hourcall', #整点时报 'image_generate', #表情包生成 'KFCgenshin', #原神二刺螈语音 'maimaiDX', #maimaiDX查询 'majsoul', #雀魂查询 'mem_birthday', #群友生日提醒 'memberguess', #猜群友 #'mikan', #蜜柑推送 'musedash', #MuseDash百科 'music', #点歌 'nbnhhsh', #谜语人翻译 'nmsl', #抽象话转换 'nowtime', #锁屏报时 #'pcr_calendar', #pcr日历 #'pcrbirth', #pcr生日提醒 'pcrmemorygames', #pcr记忆游戏 #'pcrmiddaymusic', #pcr午间音乐 #'pcrsealkiller', #pcr海报杀手 #'pcrwarn', #pcr定时提醒 'picfinder_take', #搜图 'pokemanpcr', #pcr戳一戳 'portune', #pcr运势 'priconne', #pcr小游戏相关 'pulipuli', #反bilibili小程序 #'r6_anti_hacker', #--------------------- 'revgif', #倒放gif 'setu', #本地涩图 'setu_renew', #在线涩图 'shaojo', #今天是什么少女 #'snitchgenerator', #Nokia内鬼图 'steam', #steam查询 'tarot', #塔罗牌占卜 'tracemoe', #识别番剧截图 'translate', #翻译 'voiceguess', #猜语音 'weather', #天气查询 'whattoeat', #今天吃什么 #'wordcloud', #词云 'zhihu', #知乎日报 #'test', } ```
访问go-cqhttp的releases,找到v1.0.0-beta4下的Assets里go-cqhttp_windows_amd64.exe,点击下载。(推荐)
或直接使用网盘资源
百度网盘:go-cqhttp.exe 提取码:2279
同时,下载ffmpeg放到go-cqhttp目录。
百度网盘:ffmpeg 提取码:2279
之后运行一次go-cqhttp.exe,弹出窗口即可,关闭窗口,稍后进行配置。
在X:\haru-bot-setup-master\
目录下~~或者你自己放置的bot目录~~,点击文件夹左上角的 文件 -> 打开Windows Powershell
,输入以下命令
python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
或者直接运行双击安装依赖.bat
,若此过程中有报错信息,请重新运行一次,若仍有报错,请复制报错信息到搜索引擎获得帮助
修改以下文件的配置
hoshino/config/_bot_.py
```python
PORT = 8090 # 建议设置为8090
HOST = '127.0.0.1' # 本地部署使用此条配置
SUPERUSERS = [2279134404] # 填写超级用户(你)的QQ号,
NICKNAME = ('小晴','野中晴','haru','@756160433') # 设置机器人的呢称,呼叫昵称等同于@bot,请使用 元组 tuple
进行配置
RES_DIR = r'C:/Resources/'
lolicon_api = '' # 填写api(因Lolicon更新,无需使用apikey,可不填) acggov_api = '' # 填写api saucenao_api = '' # 填写api aichat_ID = '' # 填写api aichat_KEY = '' # 填写api
FORWARD_MSG_EXCHANGE = 1 #全局消息转发。1为启用,0为禁用 FORWARD_MSG_NAME = 'bot主人:2279134404' #转发消息显示的呢称 FORWARD_MSG_UID = 756160433 #转发消息使用的qq画像(头像)
RECALL_MSG_SET = 1 #全局定时撤回,1为启用,0为禁用,推荐启用规避风控 RECALL_MSG_TIME = 30 #撤回等待时长(单位s)
```
关于API,可参考:
SauceNAO识别图片的API申请
在go-cqhttp目录中的config.yml文件中进行配置
```yaml account: # 账号相关 uin: 1233456 # QQ账号 password: '' # 密码为空时使用扫码登录
servers: - ws-reverse: # 是否禁用当前反向WS服务 disabled: false # 反向WS Universal 地址 # 注意 设置了此项地址后下面两项将会被忽略 universal: ws://127.0.0.1:8090/ws/ # 反向WS API 地址 api: ws://your_websocket_api.server # 反向WS Event 地址 event: ws://your_websocket_event.server # 重连间隔 单位毫秒 reconnect-interval: 3000 ```
在haru-bot-setup文件夹中,运行双击运行HoshinoBot.bat
启动hoshinobot
在go-cqhttp文件夹中,使用cmd或powershell启动go-cqhttp.exe
(直接双击启动也可)
若成功运行,窗口将出现如下结果:
powershell
[2021-07-14 04:51:28,370 nonebot] INFO: Running on 127.0.0.1:8090
Running on http://127.0.0.1:8090 (CTRL + C to quit)
[2021-07-14 04:51:28,380 nonebot] INFO: Scheduler started
[2021-07-14 04:51:28,381] Running on http://127.0.0.1:8090 (CTRL + C to quit)
[2021-07-14 04:51:32,810] 127.0.0.1:4741 GET /ws/ 1.1 101 - 541
[2021-07-14 04:51:32] [INFO]: 开始尝试连接到反向WebSocket Universal服务器: ws://127.0.0.1:8090/ws/ [2021-07-14 04:51:33] [INFO]: 检查更新完成. 当前已运行最新版本. ```
若该过程中hoshinobot窗口闪退,则请点击文件夹左上角的 文件 -> 打开Windows Powershell
,输入以下命令
python
py run.py
查看红色报错信息。(大多数时候是某依赖未安装。请复制粘贴报错信息到百度)
在未修改启用的模块前提下(即config.py里的MODULES_ON无变动)
在bot所在群聊中发送:
@bot 自检
@bot 进阶检查
@bot 服务器检查
@bot bot状态
若有回应,则说明bot已搭建完成。
此时请发送lssv
来确认当前群启用的服务。
为了实现 全局消息合并转发 和 全局消息定时撤回,bot的最终输出与原本hoshinobot有所不同。请看下面示范:
HoshinoBot原版 ```python @sv.on_fullmatch('老公') async def chat_laogong(bot, ev): await bot.send(ev, '人不能,至少不应该', at_sender=True)
```
Harubot ```python @sv.on_fullmatch('老公') async def function_a(bot, ev): if forward_msg_exchange == 1: # 合并判断 data_all = [] msg1 = '人不能,至少不应该' data1 = { "type": "node", "data": { "name": f"{forward_msg_name}", "uin": f"{forward_msg_uid}", "content": msg1 } } if recall_msg_set == 1: #撤回判断 recall = await bot.send_group_forward_msg(group_id=ev['group_id'], messages=data_all) notice = await bot.send(ev, f"将在{RECALL_MSG_TIME}s后将撤回消息")
await asyncio.sleep(RECALL_MSG_TIME)
await bot.delete_msg(message_id=recall['message_id'])
await bot.delete_msg(message_id=notice['message_id'])
else:
await bot.send_group_forward_msg(group_id=ev['group_id'], messages=data_all)
else:
if recall_msg_set == 1: #撤回判断
recall_1 = await bot.send(ev, '人不能,至少不应该')
notice = await bot.send(ev, f"将在{RECALL_MSG_TIME}s后将撤回消息")
await asyncio.sleep(RECALL_MSG_TIME)
await bot.delete_msg(message_id=recall_1['message_id'])
await bot.delete_msg(message_id=notice['message_id'])
else:
await bot.send(ev, '人不能,至少不应该')
```
在原版中,回复将直接原样输出,而harubot中首先判断是否合并转发,若为是,先转换为合并消息,然后判断是否撤回。
但是,并不是所有的输出消息都需要转发,或者不适合用转发。依据此,harubot修改了大部分长消息和可能有风险的消息最终的输出判断,使其可以控制是否转发和撤回。但对于短消息,单图等不适合用的输出则未做改动。(~~所以是伪全局~~)
可以自行斟酌。若不需要此功能,请自行找到最终输出的地方进行还原。
diff
+ await bot.send(ev, '人不能,至少不应该')
- if forward_msg_exchange == 1:
- if recall_msg_set == 1:
- recall = await bot.send_group_forward_msg(group_id=ev['group_id'], messages=data_all)
- …………
此外,有些插件自带转发和撤回功能(例如贵族决斗pcr_duel)。在harubot中对贵族决斗进行了适配处理,harubot的贵族决斗转发撤回设置受全局参数控制。
全局参数设置位置:
hoshino/config/_bot_.py
```python
FORWARD_MSG_EXCHANGE = 1 #1为启用,0为禁用,推荐启用规避风控 FORWARD_MSG_NAME = 'harubot' #转发消息显示的呢称 FORWARD_MSG_UID = 123456 #转发消息使用的qq画像(头像)
RECALL_MSG_SET = 1 #1为启用,0为禁用,推荐启用规避风控 RECALL_MSG_TIME = 30 #撤回等待时长(单位s) ```
harubot本质是HoshinoBot的魔改版,所以适用于HoshinoBot的插件均可以在harubot上使用。
若是需要引入 全局消息合并转发 和 全局消息定时撤回,则需要对新装插件进行修改。
首先需引入参数
python
import asyncio #撤回用
import hoshino
from hoshino import config #读取配置文件
在bot最终输出的地方添加
diff
- await bot.send(ev, '人不能,至少不应该')
+ if forward_msg_exchange == 1:
+ if recall_msg_set == 1:
+ recall = await bot.send_group_forward_msg(group_id=ev['group_id'], messages=data_all)
+ …………
bot最终输出的地方可以简单通过查找bot.send
,bot.finish
等查看。具体请参考消息触发器
完整的添加代码可在模板文件hoshino/modules/_example_/_example_.py
中查看。
======
如果需要使用增强的原生Hoshino语音调用功能,请将您的语音文件放置在 资源库文件夹/record/
路径下,资源库文件夹填写位置:hoshino/config/_bot_.py
的 RES_DIR
以下是一个简单例子:
```python import hoshino from hoshino import R
xxx = R.rec(xxx/xxx.mp3).cqcode ... await bot.send(ev, xxx) ```
具体可前往 HoshinoBot功能性增强-语音调用支持
======
在 Harubot 中,部分地方使用 “NICKNAME[0]” 来获取bot呢称,若您的bot呢称数据结构不为 元组 或 字典,则可能导致无法调用,请自行于 hoshino/config/_bot_.py
修改 NICKNAME
为元组形式。
以下是一个简单例子:
python
NICKNAME = ('小晴','野中晴','haru','@756160433') # 机器人的昵称。呼叫昵称等同于@bot,可用元组配置多个昵称
若Bot 运行正常,可考虑开启更多模块以丰富bot的功能。
在 HoshinoBot/hoshino/config/_bot_.py
文件里,将需要开启的模块前面的"#井号
"删除。
若想给Bot 添加更多功能,可以自行收集插件放入 HoshinoBot/hoshino/modules
文件夹中。(请仔细阅读该插件的说明文档,某些插件的添加方式有所不同)
若Bot 添加群过多,需要引入授权系统,请启用authMS插件。
harubot的孪生bot: 早坂爱bot,惠惠bot,贝拉bot ~~均已停用~~
~~harubot目前正在招收试用人群,可在q群1121815503向群主申请免费试用。~~
made by Soung2279
RES_DIR
是否设置正确,目录Resources
下该图片/语音是否存在(按下Enter键)
,查看日志是否有反应。若日志仍无反应,请查看配置文件是否正确配置双击安装依赖
priv.SUPERUSER
,群主为仅次于主人的第二权限priv.OWNER
,群管理为更次一等的权限priv.ADMIN
,群员为最低权限priv.NORMAL
。(黑/白名单不考虑在内) 可以在_bot_.py
里设定多个主人HoshinoBot:https://github.com/Ice-Cirno/HoshinoBot 作者:@Ice-Cirno
go-cqhttp:https://github.com/Mrs4s/go-cqhttp 作者:@Mrs4s
干炸里脊资源站: https://redive.estertion.win/
Pcrbot - pcrbot相关仓库: https://www.pcrbot.com/
布置好后一切正常,只在modules文件夹内删掉了不用的插件,bot.py里也同步删掉了那些名字,但是HoshinoBot经常自动停止,go-cqhttp倒是没问题,这是什么原因
ERROR: Could not find a version that satisfies the requirement dataclasses==0.8 (from versions: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6) ERROR: No matching distribution found for dataclasses==0.8 这个怎么解决啊,完全搜不到解决方法,只看到说是Python3.6的,3.6+版本以后内置的都是0.6
就是左右斜杠的事情,文件配置填写的图片路径到底是左斜杠/还是右斜杠\?
然后我看代码跑进程是一直在下载图片,但是我检测文件却没发现有图片改动的痕迹
试运行 在haru-bot-setup文件夹中,运行双击运行HoshinoBot.bat启动hoshinobot
在go-cqhttp文件夹中,使用cmd或powershell启动go-cqhttp.exe (直接双击启动也可)
————————↑在这一步里出现了问题———————— ————————显示如下—————————————— 'go-cqhttp.exe' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
C:\Users\Administrator\Desktop\Bot
另外手动启动了go-cqhttp_windows_amd64.exe之后,在测试群里发送命令毫无反应。
qqbot hoshinobot go-cqhttp