QBot

浅尝 qqBot

使用的是 UV(python3.12)+nonebot2+Lagrange.OneBot 框架,实现了一个简单的 qqBot。

全手工配置

有用 uv 所以使用 nonebot2 的脚手架工具的话有点麻烦,需要嵌套一层 venv,而且不能使用nb pip ...所以就手动配置了。

File Tree

通常来说是这样去配置一个qqbot的

D:.
| .env              # nonebot 主配置文件
| .env.dev          # nonebot 开发配置文件
| .env.prod         # nonebot 生产配置文件 
| .python-version   # uv管理 python 版本
| bot.py            # bot程序入口
| botRun.bat        # 启动 bot 的批处理文件
| pyproject.toml    # uv 配置文件
| README.md         # 项目说明文件
| uv.lock           # uv 锁文件
|   
+.venv          # uv 虚拟环境
|| .gitignore   # git 忽略文件
|| .lock        # uv 锁文件
|| CACHEDIR.TAG # uv 缓存文件
|| pyvenv.cfg   # uv 配置文件
|+-Lib          # uv 虚拟环境库
|\-Scripts      # uv 虚拟环境脚本
|           
+Lagrange.OneBot        # Lagrange.OneBot文件
|| appsettings.json     # Lagrange.OneBot配置文件
|| device.json          # Lagrange.OneBot登录环境信息
|| keystore.json        # Lagrange.OneBot登录用户文件
|| Lagrange.OneBot.exe  # Lagrange.OneBot主程序
|| qr-0.png             # Lagrange.OneBot登录二维码
|\-lagrange-0-db        # Lagrange.OneBot数据库
|
\src                    # nonebot2项目文件
 |__init__.py           # 项目包
 +---common             # 公共工具文件
 |  __init__.py         # 项目包
 +---message_manager.py # 消息管理器
 |  receiver.py         # 消息接收器
 |  sender.py           # 消息发送器
 |  __init__.py         # 项目包
 +---plugins            # 非消息插件
 |  admin_manage_bot.py # 管理bot插件
 |  __init__.py         # 项目包
 \---processors         # 消息处理器
    __init__.py         # 项目包

配置 Lagrange.OneBot

首先要登录上 qq

  1. 这里用到的是Lagrange.OneBot_win-x64_net9.0_SelfContained.zip点击下载,找打自己对应的系统版本下载。
  2. 解压后,在目录下找到Lagrange.OneBot.exe执行,第一次执行后退出。
  3. 打开文件配置器按照需要进行配置,然后在目录下找到appsettings.json文件,将里面的内容替换成文件配置器生成的配置。
    • 关键配置:
      1. 签名设定->签名服务器地址:这个地址必须填,自己搭建或者用别人的
      1. 服务设定->Http/HttpPost/ForwardWebSocket/ReverseWebSocket:这个决定了你如何连接QQ的。通常是ReverseWebSocket。
  4. 执行Lagrange.OneBot.exe,如果一切正常的话会显示一个二维码,使用手机 qq 扫描二维码登录即可。记得勾选下次登录无需确认
  5. 这样 QQ 就完成了登录配置。

配置 nonebot2

接下来就是配置 nonebot2 了(不会 uv 的点击),步骤仅供参考。

  1. 找个合适的位置uv init -p 3.12 -q

  2. 配置 python 解释器uv run main.py

  3. 安装 nonebot2+驱动器uv pip install nonebot2[fastapi],当然也可以选择其他驱动器具体看这里

  4. 安装适配器(OneBotV11)uv pip install nonebot-adapter-onebot当然也可以选择其他驱动器具体看这里

  5. 配置项目文件,没有就手动创建,有就直接改

    • .env,添加以下内容
     #注释要删除
     COMMAND_START=["/"]         # 配置命令起始字符
     COMMAND_SEP=["."]           # 配置命令分割字符
     ENVIRONMENT=dev             # 配置环境
     SUPERUSERS=["123456789"]   # 配置超级用户
    
    • .env.dev,添加以下内容
     LOG_LEVEL=TRACE # 配置日志等级
    
    • .env.prod,添加以下内容
     LOG_LEVEL=INFO # 配置日志等级
    
    • pyproject.toml,添加以下内容
     [project]
     name = "qqbot"
     version = "0.1.0"
     description = "qqbot"
     readme = "README.md"
     requires-python = "<4.0,>=3.9"
     dependencies = []
    
     [tool.nonebot]
     adapters = [
         { name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11" },
     ]
     plugins = []
     plugin_dirs = ["src"]
     builtin_plugins = ["echo"]
    
    • uv.lock不建议直接写,直接uv lock生成
    version = 1
    revision = 3
    requires-python = ">=3.9, <4.0"
    
    [options]
    prerelease-mode = "if-necessary"
    
    [[package]]
    name = "qqbot"
    version = "0.1.0"
    source = { virtual = "." }
    
    • bot.py,添加以下内容
    import nonebot # 导入 nonebot
    from nonebot.adapters.onebot.v11 import Adapter as ConsoleAdapter  # 避免重复命名
    
    # 初始化 NoneBot
    nonebot.init()
    
    # 注册适配器
    driver = nonebot.get_driver()
    driver.register_adapter(ConsoleAdapter)
    
    # 在这里加载插件
    nonebot.load_builtin_plugins("echo")  # 内置插件
    nonebot.load_plugins("src")  # 本地插件,只要写道src文件当中就会自动加载进去,"_"开头的不会加载
    
    if __name__ == "__main__":
        nonebot.run() # 启动 NoneBot
    

最后就是启动!启动!启动!!!启动

  1. windows下写一个botRun.bat,还可用以后用在开机自启
:: 不显示命令行窗口
@echo off
:: 提示启动
echo 正在启动Lagrange.OneBot... 
:: 进入目录,如果失败则提示并退出
cd /d "目录" || (
    echo 无法进入目录
    pause
    exit /b 1
)
:: 启动Lagrange.OneBot
start "" "Lagrange.OneBot.exe"
:: 提示启动Nonebot2
echo 正在运行bot.py...
:: 进入目录,如果失败则提示并退出
cd /d "目录" || (
    echo 无法进入目录
    pause
    exit /b 1
)
:: 启动bot.py,使用uv启动
uv run bot.py
:: 提示操作完成
echo 操作完成
pause

写个插件试试

ok啊,按照上述说的,现在尝试写个插件试试,我想让这个bot存活的时间长一点,就需要让这个bot更容易维护。

  1. 先写个统一出入口,实现发送什么就回复什么。
posted @ 2025-09-09 02:01  *--_-  阅读(67)  评论(0)    收藏  举报