Skip to content

Commit 4b8ed3f

Browse files
committed
refactor :2.0.0
1 parent 69026e6 commit 4b8ed3f

File tree

12 files changed

+1228
-322
lines changed

12 files changed

+1228
-322
lines changed

.env.example

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# nonebot-plugin-qqdetail 配置示例
2+
3+
# ============ 基础配置 ============
4+
5+
# 仅管理员可用
6+
# 如果设为 true,只有超级用户和群管理员可以查询他人资料
7+
QQDETAIL_ONLY_ADMIN=false
8+
9+
# 黑名单用户列表
10+
# 这些用户的资料无法被查询
11+
QQDETAIL_BOX_BLACKLIST=[]
12+
13+
# 群聊白名单
14+
# 仅这些群可使用命令,留空则所有群都可用
15+
QQDETAIL_WHITELIST_GROUPS=[]
16+
17+
# ============ 自动获取配置 ============
18+
19+
# 自动获取新入群用户信息
20+
QQDETAIL_AUTO_BOX_CONFIG__INCREASE_BOX=false
21+
22+
# 自动获取退群用户信息
23+
QQDETAIL_AUTO_BOX_CONFIG__DECREASE_BOX=false
24+
25+
# 自动获取功能的群聊白名单
26+
# 留空则所有群都启用自动获取
27+
QQDETAIL_AUTO_BOX_CONFIG__WHITE_GROUPS=[]
28+
29+
# ============ 速率限制配置 ============
30+
31+
# 速率限制时间(分钟)
32+
# 0 表示不限制,建议设置为 3-10 分钟
33+
QQDETAIL_RATE_LIMIT_CONFIG__TIME=0
34+
35+
# 速率限制白名单群聊
36+
# 这些群不受速率限制
37+
QQDETAIL_RATE_LIMIT_CONFIG__WHITE_GROUPS=[]
38+
39+
# 速率限制白名单用户
40+
# 这些用户不受速率限制
41+
QQDETAIL_RATE_LIMIT_CONFIG__WHITE_USERS=[]
42+
43+
# ============ 显示配置 ============
44+
45+
# 群信息
46+
QQDETAIL_DISPLAY_CONFIG__CARD=true
47+
QQDETAIL_DISPLAY_CONFIG__TITLE=true
48+
QQDETAIL_DISPLAY_CONFIG__LEVEL=true
49+
QQDETAIL_DISPLAY_CONFIG__JOIN_TIME=true
50+
51+
# 基本信息
52+
QQDETAIL_DISPLAY_CONFIG__SEX=true
53+
QQDETAIL_DISPLAY_CONFIG__AGE=true
54+
55+
# 生日相关
56+
QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__ENABLE=true
57+
QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__CONSTELLATION=true
58+
QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__ZODIAC=true
59+
60+
# 联系信息(建议关闭手机号以保护隐私)
61+
QQDETAIL_DISPLAY_CONFIG__PHONE_NUM=false
62+
QQDETAIL_DISPLAY_CONFIG__EMAIL=true
63+
QQDETAIL_DISPLAY_CONFIG__POST_CODE=true
64+
65+
# 地理信息
66+
QQDETAIL_DISPLAY_CONFIG__HOME_TOWN=true
67+
QQDETAIL_DISPLAY_CONFIG__ADDRESS=true
68+
69+
# 其他信息
70+
QQDETAIL_DISPLAY_CONFIG__BLOOD_TYPE=true
71+
QQDETAIL_DISPLAY_CONFIG__CAREER=true
72+
QQDETAIL_DISPLAY_CONFIG__REMARK=true
73+
QQDETAIL_DISPLAY_CONFIG__LABELS=true
74+
QQDETAIL_DISPLAY_CONFIG__UNFRIENDLY=true
75+
76+
# VIP 信息
77+
QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__ENABLE=true
78+
QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__YEARS_VIP=true
79+
QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__VIP_LEVEL=true
80+
81+
# 活动信息
82+
QQDETAIL_DISPLAY_CONFIG__LOGIN_DAYS=true
83+
84+
# 个性签名
85+
QQDETAIL_DISPLAY_CONFIG__LONG_NICK=true

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ state the exclusion of warranty; and each file should have at least
630630
the "copyright" line and a pointer to where the full notice is found.
631631

632632
<one line to give the program's name and a brief idea of what it does.>
633-
Copyright (C) <year> <name of author>
633+
Copyright (C) 2025 006lp
634634

635635
This program is free software: you can redistribute it and/or modify
636636
it under the terms of the GNU Affero General Public License as published

README.md

Lines changed: 140 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<div align="center">
88

9-
## *基于 Nonebot2 的 QQ 详细信息查询插件*
9+
## *基于 NoneBot2 的 QQ 用户信息查询插件*
1010

1111
<a href="./LICENSE">
1212
<img src="https://img.shields.io/github/license/006lp/nonebot-plugin-qqdetail.svg" alt="license">
@@ -25,20 +25,40 @@
2525

2626
## 📖 介绍
2727

28-
一个简单的 NoneBot2 插件,允许机器人通过 QQ 号或 @用户 查询 QQ 用户的公开详细信息(如昵称、头像、QID、等级、IP归属地等)。数据来源于第三方 API
28+
一个基于 NoneBot2 的插件,用于查询 QQ 用户的公开信息。通过 QQ 号或 @用户 方式获取用户资料,包括昵称、头像、等级、生日、VIP 等信息。数据来源于 OneBot 协议提供的用户信息接口
2929

30-
仅支持 OneBot V11 协议。
30+
目前仅支持 OneBot V11 协议。
31+
32+
## 📁 项目结构
33+
34+
```
35+
nonebot-plugin-qqdetail/
36+
├── __init__.py # 插件入口,包含 PluginMetadata
37+
├── config.py # 配置模型(使用 Pydantic v2)
38+
├── matchers.py # 事件处理器(命令和通知)
39+
├── utils.py # 工具函数和数据处理
40+
├── draw.py # 图片生成逻辑
41+
├── assets/ # 资源文件夹(需手动创建)
42+
│ ├── 可爱字体.ttf # 中文字体
43+
│ └── NotoColorEmoji.ttf # Emoji 字体
44+
├── pyproject.toml # 项目配置
45+
├── README.md # 使用文档
46+
├── .env.example # 配置示例
47+
└── .gitignore # Git 忽略文件
48+
```
3149

3250
## 💿 安装
3351

3452
<details open>
3553
<summary>使用 nb-cli 安装</summary>
36-
在 NoneBot2 项目的根目录下打开命令行,输入以下指令即可安装
54+
55+
在 NoneBot2 项目的根目录下打开命令行,运行以下命令进行安装:
3756

3857
```bash
3958
nb plugin install nonebot-plugin-qqdetail --upgrade
4059
```
41-
如果需要使用 PyPI 镜像源(例如清华源):
60+
61+
如需使用国内镜像源(如清华源)加速安装:
4262

4363
```bash
4464
nb plugin install nonebot-plugin-qqdetail --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
@@ -47,7 +67,8 @@ nb plugin install nonebot-plugin-qqdetail --upgrade -i https://pypi.tuna.tsinghu
4767

4868
<details>
4969
<summary>使用包管理器安装</summary>
50-
在 NoneBot2 项目的插件目录下(或项目根目录,取决于你的项目结构和包管理器),打开命令行,根据你使用的包管理器,输入相应的安装命令:
70+
71+
在 NoneBot2 项目的根目录下(或插件目录,取决于项目结构),打开命令行,使用你偏好的包管理器运行相应命令:
5172

5273
<details open>
5374
<summary>uv</summary>
@@ -104,58 +125,122 @@ plugins = ["nonebot_plugin_qqdetail"] # 确保你的插件代码在 nonebot_plug
104125

105126
## ⚙️ 配置
106127

107-
插件支持通过 `.env` 文件进行配置。
108-
109-
| 配置项 | 必填 | 默认值 | 说明 |
110-
| :------------------- | :---: | :----: | :------------------------------------------------------------------------ |
111-
| `QQDETAIL_WHITELIST` || `[]` | QQ 号码列表。白名单内的用户,只有超级用户才能查询其信息(自己查自己除外) |
128+
插件通过 `.env` 文件进行配置,所有配置项均为可选,默认为推荐设置。
129+
130+
### 基础配置
131+
132+
| 配置项 | 必填 | 默认值 | 说明 |
133+
| :------------------------ | :---: | :-----: | :---------------------------------------- |
134+
| `QQDETAIL_ONLY_ADMIN` || `false` | 仅管理员可用(默认:false) |
135+
| `QQDETAIL_BOX_BLACKLIST` || `[]` | 黑名单用户列表(这些用户的资料无法被查询) |
136+
| `QQDETAIL_WHITELIST_GROUPS` || `[]` | 群聊白名单(仅这些群可使用命令,留空则所有群都可用) |
137+
138+
### 自动获取配置
139+
140+
| 配置项 | 必填 | 默认值 | 说明 |
141+
| :----------------------------------- | :---: | :-----: | :---------------------------------------- |
142+
| `QQDETAIL_AUTO_BOX_CONFIG__INCREASE_BOX` || `false` | 自动获取新入群用户信息 |
143+
| `QQDETAIL_AUTO_BOX_CONFIG__DECREASE_BOX` || `false` | 自动获取退群用户信息 |
144+
| `QQDETAIL_AUTO_BOX_CONFIG__WHITE_GROUPS` || `[]` | 自动获取功能的群聊白名单(留空则所有群都启用) |
145+
146+
### 速率限制配置
147+
148+
| 配置项 | 必填 | 默认值 | 说明 |
149+
| :--------------------------------------- | :---: | :----: | :---------------------------------------- |
150+
| `QQDETAIL_RATE_LIMIT_CONFIG__TIME` || `0` | 速率限制时间(分钟),0表示不限制 |
151+
| `QQDETAIL_RATE_LIMIT_CONFIG__WHITE_GROUPS` || `[]` | 速率限制白名单群聊(这些群不受速率限制) |
152+
| `QQDETAIL_RATE_LIMIT_CONFIG__WHITE_USERS` || `[]` | 速率限制白名单用户(这些用户不受速率限制) |
153+
154+
### 显示配置
155+
156+
你可以精细控制要显示的用户信息字段(默认为全部显示):
157+
158+
| 分类 | 配置项 | 说明 |
159+
| :------- | :----------------------------------------------- | :----------- |
160+
| **基本信息** | `QQDETAIL_DISPLAY_CONFIG__CARD` | 群昵称 |
161+
| | `QQDETAIL_DISPLAY_CONFIG__TITLE` | 群头衔 |
162+
| | `QQDETAIL_DISPLAY_CONFIG__SEX` | 性别 |
163+
| | `QQDETAIL_DISPLAY_CONFIG__AGE` | 年龄 |
164+
| **生日相关** | `QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__ENABLE` | 生日 |
165+
| | `QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__CONSTELLATION` | 星座 |
166+
| | `QQDETAIL_DISPLAY_CONFIG__BIRTHDAY_CONFIG__ZODIAC` | 生肖 |
167+
| **联系信息** | `QQDETAIL_DISPLAY_CONFIG__PHONE_NUM` | 手机号码 |
168+
| | `QQDETAIL_DISPLAY_CONFIG__EMAIL` | 邮箱 |
169+
| | `QQDETAIL_DISPLAY_CONFIG__POST_CODE` | 邮编 |
170+
| **地理信息** | `QQDETAIL_DISPLAY_CONFIG__HOME_TOWN` | 家乡 |
171+
| | `QQDETAIL_DISPLAY_CONFIG__ADDRESS` | 现居地 |
172+
| **其他信息** | `QQDETAIL_DISPLAY_CONFIG__BLOOD_TYPE` | 血型 |
173+
| | `QQDETAIL_DISPLAY_CONFIG__CAREER` | 职业 |
174+
| | `QQDETAIL_DISPLAY_CONFIG__REMARK` | 备注 |
175+
| | `QQDETAIL_DISPLAY_CONFIG__LABELS` | 标签 |
176+
| | `QQDETAIL_DISPLAY_CONFIG__UNFRIENDLY` | 风险账号标记 |
177+
| **VIP 信息** | `QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__ENABLE` | VIP |
178+
| | `QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__YEARS_VIP` | 年VIP |
179+
| | `QQDETAIL_DISPLAY_CONFIG__VIP_CONFIG__VIP_LEVEL` | VIP等级 |
180+
| **活动信息** | `QQDETAIL_DISPLAY_CONFIG__LOGIN_DAYS` | 连续登录天数 |
181+
| | `QQDETAIL_DISPLAY_CONFIG__LEVEL` | 群等级 |
182+
| | `QQDETAIL_DISPLAY_CONFIG__JOIN_TIME` | 加群时间 |
183+
| **个性签名** | `QQDETAIL_DISPLAY_CONFIG__LONG_NICK` | 个性签名 |
112184

113185
**`.env` 文件配置示例:**
114186

115187
```env
116-
# QQDetail 插件配置
117-
# 白名单内的 QQ 号,只有 Superuser 可以查询 (除了用户自己查自己)
118-
# 值需要是有效的 JSON 列表字符串,例如: '["10001", "10002"]'
119-
QQDETAIL_WHITELIST='["12345678", "87654321"]'
188+
# 基础配置
189+
QQDETAIL_ONLY_ADMIN=false
190+
QQDETAIL_BOX_BLACKLIST=["123456789", "987654321"]
191+
QQDETAIL_WHITELIST_GROUPS=["123456789"]
192+
193+
# 自动获取配置
194+
QQDETAIL_AUTO_BOX_CONFIG__INCREASE_BOX=false
195+
QQDETAIL_AUTO_BOX_CONFIG__DECREASE_BOX=false
196+
QQDETAIL_AUTO_BOX_CONFIG__WHITE_GROUPS=["123456789"]
197+
198+
# 速率限制配置
199+
QQDETAIL_RATE_LIMIT_CONFIG__TIME=5
200+
QQDETAIL_RATE_LIMIT_CONFIG__WHITE_GROUPS=["123456789"]
201+
QQDETAIL_RATE_LIMIT_CONFIG__WHITE_USERS=["123456789"]
202+
203+
# 显示配置(关闭手机号显示以保护隐私)
204+
QQDETAIL_DISPLAY_CONFIG__PHONE_NUM=false
120205
```
121206

122-
**注意:** `.env` 文件中的列表通常需要以 JSON 字符串的形式提供。
207+
**注意:** `.env` 具体示例参见`.env.example`。另外,文件中的列表通常需要以 JSON 字符串的形式提供。
123208

124209
## 🎉 使用
125210

126211
### 指令表
127212

128213
| 指令 | 别名 | 权限 | 需要@ | 范围 | 说明 |
129214
| :------------------------------ | :----: | :---: | :---: | :-------: | :------------------------------------------------------------------------------ |
130-
| `/detail <QQ号 或 @用户 或 无>` | `info` | 群员 | 可选 | 群聊/私聊 | 查询目标QQ用户的详细信息。参数可以是5-11位QQ号,@提及用户,或不带参数查询自己。 |
215+
| `/detail <QQ号 或 @用户 或 无>` | `info` | 群员 | 可选 | 群聊/私聊 | 查询目标 QQ 用户的详细信息。支持 QQ 号、@用户,或不带参数查询自己。 |
131216

132-
### 说明
217+
### 使用说明
133218

134-
* **`<QQ号>`**: 必须是 5 到 11 位的纯数字。
135-
* **`@用户`**: 在群聊中可以直接 @ 群成员。
136-
* **无参数**: 如果直接发送 `/detail``/info`,则查询发送者本人的信息。
137-
* **数据来源**: 本插件使用 `https://api.yyy001.com/` 提供的公开接口查询信息,结果的准确性和可用性取决于该 API。
138-
* **白名单**: 如果配置了 `QQDETAIL_WHITELIST`,则列表中的 QQ 号只有超级用户 (`SUPERUSERS`) 可以查询,除非用户是自己查询自己。
219+
* **`<QQ号>`**: 输入 5-11 位的有效 QQ 号码
220+
* **`@用户`**: 在群聊中直接 @ 指定的群成员
221+
* **无参数**: 直接发送指令查询发送者本人的信息
222+
* **数据来源**: 基于 OneBot 协议获取用户信息,准确性取决于连接的 OneBot 实现
223+
* **权限控制**: 支持多种权限控制,如管理员专用、用户黑名单等
139224

140225
### 🎨 返回示例
141226

142-
*查询成功示例:*
227+
**查询成功示例**
143228
```
144-
[图片:用户头像]
145-
查询对象:123456789
229+
[图片:用户头像和彩色文字]
230+
QQ号:123456789
146231
昵称:示例昵称
147-
QID:example_qid
148232
性别:男
149233
年龄:20
150-
等级:Lv.50
151-
VIP等级:VIP7
152-
注册时间:2010-01-01
234+
生日:05-15
235+
星座:金牛座
236+
生肖:龙
237+
现居:广东-深圳
238+
QQ等级:50级
239+
注册时间:2010年
153240
签名:这是一个示例签名。
154-
IP城市:广东 深圳
155-
......
156241
```
157242

158-
*格式错误示例:*
243+
**格式错误示例**
159244
```
160245
命令格式错误、QQ号无效或包含多余参数。
161246
请使用:
@@ -164,23 +249,34 @@ IP城市:广东 深圳
164249
/detail (查询自己)
165250
```
166251

167-
*查询失败示例:*
252+
**查询失败示例**
168253
```
169-
获取QQ信息失败 (UID: 123456789)。
170-
原因:API请求失败: 404
254+
获取 QQ 信息失败 (UID: 123456789)。
255+
原因:用户信息获取失败
171256
```
172257

173-
## ⚠️ 使用警告
258+
## ⚠️ 重要提醒
259+
260+
* **学习交流用途**:本插件仅供学习和交流使用,请勿用于任何非法目的
261+
* **隐私保护**:查询用户信息时请尊重他人隐私,确保使用符合相关法律法规
262+
* **免责声明**:用户需对自身使用行为负责,开发者不对使用本插件产生的任何后果承担责任
263+
264+
## 📄 许可证
265+
266+
本项目采用 [AGPL-3.0](./LICENSE) (GNU Affero General Public License v3.0) 开源许可证。
267+
268+
### AGPL-3.0 许可证说明
174269

175-
* **仅供学习交流使用!** 请勿用于非法用途。
176-
* **尊重隐私!** 查询他人信息可能涉及隐私,请确保你的使用符合相关法律法规和平台规定。
177-
* **数据准确性!** 插件依赖第三方 API,无法保证信息的绝对准确性和实时性。
178-
* 用户应对自己的使用行为负责,开发者不承担任何因使用此插件造成的直接或间接责任。
270+
AGPL-3.0 是 GNU 自由软件基金会发布的开源许可证,特别适用于网络应用。其主要特点包括:
179271

180-
## 📃 许可证
272+
* **网络服务条款**:如果您修改本软件并通过网络提供服务,必须公开修改后的完整源代码
273+
* **Copyleft 特性**:任何基于本项目的衍生作品必须采用相同的许可证
274+
* **用户自由保护**:确保用户在使用网络服务时享有修改和再分发的自由
181275

182-
本项目采用 [AGPL-3.0](./LICENSE) 许可证
276+
有关许可证的完整条款,请查看 [LICENSE](./LICENSE) 文件或访问 [GNU 官网](https://www.gnu.org/licenses/agpl-3.0.html)
183277

184278
## 🙏 致谢
185279

186-
* **API 提供方**: [https://api.yyy001.com/](https://api.yyy001.com/)
280+
* **NoneBot2 社区**:提供了优秀的机器人开发框架
281+
* **OneBot 协议**:提供了标准化的机器人通信协议
282+
* **AstrbotPlugin-ProfileSearch**:本插件参考了其设计思路

0 commit comments

Comments
 (0)