# QQ-Chatting-507-bot
**Repository Path**: ender507/QQ-Chatting-507-bot
## Basic Information
- **Project Name**: QQ-Chatting-507-bot
- **Description**: 基于nonebot和go-cqhttp的QQ聊天机器人,含有部分自己写的插件和别人开源的插件
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-06-22
- **Last Updated**: 2022-07-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# QQ聊天机器人:507bot
> 基于[nonebot](https://github.com/nonebot/nonebot)和[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)的QQ聊天机器人,含有部分自己写的插件和别人开源的插件。这是个私人图一乐的项目,不保证代码的可读性和结构合理性,没有什么注释,只能说是我自己看得懂就行。
## 现有插件
plugin(第一代插件,对应版本:v0.3~v0.9)
|插件名称|插件功能|插件来源|特殊说明|
|:-:|:-:|:-:|:-:|
|arknight_gacha|模拟明日方舟十连抽卡(卡池很久没更新了)|自己写的|只支持所有角色均无up的情况|
|baidu|让我帮你百度一下|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|bilibili|推送b站主播的动态(含视频和直播)|[QQBot_bilibili](https://github.com/wxz97121/QQBot_bilibili)|见原作者|
|cmd|roll点、**特定消息自动回复(bot的主要机能)**,含开关|自己写的|为了符合群友的xp设置的内容,图一乐。图片回复需要在本地保存了相应图片|
|couplet|对对联|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|emj|抽象话转换器:将中文文本转换为抽象话|自己写的,抽象转换词典来自[chouxianghua](https://github.com/chenxuuu/chouxianghua)|同文件夹下的`emojiDef.py`定义了汉字转拼音和拼音转抽象话的字典。因为文件太长所以分了另一个文件放|
|lyric|爬取并发送网易云音乐的歌词|自己写的|使用了网易云接口(包括歌曲搜索接口、歌词获取接口)|
|record|发送语言消息的自动回复|自己写的|都是lulu~~和雾妹~~的语音|
|star|查看不同星座的当日运势|csdn一篇[博客](https://blog.csdn.net/rain_web/article/details/70767279)抄的,自己改成了机器人的接口|见原博主|
|super|管理员功能(含私货)|自己写的|除了强制关闭外基本没用,黑名单和模块管理功能分散在各个模块里|
|teach|让群友教bot在群友特定发言下进行特定回复|自己写的|写入本地文本文件而不是直接加入功能模块,防止bot被群友玩恶堕。有意思的回复自己手动加就行|
|time|提取自然语言中的时间并转换成标准时间格式发送|模块是自己写的,功能实现的库来自[Time_NLP](https://github.com/zhanzecheng/Time_NLP)|见原作者|
|translate|翻译,中译英或其他语种翻译成中文|自己写的|用了有道翻译的接口并爬取结果|
|weather|依据省份和城市查看实时天气|自己写的|使用中央气象台的接口(含省份代码接口、城市代码接口、天气查询接口)|
|NLP|自然语言处理,简单的机器人聊天|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|wordViewer|背单词,词库为考研5500单词(大概),共有三种模式。使用指令'单词'呼出帮助菜单|自己写的|同文件夹下的`words.py`包含所有的单词。单词来源于[这个网站](https://image.kuakao.com/2019/1210/20191210103558276.pdf)|
plugin2(第二代插件,第一代的重构和后续更新,对应版本v1.0~)
|插件名称|插件功能|插件来源|特殊说明|
|:-:|:-:|:-:|:-:|
|baidu|让我帮你百度一下|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|roll|roll点|自己写的|可以设定最大值的随机骰子|
|couplet|对对联|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|emj|抽象话转换器:将中文文本转换为抽象话|自己写的,抽象转换词典来自[chouxianghua](https://github.com/chenxuuu/chouxianghua)|同文件夹下的`emojiDef.py`定义了汉字转拼音和拼音转抽象话的字典。因为文件太长所以分了另一个文件放|
|lyric|爬取并发送网易云音乐的歌词|自己写的|使用了网易云接口(包括歌曲搜索接口、歌词获取接口)|
|record|发送语言消息的自动回复|自己写的|都是lulu~~和雾妹~~的语音|
|replyer|文本和图片的自动回复|自己写的|自动回复,bot的主要机能|
|speak|文字转语音|自己写的|只是单纯的调用CQ码而已|
|star|查看不同星座的当日运势|csdn一篇[博客](https://blog.csdn.net/rain_web/article/details/70767279)抄的,自己改成了机器人的接口|见原博主|
|super|管理员功能|自己写的|强制关闭、黑名单、模块管理|
|teach|让群友教bot在群友特定发言下进行特定回复|自己写的|写入本地文本文件而不是直接加入功能模块,防止bot被群友玩恶堕。有意思的回复自己手动加就行|
|translate|翻译,中译英或其他语种翻译成中文|自己写的|用了有道翻译的接口并爬取结果|
|weather|依据省份和城市查看实时天气|自己写的|使用中央气象台的接口(含省份代码接口、城市代码接口、天气查询接口)|
|NLP|自然语言处理,简单的机器人聊天|[DeltaBot](https://github.com/233a344a455/DeltaBot)|见原作者|
|wordViewer|背单词,词库为考研5500单词(大概),共有三种模式。使用指令'单词'呼出帮助菜单|自己写的|同文件夹下的`words.py`包含所有的单词。单词来源于[这个网站](https://image.kuakao.com/2019/1210/20191210103558276.pdf)|
## TODO LIST
展开/收回
### v0.3版本立下的flag
- [ ] ~~能用QQ消息执行的重启功能~~(v0.4版本后插件启用禁用不需要重启就能生效,因此重启功能实装取消)
- [x] 能够统一管理、能用QQ消息执行的黑名单(v0.4更新实装)
- [x] 能用QQ消息执行的插件启用/禁用功能(v0.4更新实装)
- [x] 小游戏(v0.3版本更新实装,指对联)
- [x] 抽卡模拟器(v0.5版本更新实装,目前只支持明日方舟)
- [ ] ~~翻译功能可以指定语种~~(v0.5更新时尝试做了,但是发包的时候改json的语言选项并没有直接影响翻译结果原因未知。总归技术力不够做不出来,也不想做了,摸了)
### v0.6版本立下的flag
下面这几条都只是有点想法,并不是像之前的todo list内容一样已经有做的打算了。所以大概率是摸了
- [ ] ~~签到系统,以及可能可以连携相关的经验、等级、虚拟币、虚拟币商城等系统~~
- [ ] ~~好感度系统,不同QQ账号可以随好感度逐渐解锁新的bot对话或申请使用自己专属的聊天回复~~
经典三分钟热度,不想做了————v0.7更新留
---------------------
## 更新日志
v0.3
v0.3版本下首次开源
v0.4
- 新增模块管理功能:模块名+启用/禁用可以进行模块开关而不需要重启整个bot
- 新增黑名单功能:模块名+黑名单/出狱+QQ号可以对用户进行特定模块使用的禁用和解除
- 删除了原有模块管理的文件操作功能(原本的模块管理功能由py模块文件的删除和复制实现,需要重启bot才能应用更新)
- 新增了翻译的屏蔽词
- 天气指令优化:除了原来的天气+省份+城市之外,还支持天气+直辖市和天气+直辖市+具体地名的传参方式
v0.5
- 新增arknight_gacha模块,模拟明日方舟十连抽卡(卡池更新至画中人)
- 唤醒507bot由命令形式`@on_command`改成自然语言形式`@on_natural_language`(现在只要提及507bot就能唤醒)
- 回复关键词"雾宝"和"雾妹"时加入过滤选项,防止和雾宝bot进行无限聊天
- 发送歌词设置了最大上限(被群友发的圆周率之歌搞了一手
- 天气模块微调:查询台湾省天气时有特殊提示(台湾天气用现在实装的api查询不出来,更新前会导致查询无回复)
- 修正天气回复文本错误:原本api返回值的`rain`被我误认为下雨概率,经核实后改为降雨等级
- 新增部分无关紧要的自动回复
v0.6
- 现在能回复录音了
- 新增time模块,用于提取自然语言中的时间点并转换为标准时间
- 新增record模块,用于自动回复语音消息
- “来点怪歌”、“来点鬼叫”可以随机发送lulu的相关语音(需要本地文件)
- “lulu语录”、“るる语录”可以随机发送lulu的经典语录(同时删除了“lulu”和“るる”的自动回复防止冲突)
- 新增部分自动回复,对部分原有自动回复的内容进行了修改,部分触发过于频繁的回复改为几率触发
- **原有星座占卜的api似乎被关闭了,现在访问会超时,但是star模块还没有改动**,我大概率是准备摸了
v0.7
- 新增自动回复最高速度,定义在cmd插件中。现在机器人三秒内最多自动回复一次(只有聊天自动回复受限,用户正常调用的bot机能不受限制)
- 新增baidu模块,输入百度后接关键词可以对相关内容进行百度,本质是“让我帮你百度一下”http://tool.mkblog.cn/lmbtfy 的接口
- 新增emj模块,输入抽象后接字符串,如果有对应的话,可以将字符串中的中文汉字转换成emoji文字
v0.8
- 修改了星座运势的api,现在**星座运势功能又能够使用了**
- 新增了nlp模块,实现简单聊天功能,默认使用茉莉机器人的接口,在用户调用指令nlp时必然触发,一般聊天时按概率触发。该模块暂未添加模块禁用和黑名单以及闭嘴功能。
- 新增关注功能,可以通过输入关注+b站uid从而查询主播,写入本地文件等待机器人管理员审核
- 删去了nonebot的内置指令(echo指令居然被群友凭空试出来了)
- 管理员指令'说'的重复内容中,将方括号重新解码,从而能够通过说指令发送图片、语音等特殊消息。如:'说 [CQ:record,file=biezou.amr]'可以回复语音(需要存在本地语音文件)
- 新增自动消息回复,如'今天吃啥方便面'、'二次元'等,并把很多消息的固定回复内容改成了随机回复内容;删掉了部分聊天时触发过于频繁的自动回复
v0.9
- 关闭了完全用不上的时间自然语言插件,即`time`插件(但是我在github里保留下来了)
- 新增背单词插件`wordViewer`,使用命令"单词"呼出帮助菜单,词库为考研英语。包括以下三种功能:
- 给出英文回答中文
- 给出中文回答英文
- 给出中文和缺省部分字母的英文,回答英文
- 为了维持上述单词插件的稳定性,停用了bilibili关注模块(这个模块一周会有那么一两次完全把程序卡死,不知道原因,也不知道怎么修这个bug)
- 从`go-http`学到了`[CQ:tts]`的玩法,新增`speak`模块,将**文字**转**语音**(而不是语音转文字!)
- 新增和修改部分简单的自动回复
v1.0
507bot更新到1.0版本啦!为什么是v1.0而不是v0.10呢?**507bot在本次更新中实现了大量的代码重构,之后模块更新统一在本库新增的plugins2文件夹下进行**,重构前的代码保存在plugin文件夹下。重构内容包括但不限于:
- 在根目录下使用`config.npy`统一管理模块,实现模块间的通信。`genConfig.py`用于生成上述文件,如果根目录不存在该文件,运行`run.py`时将会创建并初始化
- 模块开关终于能用一个单独的模块统一管理了,原本每个模块内都有一段冗长且相似的代码控制自身的开关
- 黑名单终于能统一了,原本每个模块有一个单独的黑名单
- 管理员权限终于不受NLP模块的限制使得权限需求消失了,老版本的时候如果管理员指令用NLP方法调用,则普通用户也能使用(这是nonebot自身的问题,我只是在代码实现中避免了该问题的出现)
- 极大简化了原本各个模块的代码(比如自动回复不再是每个单独做成一条指令了、黑名单和模块开关检查简化了等等)
下面是正常更新内容:
- 背单词模块将文件存取改成了二进制文件,且现在会区分群聊模式和私聊模式(沙雕群友私聊bot背单词没关,去水群的时候被bot背刺了)
- 背单词模块会每次被调用时会获取时间戳,如果太久没有继续背单词则bot会自行退出该用户的单词模式
- 去掉了没什么用的模块,修了些无关紧要的bug
- 新增和删除部分自动回复
------------------
## 严重Bug历史记录
展开/收回
### 2021.3.20:和其他机器人复读了起来(v0.6版本复读刷屏bug)
群里的机器人都是大家自己搭建的,架构和语言都不一样,这波是八仙过海。一共有五个机器人,但貌似只有我是用python写的==
引起这次灾难的本质是507bot会对含有特定关键词的内容进行回复,如对图片中的“mc”进行回复,而群里其他的机器人能够在一句话被复读一定次数后,概率进行复读,因此产生了刷屏现象:
最终导致了严重的后果:
在此基础上,更新的v0.7版本加入了回复速度阈值:调用自动回复的函数时获取当前的时间戳,如果与上次自动回复时的时间戳相差小于3秒就放弃回复。也就是说,自动回复的最快速度是三秒一次。虽然是这么说,但是我就是怕出现无限复读的情况,所以之前就给507bot实装过“闭嘴”功能用于临时停用自动回复,群友还玩这个功能玩了一阵子。一到关键时候一个都想不起来还有这一手。我麻了
### 2021.3.26:被封号了
可能是每天重复发送相同内容?或者是前一晚在测试bilibili模块关注多个主播(近20个)导致的?该小心点了。号申诉后秒解封了。
### 2021.3.28:b站动态推送错误
新增关注功能后群友们相互关注,导致推送动态的时候会报错从而导致大片的动态检测失效。经过反复测试(指不同账号在b站发动态)发现,如果关注列表中存在**没有发过任何动态**的账号,在检测该账号的动态更新时就会报错,从而使得关注列表中这个号和之后的号都不会被检测更新。这是bilibili模块的bug。想了想要不要加个try-except,最后还是算了。没有发过动态之后也不会发的人,关注了干嘛
-----------
## 其他说明
更新完全随缘,目标只为图一乐
