# SanYeCao-Nonebot ## 📚介绍

🌟三叶草bot 2.0🌟
🚀使用Nonebot2+官方API搭建的QQ群聊机器人🚀

Static Badge Static Badge last-commit Static Badge

## 🔖亮点 - 基于[Nonebot2](https://nonebot.dev/),使用[QQ官方API](https://bot.q.qq.com/wiki/),更稳定、高效✨ - 多种个性化用法,如天气、每日运势(~~机器人时尚单品~~)、点歌、编辑个人待办等,后续功能开发中🔧 - 使用轻量化数据库sqlite管理数据,实现为每位用户单独存取数据🔍 - 接入第三方大语言模型,实现AI交互💡
###### 我是菜比🏳️🏳️,纯新手写的python 问题肯定多 ,若有兴趣可以帮忙一起完善功能
###### QQ交流群:[710101225](https://qm.qq.com/q/AQyepzKUJq)
- ↑sly是代码领域大神, 👈 ClovertaTheTrilobita 写的 ## 🌈目前功能: - [x] 待办 - [x] 天气 - [x] 今日运势 - [ ] 今日塔罗 - [x] 点歌(网易云 需扫码登录 在 src\music 目录下)*目前cookie过期检测有bug,出现播放不了需要吧cookie文件删掉* - [x] 图(返回图库中的图片) - [x] 摸摸头 - [x] 接入语言模型 - [ ] 今日老婆 - [ ] 群老婆
## 🛠️使用 - 关于Nonebot完整部署使用方法,请查看[官方文档](https://nonebot.dev/)
### ⚙️一、环境配置 **我们强烈建议您使用虚拟环境**,若您使用Anaconda发行版,请在终端输入 ```powershell conda create --name chatbot python=3.11 ``` 创建conda环境。 或者将上述 *chatbot* 更换为你喜欢的名字。 🚫注意:机器人支持Static Badge的发行版,推荐使用Static Badge
此机器人运行所需依赖已全部打包至***requirements.txt***,您只需回到项目根目录 在终端输入: ```powershell pip install -r requirements.txt ``` 安装所需依赖。
**使用网易云点歌需要另外安装:** ```powershell npm install crypto-js ```
### ✒️二、配置所需文件 在一切开始前,你需要将项目根目录下的[example.env.prod](example.env.prod)文件更名为.env.prod,这是机器人的账号配置文件。 ``` DRIVER=~fastapi+~httpx+~websockets QQ_IS_SANDBOX=false QQ_BOTS=' [ { "id": "xxx", "token": "xxx", "secret": "xxx", "intent": { "c2c_group_at_messages": true }, "use_websocket": true } ] ' ``` 分别在id、token、secret处填写你的机器人ID,机器人Token和Apple Secret,需从[QQ开放平台](https://q.qq.com/)获取。
### 📍二、启动机器人 在项目根目录中,找到 *bot.py* ,在终端输入 ```powershell python bot.by ``` 或者选择编译器启动,便可以启动机器人。
### 🗒️三、项目结构 ``` ├─node_modules │ └─crypto-js │ └─docs └─src ├─ai_chat │ ├─config ├─common_plugins │ ├─cloud_music │ └─img ├─image │ ├─config │ ├─MaoYuNa │ ├─qq_image │ ├─rua │ ├─tarot │ │ ├─sideTarotImages │ │ └─TarotImages ├─music │ ├─cloud_music │ └─netease_music ├─my_sqlite │ ├─data_init | ├─onebot_plugins │ └─config ├─plugins └─qq_plugins ├─data_init ├─test ``` - 基本插件存储在qq_plugins目录中,启动即可使用 - 部分插件通过调用其它目录中的方法完成其功能
### 🎈四、更多功能 #### 📲所有指令 机器人的指令列表在[src/qq_plugins/check.py](src/qq_plugins/check.py)中,有如下指令: ```python menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办", "/开启ai", "/关闭ai", "/cf", "/管理员确认"] ``` 输入其它指令机器人会回复听不懂哦。
#### ☄️待办、摸一摸、今日运势的初始化 机器人中已经配置好数据库初始化的脚本。若您是第一次启动机器人。会在项目根目录下自动创建chat_bot.db(数据库文件) chat_bot.db中包括七张表: ```sql --摸一摸文本数据 qr_touch --摸一摸日志 qr_touch_log --今日运势文本数据 qr_fortune --今日运势日志,存储该用户是否已经查询过运势 qr_fortune_log --用户表 user_list --用户待办表 user_todo_list --管理员表 admin_list --群聊表 group_list ``` 初始化相关脚本存放在 [src/my_sqlite/data_init](src/my_sqlite/data_init) 目录下。 每次启动机器人,程序会自动检查上述8张表是否存在,有表缺失则会在数据库中自动创建对应的表。 对已存在的表不做处理。
#### ⛅从图床发送图片 ##### 介绍: 机器人支持[SMMS图床](https://sm.ms/)、[聚合图床](https://www.superbed.cn/)、从**本地**发送图片。 获取图片的方法统一编写在[src/image/get_image.py](src/image/get_image.py)下。 ##### 使用: 首先找到[src/image/config/image.yaml](src/image/config/image.yaml) ```yaml image: app_id: "" image_local_qq_image_path: "src/image/qq_image" image_local_path: "src/image/MaoYuNa" #SMMS图床相关配置 smms_token: "" # sm.ms图床的token smms_image_upload_history: "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址 #聚合图床相关配置 ju_he_token: "" # 聚合图床的token ju_he_image_list: "https://api.superbed.cn/timeline" # 聚合图床获取上传图片历史API地址 ``` 将你的机器人app_id,smms图床Token和聚合图床Token替换上述\(可以根据自身需求选填) 之后在[get_image.py](src/image/get_image.py)中找到对应的方法,根据自身需求调用。
#### 🎵使用网易云API实现点歌 ##### 介绍: 机器人支持在线点歌,将音乐文件以QQ语音的形式发送至群聊。 快点一首你喜欢的歌给群友听吧!
*PC端QQ由于未知原因可能会出现播放失败的问题,这绝对不是咱的问题,绝对不是!* ##### 使用: 若您是初次使用点歌功能,在群聊中@机器人后,机器人会提示: ``` 登录失效,请联系管理员进行登录 ``` 此时会在[src/music](src/music)目录下生成一张qrcode.png,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。
🚨注意:目前点歌的实现方法为获取请求到的第一首歌,并且自动跳过无法下载(付费)歌曲,若您想点的歌原唱为付费,可能会随机到一首翻唱或其它版本。
#### 💡使用第三方语言模型 打开[src/ai_chat/config/example.chat_ai.yaml](src/ai_chat/config/chat_ai.yaml) ```yaml chat_ai: admin_password: "" # 设置管理员认证密码 v3url: "" v3key: "" deepseek_url: "" deepseek_key: "" ``` 将你自己的deepseek url和api填入,并将文件重命名为chat_ai.yaml。 再设置一个管理员认证密码,详见[下一节](#admin_control)。
#### ✋实现管理员身份认证 ##### 介绍: 机器人现已更新管理员机制,机器人管理员可以控制是否使用第三方大语言模型进行交互。 后续其它功能更新中。 ##### 使用: ###### 1.注册为管理员 在[src/ai_chat/config/example.chat_ai.yaml](src/ai_chat/config/chat_ai.yaml)内,找到 ```yaml admin_password: "" # 设置管理员认证密码 ``` 在上述"\"中填入你的密码。
设置好密码后,在qq中at你的机器人,格式为 ``` @<机器人名称> /管理员注册 <密码> ``` 例如,对三叶草进行管理员注册时,假如密码是1234,需要 ``` @三叶草 /管理员注册 1234 ```
🚨注意:管理员密码请不要泄露给其他人,建议定期更换密码。
注册成为管理员之后,你的member_openid将会被保存至chatbot.db下的admin_list表中。
###### 2.控制语言模型是否可用 在已经是管理员的情况下,你可以对机器人发送 ``` @<机器人名称> /开启ai ``` 实现对AI功能的开关。若此前AI功能处于关闭状态,则机器人会回复 ``` 成功开启语言模型对话功能。一起来聊天吧~ ``` 表示AI功能启动成功。反之则回复 ``` 成功关闭语言模型对话功能。 ``` AI功能为每个群单独启动,默认关闭。
#### 🔆CodeForces比赛查询 机器人通过访问CodeForces官方API实现获取CF近期比赛。 对机器人发送 ``` /cf ``` 可查询近期比赛。