@mrlingxd/koishi-plugin-adapter-onebot 0.1.0 → 0.2.2

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.
Files changed (44) hide show
  1. package/lib/bot/cqcode.d.ts +204 -5
  2. package/lib/bot/cqcode.js +1 -1
  3. package/lib/bot/index.d.ts +35 -19
  4. package/lib/bot/index.js +89 -53
  5. package/lib/bot/message.d.ts +4 -4
  6. package/lib/bot/message.js +58 -57
  7. package/lib/http.d.ts +5 -6
  8. package/lib/http.js +5 -7
  9. package/lib/index.d.ts +12 -8
  10. package/lib/index.js +2 -3
  11. package/lib/internal.d.ts +132 -0
  12. package/lib/{types.js → internal.js} +6 -57
  13. package/lib/types/device.d.ts +8 -0
  14. package/lib/types/device.js +1 -0
  15. package/lib/types/enum.d.ts +65 -0
  16. package/lib/types/enum.js +70 -0
  17. package/lib/types/event/base.d.ts +26 -0
  18. package/lib/types/event/base.js +20 -0
  19. package/lib/types/event/message.d.ts +44 -0
  20. package/lib/types/event/message.js +11 -0
  21. package/lib/types/event/meta.d.ts +34 -0
  22. package/lib/types/event/meta.js +1 -0
  23. package/lib/types/event/notice.d.ts +256 -0
  24. package/lib/types/event/notice.js +40 -0
  25. package/lib/types/event/request.d.ts +30 -0
  26. package/lib/types/event/request.js +11 -0
  27. package/lib/types/group.d.ts +43 -0
  28. package/lib/types/group.js +1 -0
  29. package/lib/types/index.d.ts +334 -0
  30. package/lib/types/index.js +10 -0
  31. package/lib/types/sender.d.ts +43 -0
  32. package/lib/types/sender.js +10 -0
  33. package/lib/types/user.d.ts +16 -0
  34. package/lib/types/user.js +1 -0
  35. package/lib/utils.d.ts +15 -11
  36. package/lib/utils.js +210 -200
  37. package/lib/ws.d.ts +9 -10
  38. package/lib/ws.js +2 -4
  39. package/package.json +6 -9
  40. package/lib/bot/base.d.ts +0 -36
  41. package/lib/bot/base.js +0 -66
  42. package/lib/bot/qqguild.d.ts +0 -31
  43. package/lib/bot/qqguild.js +0 -66
  44. package/lib/types.d.ts +0 -474
package/lib/utils.js CHANGED
@@ -1,92 +1,93 @@
1
- import { h, hyphenate, omit } from "koishi";
1
+ import { h, omit } from "koishi";
2
2
  import * as qface from "qface";
3
- import { CQCode } from "./bot";
3
+ import { CQCode } from "./bot/cqcode";
4
+ import { EventType, GroupMemberRole } from "./types/enum";
5
+ import { isGroupMessageEvent, isMessageEvent } from "./types/event/message";
6
+ import { isGroupPokeNotice, isNoticeEvent, NoticeType } from "./types/event/notice";
7
+ import { isFriendRequest, isGroupRequest, isRequestEvent } from "./types/event/request";
4
8
  export * from "./types";
5
- export const decodeUser = (user) => ({
6
- id: user.tiny_id || user.user_id.toString(),
9
+ export const convertUser = (user, isBot = false) => ({
10
+ id: user.user_id.toString(),
7
11
  name: user.nickname,
8
- userId: user.tiny_id || user.user_id.toString(),
9
- avatar: user.user_id ? `http://q.qlogo.cn/headimg_dl?dst_uin=${user.user_id}&spec=640` : undefined,
10
- username: user.nickname
12
+ nick: user.remark || user.nickname,
13
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${user.user_id}&spec=640`,
14
+ isBot: isBot
11
15
  });
12
- export const decodeGuildMember = (user) => ({
13
- user: decodeUser(user),
14
- nick: user.card,
15
- roles: [user.role]
16
- });
17
- export const adaptQQGuildMemberInfo = (user) => ({
18
- user: {
19
- id: user.tiny_id,
20
- name: user.nickname,
21
- isBot: user.role_name === "机器人"
22
- },
23
- name: user.nickname,
24
- roles: user.role_name ? [user.role_name] : []
16
+ export const decodeUser = (event, isBot = false) => ({
17
+ id: event.user_id.toString(),
18
+ name: event.sender.nickname,
19
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${event.user_id}&spec=640`,
20
+ isBot: isBot
25
21
  });
26
- export const adaptQQGuildMemberProfile = (user) => ({
27
- user: {
28
- id: user.tiny_id,
29
- name: user.nickname,
30
- isBot: user.roles?.some((r) => r.role_name === "机器人")
31
- },
22
+ export function decodeGuild(group) {
23
+ return {
24
+ id: String(group.group_id),
25
+ name: group.group_name,
26
+ avatar: `https://p.qlogo.cn/gh/${group.group_id}/${group.group_id}/640`
27
+ };
28
+ }
29
+ export const decodeGuildMember = (user, isBot = false) => ({
30
+ user: convertUser(user, isBot),
32
31
  name: user.nickname,
33
- roles: user.roles?.map((r) => r.role_name) || []
32
+ nick: user.card || user.nickname,
33
+ title: user.title,
34
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${user.user_id}&spec=640`,
35
+ roles: [user.role]
34
36
  });
35
- export async function adaptMessage(bot, data, message = {}, payload = message) {
36
- message.id = message.messageId = data.message_id.toString();
37
+ export async function decodeMessage(bot, event, message = {}, payload = message) {
38
+ const [guildId, channelId] = decodeGroupChannelId(event);
37
39
  // message content
38
- const chain = CQCode.parse(data.message);
39
- if (bot.config.advanced.splitMixedContent) {
40
- chain.forEach((item, index) => {
41
- if (item.type !== "image")
42
- return;
43
- const left = chain[index - 1];
44
- if (left && left.type === "text" && left.attrs.content.trimEnd() === left.attrs.content) {
45
- left.attrs.content += " ";
46
- }
47
- const right = chain[index + 1];
48
- if (right && right.type === "text" && right.attrs.content.trimStart() === right.attrs.content) {
49
- right.attrs.content = " " + right.attrs.content;
50
- }
51
- });
52
- }
40
+ const chain = CQCode.parse(event.message);
41
+ // 映射
53
42
  message.elements = h.transform(chain, {
43
+ text(attrs) {
44
+ return h.text(attrs.text);
45
+ },
54
46
  at(attrs) {
55
47
  if (attrs.qq !== "all")
56
- return h.at(attrs.qq, { name: attrs.name });
57
- return h("at", { type: "all" });
48
+ return h.at(attrs.qq, {
49
+ name: attrs.name,
50
+ ...omit(attrs, [attrs.qq ? "qq" : undefined, attrs.name ? "name" : undefined])
51
+ });
52
+ return h.at("at", {
53
+ type: "all",
54
+ ...omit(attrs, [attrs.qq ? "qq" : undefined, attrs.name ? "name" : undefined])
55
+ });
58
56
  },
59
- face({ id }) {
60
- const name = qface.get(id)?.QDes.slice(1);
61
- return h("face", { id, name, platform: bot.platform }, [h.image(qface.getUrl(id))]);
57
+ face(attrs) {
58
+ const name = qface.get(attrs.id)?.QDes.slice(1);
59
+ return h("face", { id: attrs.id, name, platform: bot.platform }, [h.image(qface.getUrl(attrs.id))]);
62
60
  },
63
61
  image(attrs) {
64
- return h("img", {
65
- src: attrs.url || attrs.file,
66
- ...omit(attrs, ["url"])
62
+ return h.image(attrs.url || attrs.file, {
63
+ title: attrs.name || undefined,
64
+ ...omit(attrs, [
65
+ attrs.name ? "name" : undefined,
66
+ attrs.url ? "url" : undefined,
67
+ attrs.file ? "file" : undefined
68
+ ])
67
69
  });
68
70
  },
69
71
  record(attrs) {
70
- return h("audio", {
71
- src: attrs.url || attrs.file,
72
- ...omit(attrs, ["url"])
72
+ return h.audio(attrs.url || attrs.file, {
73
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
73
74
  });
74
75
  },
75
76
  video(attrs) {
76
- return h("video", {
77
- src: attrs.url || attrs.file,
78
- ...omit(attrs, ["url"])
77
+ return h.video(attrs.url || attrs.file, {
78
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
79
79
  });
80
80
  },
81
81
  file(attrs) {
82
- return h("file", {
83
- src: attrs.url || attrs.file,
84
- ...omit(attrs, ["url"])
82
+ return h.file(attrs.url || attrs.file, {
83
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
85
84
  });
85
+ },
86
+ reply(attrs) {
87
+ return h("reply", { id: attrs.id });
86
88
  }
87
89
  });
88
- const [guildId, channelId] = decodeGuildChannelId(data);
89
- if (message.elements[0]?.type === "reply") {
90
+ if (message.elements[0].type === "reply") {
90
91
  const reply = message.elements.shift();
91
92
  message.quote = await bot.getMessage(channelId, reply.attrs.id).catch((error) => {
92
93
  bot.logger.warn(error);
@@ -94,184 +95,193 @@ export async function adaptMessage(bot, data, message = {}, payload = message) {
94
95
  });
95
96
  }
96
97
  message.content = message.elements.join("");
97
- if (!payload)
98
- return message;
99
- payload.user = decodeUser(data.sender);
100
- payload.member = decodeGuildMember(data.sender);
101
- payload.timestamp = data.time * 1000;
102
- payload.guild = guildId && { id: guildId };
103
- payload.channel = channelId && {
98
+ payload.timestamp = event.time * 1000;
99
+ message.id = event.message_id.toString();
100
+ payload.channel = {
104
101
  id: channelId,
105
- type: guildId ? 0 /* Universal.Channel.Type.TEXT */ : 1 /* Universal.Channel.Type.DIRECT */
102
+ type: event.message_type === "group" ? 0 /* Universal.Channel.Type.TEXT */ : 1 /* Universal.Channel.Type.DIRECT */,
103
+ name: event.message_type === "group" ? event.group_name || undefined : event.sender.nickname
106
104
  };
105
+ payload.user = decodeUser(event);
106
+ if (isGroupMessageEvent(event)) {
107
+ payload.guild = {
108
+ id: event.group_id.toString(),
109
+ name: event.group_name || undefined,
110
+ avatar: `https://p.qlogo.cn/gh/${event.group_id}/${event.group_id}/640`
111
+ };
112
+ payload.member = {
113
+ user: decodeUser(event),
114
+ name: event.sender.nickname,
115
+ nick: event.sender.card,
116
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${event.user_id}&spec=640`,
117
+ roles: [event.sender.role]
118
+ };
119
+ }
107
120
  return message;
108
121
  }
109
- const decodeGuildChannelId = (data) => {
110
- if (data.guild_id) {
111
- return [data.guild_id, data.channel_id];
112
- }
113
- else if (data.group_id) {
114
- return [data.group_id.toString(), data.group_id.toString()];
122
+ const decodeGroupChannelId = (event) => {
123
+ if (event.message_type === "group") {
124
+ return [event.group_id.toString(), event.group_id.toString()];
115
125
  }
116
126
  else {
117
- return [undefined, "private:" + data.sender.user_id];
127
+ return [undefined, "private:" + event.sender.user_id];
118
128
  }
119
129
  };
120
130
  export const adaptGuild = (info) => {
121
- if (info.guild_id) {
122
- const guild = info;
123
- return {
124
- id: guild.guild_id,
125
- name: guild.guild_name
126
- };
127
- }
128
- else {
129
- const group = info;
130
- return {
131
- id: group.group_id.toString(),
132
- name: group.group_name
133
- };
134
- }
131
+ return {
132
+ id: info.group_id.toString(),
133
+ name: info.group_name,
134
+ avatar: `https://p.qlogo.cn/gh/${info.group_id}/${info.group_id}/640`
135
+ };
135
136
  };
136
137
  export const adaptChannel = (info) => {
137
- if (info.channel_id) {
138
- const channel = info;
139
- return {
140
- id: channel.channel_id,
141
- name: channel.channel_name,
142
- type: 0 /* Universal.Channel.Type.TEXT */
143
- };
144
- }
145
- else {
146
- const group = info;
147
- return {
148
- id: group.group_id.toString(),
149
- name: group.group_name,
150
- type: 0 /* Universal.Channel.Type.TEXT */
151
- };
152
- }
138
+ return {
139
+ id: info.group_id.toString(),
140
+ name: info.group_name,
141
+ type: 0 /* Universal.Channel.Type.TEXT */
142
+ };
153
143
  };
154
144
  export async function dispatchSession(bot, data) {
155
- if (data.self_tiny_id) {
156
- // don't dispatch any guild message without guild initialization
157
- bot = bot["guildBot"];
158
- if (!bot)
159
- return;
145
+ if (data.post_type === EventType.MESSAGE_SENT) {
146
+ bot.logger.warn("暂不支持自身消息事件的处理");
147
+ return;
160
148
  }
161
149
  const session = await adaptSession(bot, data);
162
150
  if (!session)
163
151
  return;
164
- session.setInternal("onebot", data);
165
152
  bot.dispatch(session);
166
153
  }
167
- export async function adaptSession(bot, data) {
154
+ export async function adaptSession(bot, event) {
168
155
  const session = bot.session();
169
- session.selfId = data.self_tiny_id ? data.self_tiny_id : "" + data.self_id;
170
- session.type = data.post_type;
171
- if (data.post_type === "message" || data.post_type === "message_sent") {
172
- await adaptMessage(bot, data, (session.event.message = {}), session.event);
173
- if (data.post_type === "message_sent" && !session.guildId) {
174
- session.channelId = "private:" + data.target_id;
175
- }
156
+ session.setInternal("onebot", event);
157
+ session.selfId = event.self_id.toString();
158
+ session.timestamp = event.time * 1000;
159
+ if (isMessageEvent(event)) {
176
160
  session.type = "message";
177
- session.subtype = data.message_type === "guild" ? "group" : data.message_type;
178
- session.isDirect = data.message_type === "private";
179
- session.subsubtype = data.message_type;
161
+ await decodeMessage(bot, event, (session.event.message = {}), session.event);
162
+ session.isDirect = event.message_type === "private";
180
163
  return session;
181
164
  }
182
- session.subtype = data.sub_type;
183
- if (data.user_id)
184
- session.userId = "" + data.user_id;
185
- if (data.group_id)
186
- session.guildId = session.channelId = "" + data.group_id;
187
- if (data.guild_id)
188
- session.guildId = "" + data.guild_id;
189
- if (data.channel_id)
190
- session.channelId = "" + data.channel_id;
191
- if (data.target_id)
192
- session["targetId"] = "" + data.target_id;
193
- if (data.operator_id)
194
- session.operatorId = "" + data.operator_id;
195
- if (data.message_id)
196
- session.messageId = "" + data.message_id;
197
- if (data.post_type === "request") {
198
- session.content = data.comment;
199
- session.messageId = data.flag;
200
- if (data.request_type === "friend") {
165
+ else if (isRequestEvent(event)) {
166
+ session.content = event.comment;
167
+ session.messageId = event.flag;
168
+ session.userId = event.user_id.toString();
169
+ if (isFriendRequest(event)) {
201
170
  session.type = "friend-request";
202
- session.channelId = `private:${session.userId}`;
171
+ session.channelId = `private:${event.user_id}`;
203
172
  }
204
- else if (data.sub_type === "add") {
205
- session.type = "guild-member-request";
206
- }
207
- else {
208
- session.type = "guild-request";
173
+ else if (isGroupRequest(event)) {
174
+ session.channelId = event.group_id.toString();
175
+ session.guildId = event.group_id.toString();
176
+ if (event.sub_type === "add") {
177
+ session.type = "guild-member-request";
178
+ }
179
+ else if (event.sub_type === "invite") {
180
+ session.type = "guild-request";
181
+ }
209
182
  }
210
183
  }
211
- else if (data.post_type === "notice") {
212
- switch (data.notice_type) {
213
- case "group_recall":
214
- session.type = "message-deleted";
215
- session.subtype = "group";
216
- break;
217
- case "friend_recall":
184
+ else if (isNoticeEvent(event)) {
185
+ switch (event.notice_type) {
186
+ case NoticeType.GROUP_RECALL:
218
187
  session.type = "message-deleted";
219
- session.subtype = "private";
220
- session.channelId = `private:${session.userId}`;
188
+ session.userId = event.user_id.toString();
189
+ session.operatorId = event.operator_id.toString();
190
+ session.messageId = event.message_id.toString();
191
+ session.channelId = event.group_id.toString();
192
+ session.guildId = event.group_id.toString();
193
+ session.isDirect = false;
221
194
  break;
222
- // from go-cqhttp source code, but not mentioned in official docs
223
- case "guild_channel_recall":
195
+ case NoticeType.FRIEND_RECALL:
224
196
  session.type = "message-deleted";
225
- session.subtype = "guild";
197
+ session.userId = event.user_id.toString();
198
+ session.operatorId = event.user_id.toString();
199
+ session.messageId = event.message_id.toString();
200
+ session.channelId = `private:${event.user_id}`;
201
+ session.isDirect = true;
226
202
  break;
227
- case "friend_add":
203
+ case NoticeType.FRIEND_ADD:
228
204
  session.type = "friend-added";
205
+ session.userId = event.user_id.toString();
229
206
  break;
230
- case "group_admin":
231
- session.type = "guild-member";
232
- session.subtype = "role";
207
+ case NoticeType.GROUP_ADMIN:
208
+ session.type = "guild-role-updated";
209
+ session.userId = event.user_id.toString();
210
+ session.guildId = event.group_id.toString();
211
+ session.channelId = event.group_id.toString();
212
+ session.roleId = event.sub_type === "set" ? GroupMemberRole.admin : GroupMemberRole.member;
233
213
  break;
234
- case "group_ban":
235
- session.type = "guild-member";
236
- session.subtype = "ban";
214
+ case NoticeType.GROUP_BAN:
215
+ session.type = "guild-member-updated";
216
+ session.userId = event.user_id.toString();
217
+ session.guildId = event.group_id.toString();
218
+ session.channelId = event.group_id.toString();
219
+ session.operatorId = event.operator_id.toString();
237
220
  break;
238
- case "group_decrease":
239
- session.type = session.userId === session.selfId ? "guild-deleted" : "guild-member-removed";
240
- session.subtype = session.userId === session.operatorId ? "active" : "passive";
221
+ case NoticeType.GROUP_DECREASE:
222
+ session.type = event.sub_type === "kick_me" ? "guild-removed" : "guild-member-removed";
223
+ session.userId = event.user_id.toString();
224
+ session.guildId = event.group_id.toString();
225
+ session.channelId = event.group_id.toString();
226
+ session.operatorId = event.operator_id.toString();
241
227
  break;
242
- case "group_increase":
243
- session.type = session.userId === session.selfId ? "guild-added" : "guild-member-added";
244
- session.subtype = session.userId === session.operatorId ? "active" : "passive";
228
+ case NoticeType.GROUP_INCREASE:
229
+ session.type = event.user_id.toString() === session.selfId ? "guild-added" : "guild-member-added";
230
+ session.userId = event.user_id.toString();
231
+ session.guildId = event.group_id.toString();
232
+ session.channelId = event.group_id.toString();
233
+ session.operatorId = event.operator_id.toString();
245
234
  break;
246
- case "group_card":
235
+ case NoticeType.GROUP_CARD:
247
236
  session.type = "guild-member-updated";
248
- session.subtype = "nickname";
237
+ session.userId = event.user_id.toString();
238
+ session.guildId = event.group_id.toString();
239
+ session.channelId = event.group_id.toString();
240
+ session.content = event.card_new;
249
241
  break;
250
- case "notify":
251
- session.type = "notice";
252
- session.subtype = hyphenate(data.sub_type);
253
- if (session.subtype === "poke") {
254
- session.channelId ||= `private:${session.userId}`;
255
- }
256
- else if (session.subtype === "honor") {
257
- session.subsubtype = hyphenate(data.honor_type);
242
+ case NoticeType.NOTIFY:
243
+ session.type = "onebot/notice";
244
+ switch (event.sub_type) {
245
+ case "poke":
246
+ session.type += "-poke";
247
+ session.userId = event.target_id.toString();
248
+ if (isGroupPokeNotice(event)) {
249
+ session.channelId = event.group_id.toString();
250
+ session.guildId = event.group_id.toString();
251
+ session.isDirect = false;
252
+ }
253
+ session.isDirect = true;
254
+ session.channelId = `private:${event.user_id}`;
255
+ break;
256
+ case "honor":
257
+ session.type += "-honor";
258
+ session.channelId = event.group_id.toString();
259
+ session.guildId = event.group_id.toString();
260
+ session.userId = event.user_id.toString();
261
+ session.content = event.honor_type;
262
+ break;
263
+ case "lucky_king":
264
+ session.type += "-lucky-king";
265
+ session.channelId = event.group_id.toString();
266
+ session.guildId = event.group_id.toString();
267
+ session.userId = event.target_id.toString();
268
+ break;
269
+ case "title":
270
+ session.type += "-title";
271
+ session.channelId = event.group_id.toString();
272
+ session.guildId = event.group_id.toString();
273
+ session.userId = event.user_id.toString();
274
+ session.content = event.title;
275
+ break;
258
276
  }
259
277
  break;
260
- case "message_reactions_updated":
261
- session.type = "onebot";
262
- session.subtype = "message-reactions-updated";
263
- break;
264
- case "channel_created":
265
- session.type = "onebot";
266
- session.subtype = "channel-created";
267
- break;
268
- case "channel_updated":
269
- session.type = "onebot";
270
- session.subtype = "channel-updated";
271
- break;
272
- case "channel_destroyed":
273
- session.type = "onebot";
274
- session.subtype = "channel-destroyed";
278
+ case NoticeType.GROUP_ESSENCE:
279
+ session.type = "onebot/group-essence";
280
+ session.userId = event.sender_id.toString();
281
+ session.guildId = event.group_id.toString();
282
+ session.channelId = event.group_id.toString();
283
+ session.messageId = event.message_id.toString();
284
+ session.operatorId = event.operator_id.toString();
275
285
  break;
276
286
  // https://github.com/koishijs/koishi-plugin-adapter-onebot/issues/33
277
287
  // case 'offline_file':
package/lib/ws.d.ts CHANGED
@@ -1,27 +1,27 @@
1
1
  import { WebSocketLayer } from "@koishijs/plugin-server";
2
2
  import { Adapter, Context, HTTP, Logger, Schema, Universal } from "koishi";
3
- import { OneBotBot } from "./bot";
4
- interface SharedConfig<T = "ws" | "ws-reverse"> {
3
+ import { OneBot } from "./bot";
4
+ export interface SharedConfig<T = "ws" | "ws-reverse"> {
5
5
  protocol: T;
6
6
  responseTimeout?: number;
7
7
  }
8
- export declare class WsClient<C extends Context = Context> extends Adapter.WsClient<C, OneBotBot<C, any>> {
9
- fork(ctx: C, bot: OneBotBot<C, OneBotBot.BaseConfig & WsClient.Options>): Promise<void>;
8
+ export declare class WsClient<C extends Context = Context> extends Adapter.WsClient<C, OneBot<C>> {
9
+ fork(ctx: C, bot: OneBot<C>): Promise<void>;
10
10
  accept(socket: Universal.WebSocket): void;
11
11
  prepare(): any;
12
- disconnect(bot: OneBotBot<C>): Promise<void>;
12
+ disconnect(bot: OneBot<C>): Promise<void>;
13
13
  }
14
14
  export declare namespace WsClient {
15
15
  interface Options extends SharedConfig<"ws">, HTTP.Config, Adapter.WsClientConfig {
16
16
  }
17
17
  const Options: Schema<Options>;
18
18
  }
19
- export declare class WsServer<C extends Context> extends Adapter<C, OneBotBot<C, OneBotBot.BaseConfig & WsServer.Options>> {
19
+ export declare class WsServer<C extends Context> extends Adapter<C, OneBot<C>> {
20
20
  static inject: string[];
21
21
  logger: Logger;
22
22
  wsServer?: WebSocketLayer;
23
- constructor(ctx: C, bot: OneBotBot<C>);
24
- disconnect(bot: OneBotBot<C>): Promise<void>;
23
+ constructor(ctx: C, bot: OneBot<C>);
24
+ disconnect(bot: OneBot<C>): Promise<void>;
25
25
  }
26
26
  export declare namespace WsServer {
27
27
  interface Options extends SharedConfig<"ws-reverse"> {
@@ -29,5 +29,4 @@ export declare namespace WsServer {
29
29
  }
30
30
  const Options: Schema<Options>;
31
31
  }
32
- export declare function accept(socket: Universal.WebSocket, bot: OneBotBot<Context, any>): void;
33
- export {};
32
+ export declare function accept(socket: Universal.WebSocket, bot: OneBot<Context>): void;
package/lib/ws.js CHANGED
@@ -47,10 +47,8 @@ export class WsServer extends Adapter {
47
47
  if (headers["x-client-role"] !== "Universal") {
48
48
  return socket.close(1008, "invalid x-client-role");
49
49
  }
50
- const selfId = headers["x-self-id"].toString();
51
- const bot = this.bots.find((bot) => bot.selfId === selfId);
52
- if (!bot)
53
- return socket.close(1008, "invalid x-self-id");
50
+ // const selfId = headers["x-self-id"].toString();
51
+ // if (!bot) return socket.close(1008, "invalid x-self-id");
54
52
  bot[kSocket] = socket;
55
53
  accept(socket, bot);
56
54
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrlingxd/koishi-plugin-adapter-onebot",
3
- "version": "0.1.0",
3
+ "version": "0.2.2",
4
4
  "description": "OneBot Adapter for Koishi",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  "homepage": "https://github.com/wling-art/koishi-plugin-adapter-onebot",
15
15
  "repository": {
16
16
  "type": "git",
17
- "url": "https://github.com/wling-art/koishi-plugin-adapter-onebot.git"
17
+ "url": "git+https://github.com/wling-art/koishi-plugin-adapter-onebot.git"
18
18
  },
19
19
  "bugs": {
20
20
  "url": "https://github.com/wling-art/koishi-plugin-adapter-onebot/issues"
@@ -41,25 +41,22 @@
41
41
  }
42
42
  },
43
43
  "scripts": {
44
- "build": "atsc -b",
45
- "lint": "eslint --ext=ts --cache"
44
+ "build": "atsc -b"
46
45
  },
47
46
  "devDependencies": {
48
47
  "@cordisjs/eslint-config": "^1.1.1",
49
48
  "@koishijs/plugin-server": "^3.2.7",
50
- "@types/node": "^25.0.3",
49
+ "@types/node": "^25.0.9",
51
50
  "atsc": "^2.1.0",
52
51
  "esbuild": "^0.27.2",
53
52
  "esbuild-register": "^3.6.0",
54
53
  "eslint": "^9.39.2",
55
- "koishi": "^4.18.9",
54
+ "koishi": "^4.18.10",
55
+ "qface": "^1.4.1",
56
56
  "typescript": "^5.9.3",
57
57
  "yml-register": "^1.2.5"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "koishi": "^4.18.6"
61
- },
62
- "dependencies": {
63
- "qface": "^1.4.1"
64
61
  }
65
62
  }
package/lib/bot/base.d.ts DELETED
@@ -1,36 +0,0 @@
1
- import { Bot, Context, Schema, Universal } from "koishi";
2
- import * as OneBot from "../utils";
3
- import { OneBotMessageEncoder } from "./message";
4
- export declare class BaseBot<C extends Context = Context, T extends BaseBot.Config = BaseBot.Config> extends Bot<C, T> {
5
- static MessageEncoder: typeof OneBotMessageEncoder;
6
- static inject: string[];
7
- parent?: BaseBot;
8
- internal: OneBot.Internal;
9
- createDirectChannel(userId: string): Promise<{
10
- id: string;
11
- type: Universal.Channel.Type;
12
- }>;
13
- getMessage(channelId: string, messageId: string): Promise<Universal.Message>;
14
- deleteMessage(channelId: string, messageId: string): Promise<void>;
15
- getLogin(): Promise<Universal.Login>;
16
- getUser(userId: string): Promise<Universal.User>;
17
- getFriendList(): Promise<{
18
- data: Universal.User[];
19
- }>;
20
- handleFriendRequest(messageId: string, approve: boolean, comment?: string): Promise<void>;
21
- handleGuildRequest(messageId: string, approve: boolean, comment?: string): Promise<void>;
22
- handleGuildMemberRequest(messageId: string, approve: boolean, comment?: string): Promise<void>;
23
- deleteFriend(userId: string): Promise<void>;
24
- getMessageList(channelId: string, before?: string, direction?: Universal.Direction): Promise<{
25
- data: Universal.Message[];
26
- }>;
27
- }
28
- export declare namespace BaseBot {
29
- interface Config {
30
- advanced?: AdvancedConfig;
31
- }
32
- interface AdvancedConfig {
33
- splitMixedContent?: boolean;
34
- }
35
- const AdvancedConfig: Schema<AdvancedConfig>;
36
- }