一个基于Nonebot+官方API的QQ群聊机器人
Find a file
2025-03-15 15:59:41 +08:00
node_modules rebase master 2025-02-20 17:33:58 +08:00
src feat(config): 添加 animetrace搜番 API 配置项在 api_config_example.py 文件中添加了 animetrace 搜番 API 2025-03-15 15:59:41 +08:00
.gitignore rebase master 2025-02-20 17:33:58 +08:00
bot.py feat(bot): 重构定时任务逻辑并优化日志配置 2025-03-03 14:00:40 +08:00
example.env.prod rebase master 2025-02-20 17:33:58 +08:00
package-lock.json rebase master 2025-02-20 17:33:58 +08:00
package.json rebase master 2025-02-20 17:33:58 +08:00
pyproject.toml rebase master 2025-02-20 17:33:58 +08:00
README.md docs(README.md): 更新网易云点歌和B站视频搜索的依赖安装说明 2025-03-04 11:36:01 +08:00
requirements.txt feat(cloud_music): 修复登录状态校验问题 2025-03-03 21:36:06 +08:00

SanYeCao-Nonebot

📚介绍

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

Static Badge Static Badge last-commit Static Badge

🔖亮点

  • 基于Nonebot2,使用QQ官方API,更稳定、高效
  • 多种个性化用法,如天气、每日运势(机器人时尚单品)、点歌、编辑个人待办等,后续功能开发中🔧
  • 使用轻量化数据库sqlite管理数据实现为每位用户单独存取数据🔍
  • 接入第三方大语言模型实现AI交互💡

我是菜比🏳️🏳️纯新手写的python 问题肯定多 ,若有兴趣可以帮忙一起完善功能
QQ交流群710101225

  • ↑sly是代码领域大神 👈 ClovertaTheTrilobita 写的

🌈目前功能:

  • 待办
  • 天气
  • 今日运势
  • 今日塔罗
  • 点歌(网易云 需扫码登录 在 src\music 目录下)
  • 图(返回图库中的图片)
  • 摸摸头
  • 接入语言模型
  • 搜索B站视频
  • 今日老婆
  • 群老婆
  • 鲁迅说
  • 喜报、悲报
  • 查询cf比赛
  • 日报
  • 查询热门轻小说
  • 获取新番信息
  • 绝对色感

待办

  • 功能描述: 用户可以添加、查询和删除个人待办事项。
  • 指令: /待办, /待办查询, /新建待办, /删除待办

天气

  • 功能描述: 提供当前天气信息。
  • 指令: /天气

今日运势

  • 功能描述: 提供用户的今日运势。
  • 指令: /今日运势

今日塔罗

  • 功能描述: 提供一张随机的塔罗牌及其解读。
  • 指令: /今日塔罗

点歌

  • 功能描述: 通过网易云音乐API点歌并将音乐文件以QQ语音的形式发送至群聊。 快点一首你喜欢的歌给群友听吧!
  • 指令: /点歌
  • 注意事项:
    • 使用网易云点歌需要另外安装依赖Node.js 和在目录下输入 npm install crypto-js
    • 初次使用或者提示登录失效需要需扫码登录 (在 src\music 目录下)。

  • 功能描述: 返回图库中的图片。
  • 指令: /图

摸摸头

  • 功能描述: 与机器人进行互动,发送“摸摸头”的回复。
  • 指令: /摸摸头

接入语言模型

  • 功能描述: 使用第三方大语言模型进行交互。
  • 指令: /开启ai, /关闭ai /角色列表,/添加人设, /更新人设, /删除人设, /切换人设, /管理员注册
  • 注意事项:
    • 需要管理员身份认证。
    • AI功能为每个群单独启动默认关闭。

搜索B站视频

  • 功能描述: 通过BV号搜索B站视频并将视频文件发送至群聊。
  • 指令: /BV搜索 <BV号>
  • 注意事项:
    • 🚨注意: 由于QQ的限制官方bot无法发送文件大于10M。
    • 需要安装 Chrome Driver。您需要首先确保自己的电脑安装了Chrome Driver
    • 若没安装过,请参考教程:chromedriver下载与安装方法亲测可用-CSDN博客
    • 程序第一次启动时会获取B站的cookie保存至本地使用selenium库完成下载可能较慢需要稍等一会儿。

今日老婆

  • 功能描述: 提供今日老婆的信息。
  • 指令: /今日老婆
  • 状态: 待开发

群老婆

  • 功能描述: 提供群内成员的老婆信息。
  • 指令: /群老婆

鲁迅说

  • 功能描述: 提供鲁迅的经典语录。
  • 指令: /鲁迅说,/luxun

喜报、悲报

  • 功能描述: 提供喜报和悲报的信息。
  • 指令: /喜报, /悲报

查询cf比赛

  • 功能描述: 通过CodeForces官方API查询近期比赛。
  • 指令: /cf

日报

  • 功能描述: 提供每日的新闻或信息。
  • 指令: /日报

查询热门轻小说

  • 功能描述: 查询当前热门的轻小说。
  • 指令: /轻小说

获取新番信息

  • 功能描述: 获取当季动漫的新番信息和预期新番上线信息。
  • 指令: /本季新番, /新番观察

绝对色感小游戏

  • 功能描述: 返回一个绝对色感小游戏,玩家需要猜测一个颜色,并输入颜色代码。
  • 指令: /绝对色感 初级、中级、高级、超神

🛠️使用

  • 关于Nonebot完整部署使用方法请查看官方文档

⚙️一、环境配置

我们强烈建议您使用虚拟环境若您使用Anaconda发行版请在终端输入

conda create --name chatbot python=3.11

创建conda环境。

之后

conda activate chatbot

以启用您刚刚创建的虚拟环境。

你也可以将上述 chatbot 更换为你喜欢的名字。

🚫注意:机器人支持Static Badge的发行版,推荐使用Static Badge


安装所需依赖。


此机器人运行所需依赖已全部打包至requirements.txt,您只需回到项目根目录

在终端输入:

pip install -r requirements.txt

🎵 网易云点歌依赖安装

1. 安装 Node.js 环境

  • 官网下载:访问 Node.js 官网 下载 LTS 版本(推荐 v18.x+
  • 安装注意
    • 勾选 Add to PATH 选项(自动配置环境变量)
    • 完成安装后重启终端使配置生效 验证 Node.js 版本

2. 验证安装结果

npm -v

3. 安装 crypto-js 库

在项目根目录执行:

npm install crypto-js

使用BV搜索B站视频需要另外安装

谷歌驱动安装:Chrome Driver

安装教程:chromedriver下载与安装方法亲测可用-CSDN博客


✒️二、配置所需文件

在一切开始前,你需要将项目根目录下的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开放平台获取。


📍二、启动机器人

在项目根目录中,找到 bot.py ,在终端输入

python bot.py

或者选择编译器启动,便可以启动机器人。


当然可以!以下是根据您提供的文件内容整理后的项目结构:

🗒️ 三、项目结构

SanYeCao-Nonebot:.
│  .gitignore
│  bot.py
│  chat_bot.db
│  example.env.prod
│  package-lock.json
│  package.json
│  pyproject.toml
│  README.md
│  requirements.txt
│          
├─node_modules
│  └─crypto-js
│              
└─src
    ├─clover_image
    │  └─get_image.py
    │          
    ├─clover_music
    │  ├─cloud_music         
    │  │  ├─cloud_music_cookies.cookie
    │  │  └─qrcode.png
    │  └─netease_music
    │          
    ├─clover_openai
    │  ├─api_config_example.py
    │  └─api_config.py
    │          
    ├─clover_sqlite
    │  ├─data_init      
    │  │  ├─init_tables.py
    │  │  └─...
    │  └─models
    │     ├─models.py
    │     └─...
    │              
    ├─clover_videos
    │  └─billibili
    │     ├─bilibili_search.py
    │     └─...
    │              
    ├─configs
    │  ├─path_config.py
    │  ├─api_config_example.py
    │  └─utils
    │     ├─utils.py
    │     └─...
    │          
    ├─plugins
    │  ├─check.py
    │  ├─todo.py
    │  ├─weather.py
    │  ├─fortune.py
    │  ├─tarot.py
    │  ├─music.py
    │  ├─image.py
    │  ├─petpet.py
    │  ├─openai.py
    │  ├─bilibili.py
    │  ├─news.py
    │  ├─light_novel.py
    │  ├─anime.py
    │  └─...
    │          
    └─resources
        ├─font
        │  ├─font.ttf
        │  └─...
        ├─image
        │  ├─codeforces
        │  │  ├─image1.png
        │  │  └─...
        │  ├─github_repo
        │  │  ├─image2.png
        │  │  └─...
        │  ├─good_bad_news
        │  │  ├─image3.png
        │  │  └─...
        │  ├─MaoYuNa
        │  │  ├─image4.png
        │  │  └─...
        │  ├─rua
        │  │  ├─image5.png
        │  │  └─...
        │  ├─tarot
        │  │  ├─sideTarotImages
        │  │  │  ├─image6.png
        │  │  │  └─...
        │  │  └─TarotImages
        │  │     ├─image7.png
        │  │     └─...
        │  └─who_say
        │     ├─image8.png
        │     └─...
        ├─log
        │  ├─bot.log
        │  └─...
        ├─temp
        │  ├─temp_file1.tmp
        │  └─...
        └─videos
           ├─video1.mp4
           └─...

详细说明

  • 根目录文件

    • .gitignore: 忽略文件配置。
    • bot.py: 机器人启动文件。
    • chat_bot.db: SQLite 数据库文件。
    • example.env.prod: 示例环境配置文件。
    • package-lock.json: npm 依赖锁定文件。
    • package.json: npm 依赖配置文件。
    • pyproject.toml: Python 项目配置文件。
    • README.md: 项目说明文档。
    • requirements.txt: Python 依赖配置文件。
  • node_modules

    • crypto-js: 加密库。
  • src 目录

    • clover_image

      • get_image.py: 图片获取模块。
    • clover_music

      • cloud_music
        • cloud_music_cookies.cookie: 网易云音乐 cookie 文件。
        • qrcode.png: 网易云音乐扫码登录二维码。
      • netease_music
        • 网易云音乐相关模块。
    • clover_openai

      • api_config_example.py: 示例 API 配置文件。
      • api_config.py: 实际 API 配置文件。
    • clover_sqlite

      • data_init
        • init_tables.py: 数据库初始化脚本。
        • 其他初始化脚本。
      • models
        • models.py: 数据库模型定义。
        • 其他模型定义文件。
    • clover_videos

      • bilibili
        • bilibili_search.py: B站视频搜索模块。
        • 其他 B站相关模块。
    • configs

      • path_config.py: 路径配置文件。
      • api_config_example.py: 示例 API 配置文件。
      • utils
        • utils.py: 工具函数。
        • 其他工具函数文件。
    • plugins

      • check.py: 指令检查模块。
      • todo.py: 待办事项模块。
      • weather.py: 天气模块。
      • fortune.py: 运势模块。
      • tarot.py: 塔罗牌模块。
      • music.py: 点歌模块。
      • image.py: 图片模块。
      • petpet.py: 摸摸头模块。
      • openai.py: AI 模块。
      • bilibili.py: B站视频模块。
      • news.py: 日报模块。
      • light_novel.py: 轻小说模块。
      • anime.py: 新番信息模块。
      • 其他插件模块。
    • resources

      • font
        • font.ttf: 字体文件。
        • 其他字体文件。
      • image
        • codeforces
          • image1.png: 图片文件。
          • 其他图片文件。
        • github_repo
          • image2.png: 图片文件。
          • 其他图片文件。
        • good_bad_news
          • image3.png: 图片文件。
          • 其他图片文件。
        • MaoYuNa
          • image4.png: 图片文件。
          • 其他图片文件。
        • rua
          • image5.png: 图片文件。
          • 其他图片文件。
        • tarot
          • sideTarotImages
            • image6.png: 图片文件。
            • 其他图片文件。
          • TarotImages
            • image7.png: 图片文件。
            • 其他图片文件。
        • who_say
          • image8.png: 图片文件。
          • 其他图片文件。
      • log
        • bot.log: 日志文件。
        • 其他日志文件。
      • temp
        • temp_file1.tmp: 临时文件。
        • 其他临时文件。
      • videos
        • video1.mp4: 视频文件。
        • 其他视频文件。

### 📦三、插件 - 插件的目录位于src/plugins中
- 插件的配置文件位于src/configs中
- 基本插件存储在plugins目录中启动即可使用
- 部分插件通过调用其它目录中的方法完成其功能
- 部分插件需要调用第三方API需要在配置文件中填写相关配置

🎈四、更多功能

📲所有指令

机器人的指令列表在src/plugins/check.py中,有如下指令:

menu = ["/重启","/今日运势","/今日塔罗","/图","/日报","/点歌","/摸摸头","/群老婆","/今日老婆", "/开启ai","/关闭ai",
        "/角色列表","/添加人设", "/更新人设", "/删除人设", "/切换人设", "/管理员注册","/待办", "/test","/天气",
        "我喜欢你", "❤", "/待办查询", "/新建待办", "/删除待办" ,"/cf","/B站搜索", "/BV搜索", "/喜报", "/悲报",
        "/luxun","/鲁迅说", "/奶龙", "/repo", "/info", "/menu", "/轻小说","/本季新番","/新番观察"]

输入其它指令机器人会回复听不懂哦。


🎨 功能补充说明

📄 需要替换的文件

首先找到 src/configs/api_config_example.py 文件,并根据需要替换以下配置项:

app_id = "<KEY>"
bot_account = "<KEY>"

"""
图床配置
"""
# SMMS图床相关配置
smms_token = "<KEY>"  # sm.ms图床的token
smms_image_upload_history = "https://sm.ms/api/v2/upload_history"  # sm.ms图床获取上传图片历史API地址

# 聚合图床相关配置
ju_he_token = "<KEY>"  # 聚合图床的token
ju_he_image_list = "https://api.superbed.cn/timeline"  # 聚合图床获取上传图片历史API地址

"""
AI
"""
admin_password = "123456"  # 默认注册管理员密码
# 图灵机器人相关配置
v3url = "https://api.vveai.com/v1/chat/completions"
v3key = "<KEY>"
# DeepSeek相关配置
deepseek_url = "https://api.deepseek.com"
deepseek_key = "<KEY>"

"""
Wenku8账号
"""
wenku8_username = "<user_name>"
wenku8_password = "<passwd>"

"""
多米HTTP代理api
"""
proxy_api = "<KEY>"

将你的 app_idsmms_token 替换为实际值(可以根据自身需求选填),然后将文件重命名为 api_config.py


🎵 使用网易云API实现点歌

若您是初次使用点歌功能,在群聊中 @ 机器人后,机器人会提示:

登录失效,请联系管理员进行登录

此时会在 src/music 目录下生成一张 qrcode.png,您需要使用手机端网易云音乐扫码该二维码,登录您的网易云账号。

注意: 我们使用 cookie 存储用户登录信息,所以会存在登录过期的情况。若 cookie 过期,机器人会提示:

歌曲音频获取失败:登录信息失效。

此时需要 删除 cloud_music_cookies.cookie 并重新扫码登录。


管理员身份认证

介绍

机器人现已更新管理员机制,机器人管理员可以控制是否使用第三方大语言模型进行交互。后续其它功能更新中。

使用
1. 注册为管理员

src/configs/api_config_example.py 内,找到:

admin_password = "123456"  # 默认注册管理员密码

可以更改为自己的密码。

设置好密码后,在 QQ 中 at 你的机器人,格式为:

@<机器人名称> /管理员注册 <密码>

例如,对三叶草进行管理员注册时,假如密码是 123456需要

@三叶草 /管理员注册 123456

注意: 管理员密码请不要泄露给其他人,建议定期更换密码。

注册成为管理员之后,你的 member_openid 将会被保存至 chatbot.db 下的 admin_list 表中。

希望这些优化后的说明能更好地帮助您!如果有任何进一步的需求或修改,请告诉我。