@onebots/adapter-icqq 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +208 -0
- package/lib/adapter.d.ts +93 -0
- package/lib/adapter.js +561 -0
- package/lib/bot.d.ts +178 -0
- package/lib/bot.js +593 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +3 -0
- package/lib/types.d.ts +418 -0
- package/lib/types.js +26 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 凉菜
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# @onebots/adapter-icqq
|
|
2
|
+
|
|
3
|
+
onebots ICQQ 适配器 - 基于 ICQQ 协议的 QQ 机器人
|
|
4
|
+
|
|
5
|
+
## 📦 安装
|
|
6
|
+
|
|
7
|
+
### 1. 配置 GitHub Packages 访问
|
|
8
|
+
|
|
9
|
+
由于 `@icqqjs/icqq` 是托管在 GitHub Packages 的私有包,需要先配置访问权限。
|
|
10
|
+
|
|
11
|
+
在项目根目录的 `.npmrc` 文件中添加:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
@icqqjs:registry=https://npm.pkg.github.com
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 2. 登录 GitHub Packages
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm login --scope=@icqqjs --auth-type=legacy --registry=https://npm.pkg.github.com
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- **UserName**: 你的 GitHub 账号
|
|
24
|
+
- **Password**: 前往 https://github.com/settings/tokens/new 获取,scopes 勾选 `read:packages`
|
|
25
|
+
- **E-Mail**: 你的公开邮箱地址
|
|
26
|
+
|
|
27
|
+
### 3. 安装依赖
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install @onebots/adapter-icqq
|
|
31
|
+
# 或
|
|
32
|
+
pnpm add @onebots/adapter-icqq
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ⚙️ 配置
|
|
36
|
+
|
|
37
|
+
在 `config.yaml` 中配置 ICQQ 账号:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
# ICQQ 机器人账号配置
|
|
41
|
+
icqq.123456789: # 你的 QQ 号
|
|
42
|
+
# 密码登录(可选,不填则扫码登录)
|
|
43
|
+
password: 'your_password'
|
|
44
|
+
|
|
45
|
+
# 协议配置
|
|
46
|
+
protocol:
|
|
47
|
+
# 登录平台: 1=安卓手机, 2=安卓平板, 3=安卓手表, 4=MacOS, 5=iPad, 6=Tim
|
|
48
|
+
platform: 2
|
|
49
|
+
# 签名服务器地址(重要!未配置可能导致登录失败)
|
|
50
|
+
sign_api_addr: 'http://your-sign-server:8080'
|
|
51
|
+
# 数据存储目录
|
|
52
|
+
data_dir: './data/icqq'
|
|
53
|
+
# 群聊和频道中过滤自己的消息
|
|
54
|
+
ignore_self: true
|
|
55
|
+
# 被风控时是否尝试用分片发送
|
|
56
|
+
resend: true
|
|
57
|
+
# 触发离线事件后的重新登录间隔秒数
|
|
58
|
+
reconn_interval: 5
|
|
59
|
+
# 是否缓存群员列表
|
|
60
|
+
cache_group_member: true
|
|
61
|
+
# 自动选择最优服务器
|
|
62
|
+
auto_server: true
|
|
63
|
+
|
|
64
|
+
# OneBot V11 协议配置
|
|
65
|
+
onebot.v11:
|
|
66
|
+
access_token: 'your_v11_token'
|
|
67
|
+
|
|
68
|
+
# OneBot V12 协议配置
|
|
69
|
+
onebot.v12:
|
|
70
|
+
access_token: 'your_v12_token'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 📋 配置项说明
|
|
74
|
+
|
|
75
|
+
### 基础配置
|
|
76
|
+
|
|
77
|
+
| 配置项 | 类型 | 必填 | 说明 |
|
|
78
|
+
|--------|------|------|------|
|
|
79
|
+
| `password` | string | 否 | QQ 密码,不填则扫码登录 |
|
|
80
|
+
| `protocol` | object | 否 | 协议配置 |
|
|
81
|
+
|
|
82
|
+
### 协议配置 (protocol)
|
|
83
|
+
|
|
84
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
85
|
+
|--------|------|--------|------|
|
|
86
|
+
| `platform` | number | 2 | 登录平台 |
|
|
87
|
+
| `sign_api_addr` | string | - | 签名服务器地址 |
|
|
88
|
+
| `data_dir` | string | `./data` | 数据存储目录 |
|
|
89
|
+
| `ignore_self` | boolean | true | 群聊和频道中过滤自己的消息 |
|
|
90
|
+
| `resend` | boolean | true | 被风控时是否尝试用分片发送 |
|
|
91
|
+
| `reconn_interval` | number | 5 | 重新登录间隔秒数 |
|
|
92
|
+
| `cache_group_member` | boolean | true | 是否缓存群员列表 |
|
|
93
|
+
| `auto_server` | boolean | true | 自动选择最优服务器 |
|
|
94
|
+
| `ffmpeg_path` | string | - | ffmpeg 路径 |
|
|
95
|
+
| `ffprobe_path` | string | - | ffprobe 路径 |
|
|
96
|
+
|
|
97
|
+
### 登录平台 (platform)
|
|
98
|
+
|
|
99
|
+
| 值 | 平台 |
|
|
100
|
+
|----|------|
|
|
101
|
+
| 1 | 安卓手机 |
|
|
102
|
+
| 2 | 安卓平板(推荐) |
|
|
103
|
+
| 3 | 安卓手表 |
|
|
104
|
+
| 4 | MacOS |
|
|
105
|
+
| 5 | iPad |
|
|
106
|
+
| 6 | Tim |
|
|
107
|
+
|
|
108
|
+
## 🔐 签名服务器
|
|
109
|
+
|
|
110
|
+
ICQQ 协议需要签名服务器才能正常登录和收发消息。签名服务器的部署请参考:
|
|
111
|
+
|
|
112
|
+
- [unidbg-fetch-qsign](https://github.com/fuqiuluo/unidbg-fetch-qsign)
|
|
113
|
+
- 其他兼容的签名服务
|
|
114
|
+
|
|
115
|
+
配置示例:
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
protocol:
|
|
119
|
+
sign_api_addr: 'http://127.0.0.1:8080'
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 🚀 使用示例
|
|
123
|
+
|
|
124
|
+
### 启动服务
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 注册 ICQQ 适配器和 OneBot V11 协议
|
|
128
|
+
onebots -r icqq -p onebot.v11
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 扫码登录
|
|
132
|
+
|
|
133
|
+
如果不配置密码,启动时会提示扫码登录。控制台会输出二维码图片路径或显示二维码。
|
|
134
|
+
|
|
135
|
+
### 滑块验证
|
|
136
|
+
|
|
137
|
+
如果触发滑块验证,控制台会输出验证链接,需要手动完成验证后将 ticket 提交。
|
|
138
|
+
|
|
139
|
+
### 设备锁验证
|
|
140
|
+
|
|
141
|
+
如果触发设备锁验证,控制台会输出验证链接和手机号,需要手动完成验证。
|
|
142
|
+
|
|
143
|
+
## 📝 支持的功能
|
|
144
|
+
|
|
145
|
+
### 消息类型
|
|
146
|
+
|
|
147
|
+
| 类型 | 发送 | 接收 | 说明 |
|
|
148
|
+
|------|:----:|:----:|------|
|
|
149
|
+
| 文本 | ✅ | ✅ | 纯文本消息 |
|
|
150
|
+
| 表情 | ✅ | ✅ | QQ 表情 |
|
|
151
|
+
| 图片 | ✅ | ✅ | 图片消息 |
|
|
152
|
+
| 语音 | ✅ | ✅ | 语音消息 |
|
|
153
|
+
| 视频 | ✅ | ✅ | 视频消息 |
|
|
154
|
+
| @提及 | ✅ | ✅ | @某人或@全体 |
|
|
155
|
+
| 回复 | ✅ | ✅ | 引用回复 |
|
|
156
|
+
| 分享 | ✅ | ✅ | 链接分享 |
|
|
157
|
+
| JSON | ✅ | ✅ | JSON 卡片 |
|
|
158
|
+
| XML | ✅ | ✅ | XML 卡片 |
|
|
159
|
+
|
|
160
|
+
### API 功能
|
|
161
|
+
|
|
162
|
+
| 功能 | 支持 | 说明 |
|
|
163
|
+
|------|:----:|------|
|
|
164
|
+
| 发送私聊消息 | ✅ | |
|
|
165
|
+
| 发送群消息 | ✅ | |
|
|
166
|
+
| 撤回消息 | ✅ | |
|
|
167
|
+
| 获取消息 | ✅ | |
|
|
168
|
+
| 获取好友列表 | ✅ | |
|
|
169
|
+
| 获取群列表 | ✅ | |
|
|
170
|
+
| 获取群成员列表 | ✅ | |
|
|
171
|
+
| 获取群成员信息 | ✅ | |
|
|
172
|
+
| 设置群名片 | ✅ | |
|
|
173
|
+
| 踢出群成员 | ✅ | |
|
|
174
|
+
| 禁言群成员 | ✅ | |
|
|
175
|
+
| 全员禁言 | ✅ | |
|
|
176
|
+
| 设置群管理员 | ✅ | |
|
|
177
|
+
| 退出群 | ✅ | |
|
|
178
|
+
| 处理好友申请 | ✅ | |
|
|
179
|
+
| 处理群申请 | ✅ | |
|
|
180
|
+
|
|
181
|
+
### 事件支持
|
|
182
|
+
|
|
183
|
+
| 事件 | 支持 | 说明 |
|
|
184
|
+
|------|:----:|------|
|
|
185
|
+
| 私聊消息 | ✅ | |
|
|
186
|
+
| 群消息 | ✅ | |
|
|
187
|
+
| 好友申请 | ✅ | |
|
|
188
|
+
| 群申请/邀请 | ✅ | |
|
|
189
|
+
| 群成员增加 | ✅ | |
|
|
190
|
+
| 群成员减少 | ✅ | |
|
|
191
|
+
| 群禁言 | ✅ | |
|
|
192
|
+
| 群管理员变动 | ✅ | |
|
|
193
|
+
| 消息撤回 | ✅ | |
|
|
194
|
+
| 戳一戳 | ✅ | |
|
|
195
|
+
|
|
196
|
+
## ⚠️ 注意事项
|
|
197
|
+
|
|
198
|
+
1. **签名服务器必须配置**:ICQQ 协议需要签名服务器才能正常工作
|
|
199
|
+
2. **账号安全**:建议使用小号测试,避免账号被封禁风险
|
|
200
|
+
3. **协议更新**:QQ 协议可能随时更新,如遇问题请更新 ICQQ 和签名服务
|
|
201
|
+
4. **数据目录**:建议配置独立的 `data_dir`,避免数据混乱
|
|
202
|
+
|
|
203
|
+
## 🔗 相关链接
|
|
204
|
+
|
|
205
|
+
- [ICQQ GitHub](https://github.com/icqqjs/icqq)
|
|
206
|
+
- [onebots 文档](https://onebots.dev)
|
|
207
|
+
- [签名服务部署教程](https://github.com/fuqiuluo/unidbg-fetch-qsign)
|
|
208
|
+
|
package/lib/adapter.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICQQ 适配器
|
|
3
|
+
* 继承 Adapter 基类,实现 ICQQ 平台功能
|
|
4
|
+
*/
|
|
5
|
+
import { Account } from "onebots";
|
|
6
|
+
import { Adapter } from "onebots";
|
|
7
|
+
import { BaseApp } from "onebots";
|
|
8
|
+
import { ICQQBot } from "./bot.js";
|
|
9
|
+
import type { ICQQConfig } from "./types.js";
|
|
10
|
+
export declare class ICQQAdapter extends Adapter<ICQQBot, "icqq"> {
|
|
11
|
+
constructor(app: BaseApp);
|
|
12
|
+
/**
|
|
13
|
+
* 发送消息
|
|
14
|
+
*/
|
|
15
|
+
sendMessage(uin: string, params: Adapter.SendMessageParams): Promise<Adapter.SendMessageResult>;
|
|
16
|
+
/**
|
|
17
|
+
* 删除/撤回消息
|
|
18
|
+
*/
|
|
19
|
+
deleteMessage(uin: string, params: Adapter.DeleteMessageParams): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* 获取消息
|
|
22
|
+
*/
|
|
23
|
+
getMessage(uin: string, params: Adapter.GetMessageParams): Promise<Adapter.MessageInfo>;
|
|
24
|
+
/**
|
|
25
|
+
* 获取机器人自身信息
|
|
26
|
+
*/
|
|
27
|
+
getLoginInfo(uin: string): Promise<Adapter.UserInfo>;
|
|
28
|
+
/**
|
|
29
|
+
* 获取用户信息
|
|
30
|
+
*/
|
|
31
|
+
getUserInfo(uin: string, params: Adapter.GetUserInfoParams): Promise<Adapter.UserInfo>;
|
|
32
|
+
/**
|
|
33
|
+
* 获取好友列表
|
|
34
|
+
*/
|
|
35
|
+
getFriendList(uin: string, params?: Adapter.GetFriendListParams): Promise<Adapter.FriendInfo[]>;
|
|
36
|
+
/**
|
|
37
|
+
* 获取好友信息
|
|
38
|
+
*/
|
|
39
|
+
getFriendInfo(uin: string, params: Adapter.GetFriendInfoParams): Promise<Adapter.FriendInfo>;
|
|
40
|
+
/**
|
|
41
|
+
* 获取群列表
|
|
42
|
+
*/
|
|
43
|
+
getGroupList(uin: string, params?: Adapter.GetGroupListParams): Promise<Adapter.GroupInfo[]>;
|
|
44
|
+
/**
|
|
45
|
+
* 获取群信息
|
|
46
|
+
*/
|
|
47
|
+
getGroupInfo(uin: string, params: Adapter.GetGroupInfoParams): Promise<Adapter.GroupInfo>;
|
|
48
|
+
/**
|
|
49
|
+
* 退出群组
|
|
50
|
+
*/
|
|
51
|
+
leaveGroup(uin: string, params: Adapter.LeaveGroupParams): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* 获取群成员列表
|
|
54
|
+
*/
|
|
55
|
+
getGroupMemberList(uin: string, params: Adapter.GetGroupMemberListParams): Promise<Adapter.GroupMemberInfo[]>;
|
|
56
|
+
/**
|
|
57
|
+
* 获取群成员信息
|
|
58
|
+
*/
|
|
59
|
+
getGroupMemberInfo(uin: string, params: Adapter.GetGroupMemberInfoParams): Promise<Adapter.GroupMemberInfo>;
|
|
60
|
+
/**
|
|
61
|
+
* 踢出群成员
|
|
62
|
+
*/
|
|
63
|
+
kickGroupMember(uin: string, params: Adapter.KickGroupMemberParams): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 设置群名片
|
|
66
|
+
*/
|
|
67
|
+
setGroupCard(uin: string, params: Adapter.SetGroupCardParams): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* 获取版本信息
|
|
70
|
+
*/
|
|
71
|
+
getVersion(uin: string): Promise<Adapter.VersionInfo>;
|
|
72
|
+
/**
|
|
73
|
+
* 获取运行状态
|
|
74
|
+
*/
|
|
75
|
+
getStatus(uin: string): Promise<Adapter.StatusInfo>;
|
|
76
|
+
createAccount(config: Account.Config<'icqq'>): Account<'icqq', ICQQBot>;
|
|
77
|
+
/**
|
|
78
|
+
* 构建 ICQQ 消息
|
|
79
|
+
*/
|
|
80
|
+
private buildICQQMessage;
|
|
81
|
+
/**
|
|
82
|
+
* 转换 ICQQ 消息到 Segment
|
|
83
|
+
*/
|
|
84
|
+
private convertICQQMessageToSegments;
|
|
85
|
+
}
|
|
86
|
+
declare module "onebots" {
|
|
87
|
+
namespace Adapter {
|
|
88
|
+
interface Configs {
|
|
89
|
+
icqq: ICQQConfig;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=adapter.d.ts.map
|