# SanYeCao-Nonebot ## 📚介绍

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

Static Badge Static Badge last-commitStatic Badge

## 🔖亮点 - 基于[Nonebot2](https://nonebot.dev/),使用[QQ官方API](https://bot.q.qq.com/wiki/),更稳定、高效✨ - 多种个性化用法,如天气、每日运势(~~机器人时尚单品~~)、点歌、编辑个人待办等,后续功能开发中🔧 - 使用轻量化数据库sqlite管理数据,实现为每位用户单独存取数据🔍
## 🌈目前功能: - [x] 待办 - [x] 天气 - [x] 今日运势 - [x] 点歌(网易云 需扫码登录 在 src\music 目录下)*PC端 QQ可能播放不出来 原因不明* - [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": false } ] ' ``` 分别在id、token、secret处填写你的机器人ID,机器人Token和Apple Secret,需从[QQ开放平台](https://q.qq.com/)获取。
### 📍二、启动机器人 在项目根目录中,找到 *bot.py* ,在终端输入 ```powershell python bot.by ``` 或者选择编译器启动,便可以启动机器人。
### 🗒️三、项目结构 ``` └─src ├─common_plugins │ ├─cloud_music │ │ │ └─img │ ├─image │ │ get_image.py │ │ │ ├─config │ │ image.yaml │ │ │ ├─MaoYuNa │ │ │ ├─tarot │ ├─sideTarotImages │ │ │ └─TarotImages │ ├─music │ │ qrcode.png │ │ │ ├─cloud_music │ │ agent.py │ │ cloud_music.py │ │ jsdm.js │ │ │ └─netease_music | ├─my_sqlite │ │ chat_bot.db │ │ fortune_by_sqlite.py │ │ todo_by_sqlite.py │ │ touch_by_sqlite.py │ │ │ ├─data_init │ chat_bot.db │ data_init.py │ fortune_init_data.py │ todo_init.py │ touch_init_data.py │ │ ├─onebot_plugins │ │ tarot.py │ │ test.py │ │ welcome.py │ │ │ └─config │ controller.yaml │ ├─plugins │ └─qq_plugins │ check.py │ cloudMusic.py │ fortune.py │ image.py │ today_wife.py │ touch.py │ to_do.py │ weather.py │ ├─data_init │ ├─test a-testMain.py ``` - 基本插件存储在qq_plugins目录中,启动即可使用 - 部分插件通过调用其它目录中的方法完成其功能
### 🎈四、更多功能 #### 📲所有指令 机器人的指令列表在[src/qq_plugins/check.py](src/qq_plugins/check.py)中,有如下指令: ```python menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办"] ``` 输入其它指令机器人会回复听不懂哦。
#### ☄️待办、摸一摸、今日运势的初始化 机器人中已经配置好数据库初始化的脚本。若您是第一次启动机器人。会在项目根目录下自动创建chat_bot.db(数据库文件) chat_bot.db中包括六张表: ```sql --摸一摸文本数据 qr_touch --摸一摸日志 qr_touch_log --今日运势文本数据 qr_fortune --今日运势日志,存储该用户是否已经查询过运势 qr_fortune_log --用户列表 user_list --用户待办表 user_todo_list ``` 初始化相关脚本存放在 [src/my_sqlite/data_init](src/my_sqlite/data_init) 目录下。 每次启动机器人,程序会自动检查上述六张表是否存在,有表缺失则会在数据库中自动创建对应的表。 对已存在的表不做处理。
#### ⛅从图床发送图片 ##### 介绍: 机器人支持[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,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。
**🚨注意:**目前点歌的实现方法为获取请求到的第一首歌,并且自动跳过无法下载(付费)歌曲,若您想点的歌原唱为付费,可能会随机到一首翻唱或其它版本。