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具有以下独特的功能。
感谢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
,输入以下命令
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小游戏
, 在线涩图
, 本地涩图
, 识别图片
等
# 启用的模块
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
,输入以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
或者直接运行双击安装依赖.bat
,若此过程中有报错信息,请重新运行一次,若仍有报错,请复制报错信息到搜索引擎获得帮助
修改以下文件的配置
hoshino/config/_bot_.py
PORT = 8090 # 建议设置为8090
HOST = '127.0.0.1' # 本地部署使用此条配置
SUPERUSERS = [2279134404] # 填写超级用户(你)的QQ号,
NICKNAME = ('小晴','野中晴','haru','@756160433') # 设置机器人的呢称,呼叫昵称等同于@bot,请使用 ``元组 tuple`` 进行配置
# 资源库文件夹,需可读可写,windows下注意反斜杠转义,注意最后一根斜杠
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文件中进行配置
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
(直接双击启动也可)
若成功运行,窗口将出现如下结果:
[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:24] [INFO]: Protocol -> connect to server: 193.112.231.60:8080
[2021-07-14 04:51:27] [INFO]: 收到服务器地址更新通知, 将在下一次重连时应用.
[2021-07-14 04:51:31] [INFO]: 登录成功 欢迎使用: 野中晴
[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原版
@sv.on_fullmatch('老公')
async def chat_laogong(bot, ev):
await bot.send(ev, '人不能,至少不应该', at_sender=True)
# 效果:当发送“老公”时,直接回复“人不能,至少不应该”
Harubot
@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修改了大部分长消息和可能有风险的消息最终的输出判断,使其可以控制是否转发和撤回。但对于短消息,单图等不适合用的输出则未做改动。(所以是伪全局)
可以自行斟酌。若不需要此功能,请自行找到最终输出的地方进行还原。
+ 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
# 全局配置相关
# - 是否启用全局消息合并转发(部分短消息不受影响)
### 本来是想做所有消息不论长短都可以设定转发的,但是要改的地方太多了(我懒)+有些消息很短根本没必要转发,所以这里控制的只有部分我认为需要用到转发的长消息或者图文= =
### 有一些功能的转发不受此处控制,需单独设置,例如[本地色图]等。
FORWARD_MSG_EXCHANGE = 1 #1为启用,0为禁用,推荐启用规避风控
FORWARD_MSG_NAME = 'harubot' #转发消息显示的呢称
FORWARD_MSG_UID = 123456 #转发消息使用的qq画像(头像)
# - 是否启用全局风险消息(带大量数字消息,带敏感信息消息,部分图片等)撤回,1为启用,0为禁用[此处不控制本地涩图"setu"的撤回,"setu"的撤回需单独设置]
### 本来是想做所有消息不论长短都可以定时撤回的,但是要改的地方太多了(我懒)+有些消息例如帮助指令信息没必要撤回,还有考虑到消息合并和撤回要配合一起使用。所以这里控制的只有部分我认为需要用到撤回的长消息或者图文= =
### 有一些功能的撤回不受此处控制,需单独设置,例如[本地色图]等。
RECALL_MSG_SET = 1 #1为启用,0为禁用,推荐启用规避风控
RECALL_MSG_TIME = 30 #撤回等待时长(单位s)
harubot本质是HoshinoBot的魔改版,所以适用于HoshinoBot的插件均可以在harubot上使用。
若是需要引入 全局消息合并转发 和 全局消息定时撤回,则需要对新装插件进行修改。
首先需引入参数
import asyncio #撤回用
import hoshino
from hoshino import config #读取配置文件
在bot最终输出的地方添加
- 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
以下是一个简单例子:
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
为元组形式。
以下是一个简单例子:
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/