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

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 +209 -201
  37. package/lib/ws.d.ts +9 -10
  38. package/lib/ws.js +2 -4
  39. package/package.json +4 -7
  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,91 @@
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
- },
32
- name: user.nickname,
33
- roles: user.roles?.map((r) => r.role_name) || []
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),
31
+ nick: user.card || user.nickname,
32
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${user.user_id}&spec=640`,
33
+ roles: [user.role]
34
34
  });
35
- export async function adaptMessage(bot, data, message = {}, payload = message) {
36
- message.id = message.messageId = data.message_id.toString();
35
+ export async function decodeMessage(bot, event, message = {}, payload = message) {
36
+ const [guildId, channelId] = decodeGroupChannelId(event);
37
37
  // 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
- }
38
+ const chain = CQCode.parse(event.message);
39
+ // 映射
53
40
  message.elements = h.transform(chain, {
41
+ text(attrs) {
42
+ return h.text(attrs.text);
43
+ },
54
44
  at(attrs) {
55
45
  if (attrs.qq !== "all")
56
- return h.at(attrs.qq, { name: attrs.name });
57
- return h("at", { type: "all" });
46
+ return h.at(attrs.qq, {
47
+ name: attrs.name,
48
+ ...omit(attrs, [attrs.qq ? "qq" : undefined, attrs.name ? "name" : undefined])
49
+ });
50
+ return h.at("at", {
51
+ type: "all",
52
+ ...omit(attrs, [attrs.qq ? "qq" : undefined, attrs.name ? "name" : undefined])
53
+ });
58
54
  },
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))]);
55
+ face(attrs) {
56
+ const name = qface.get(attrs.id)?.QDes.slice(1);
57
+ return h("face", { id: attrs.id, name, platform: bot.platform }, [h.image(qface.getUrl(attrs.id))]);
62
58
  },
63
59
  image(attrs) {
64
- return h("img", {
65
- src: attrs.url || attrs.file,
66
- ...omit(attrs, ["url"])
60
+ return h.image(attrs.url || attrs.file, {
61
+ title: attrs.name || undefined,
62
+ ...omit(attrs, [
63
+ attrs.name ? "name" : undefined,
64
+ attrs.url ? "url" : undefined,
65
+ attrs.file ? "file" : undefined
66
+ ])
67
67
  });
68
68
  },
69
69
  record(attrs) {
70
- return h("audio", {
71
- src: attrs.url || attrs.file,
72
- ...omit(attrs, ["url"])
70
+ return h.audio(attrs.url || attrs.file, {
71
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
73
72
  });
74
73
  },
75
74
  video(attrs) {
76
- return h("video", {
77
- src: attrs.url || attrs.file,
78
- ...omit(attrs, ["url"])
75
+ return h.video(attrs.url || attrs.file, {
76
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
79
77
  });
80
78
  },
81
79
  file(attrs) {
82
- return h("file", {
83
- src: attrs.url || attrs.file,
84
- ...omit(attrs, ["url"])
80
+ return h.file(attrs.url || attrs.file, {
81
+ ...omit(attrs, [attrs.url ? "url" : undefined, attrs.file ? "file" : undefined])
85
82
  });
83
+ },
84
+ reply(attrs) {
85
+ return h("reply", { id: attrs.id });
86
86
  }
87
87
  });
88
- const [guildId, channelId] = decodeGuildChannelId(data);
89
- if (message.elements[0]?.type === "reply") {
88
+ if (message.elements[0].type === "reply") {
90
89
  const reply = message.elements.shift();
91
90
  message.quote = await bot.getMessage(channelId, reply.attrs.id).catch((error) => {
92
91
  bot.logger.warn(error);
@@ -94,184 +93,193 @@ export async function adaptMessage(bot, data, message = {}, payload = message) {
94
93
  });
95
94
  }
96
95
  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 && {
96
+ payload.timestamp = event.time * 1000;
97
+ message.id = event.message_id.toString();
98
+ payload.channel = {
104
99
  id: channelId,
105
- type: guildId ? 0 /* Universal.Channel.Type.TEXT */ : 1 /* Universal.Channel.Type.DIRECT */
100
+ type: event.message_type === "group" ? 0 /* Universal.Channel.Type.TEXT */ : 1 /* Universal.Channel.Type.DIRECT */,
101
+ name: event.message_type === "group" ? event.group_name || undefined : event.sender.nickname
106
102
  };
103
+ payload.user = decodeUser(event);
104
+ if (isGroupMessageEvent(event)) {
105
+ payload.guild = {
106
+ id: event.group_id.toString(),
107
+ name: event.group_name || undefined,
108
+ avatar: `https://p.qlogo.cn/gh/${event.group_id}/${event.group_id}/640`
109
+ };
110
+ payload.member = {
111
+ user: decodeUser(event),
112
+ name: event.sender.nickname,
113
+ nick: event.sender.card,
114
+ avatar: `https://q.qlogo.cn/headimg_dl?dst_uin=${event.user_id}&spec=640`,
115
+ roles: [event.sender.role]
116
+ };
117
+ }
107
118
  return message;
108
119
  }
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()];
120
+ const decodeGroupChannelId = (event) => {
121
+ if (event.message_type === "group") {
122
+ return [event.group_id.toString(), event.group_id.toString()];
115
123
  }
116
124
  else {
117
- return [undefined, "private:" + data.sender.user_id];
125
+ return [undefined, "private:" + event.sender.user_id];
118
126
  }
119
127
  };
120
128
  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
- }
129
+ return {
130
+ id: info.group_id.toString(),
131
+ name: info.group_name,
132
+ avatar: `https://p.qlogo.cn/gh/${info.group_id}/${info.group_id}/640`
133
+ };
135
134
  };
136
135
  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
- }
136
+ return {
137
+ id: info.group_id.toString(),
138
+ name: info.group_name,
139
+ type: 0 /* Universal.Channel.Type.TEXT */
140
+ };
153
141
  };
154
142
  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;
143
+ if (data.post_type === EventType.MESSAGE_SENT) {
144
+ bot.logger.warn("暂不支持自身消息事件的处理");
145
+ return;
160
146
  }
161
147
  const session = await adaptSession(bot, data);
162
148
  if (!session)
163
149
  return;
164
- session.setInternal("onebot", data);
165
150
  bot.dispatch(session);
166
151
  }
167
- export async function adaptSession(bot, data) {
152
+ export async function adaptSession(bot, event) {
168
153
  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
- }
154
+ session.setInternal("onebot", event);
155
+ session.selfId = event.self_id.toString();
156
+ session.timestamp = event.time * 1000;
157
+ if (isMessageEvent(event)) {
176
158
  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;
159
+ await decodeMessage(bot, event, (session.event.message = {}), session.event);
160
+ session.isDirect = event.message_type === "private";
180
161
  return session;
181
162
  }
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") {
163
+ else if (isRequestEvent(event)) {
164
+ session.content = event.comment;
165
+ session.messageId = event.flag;
166
+ session.userId = event.user_id.toString();
167
+ if (isFriendRequest(event)) {
201
168
  session.type = "friend-request";
202
- session.channelId = `private:${session.userId}`;
169
+ session.channelId = `private:${event.user_id}`;
203
170
  }
204
- else if (data.sub_type === "add") {
205
- session.type = "guild-member-request";
206
- }
207
- else {
208
- session.type = "guild-request";
171
+ else if (isGroupRequest(event)) {
172
+ session.channelId = event.group_id.toString();
173
+ session.guildId = event.group_id.toString();
174
+ if (event.sub_type === "add") {
175
+ session.type = "guild-member-request";
176
+ }
177
+ else if (event.sub_type === "invite") {
178
+ session.type = "guild-request";
179
+ }
209
180
  }
210
181
  }
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":
182
+ else if (isNoticeEvent(event)) {
183
+ switch (event.notice_type) {
184
+ case NoticeType.GROUP_RECALL:
218
185
  session.type = "message-deleted";
219
- session.subtype = "private";
220
- session.channelId = `private:${session.userId}`;
186
+ session.userId = event.user_id.toString();
187
+ session.operatorId = event.operator_id.toString();
188
+ session.messageId = event.message_id.toString();
189
+ session.channelId = event.group_id.toString();
190
+ session.guildId = event.group_id.toString();
191
+ session.isDirect = false;
221
192
  break;
222
- // from go-cqhttp source code, but not mentioned in official docs
223
- case "guild_channel_recall":
193
+ case NoticeType.FRIEND_RECALL:
224
194
  session.type = "message-deleted";
225
- session.subtype = "guild";
195
+ session.userId = event.user_id.toString();
196
+ session.operatorId = event.user_id.toString();
197
+ session.messageId = event.message_id.toString();
198
+ session.channelId = `private:${event.user_id}`;
199
+ session.isDirect = true;
226
200
  break;
227
- case "friend_add":
201
+ case NoticeType.FRIEND_ADD:
228
202
  session.type = "friend-added";
203
+ session.userId = event.user_id.toString();
229
204
  break;
230
- case "group_admin":
231
- session.type = "guild-member";
232
- session.subtype = "role";
205
+ case NoticeType.GROUP_ADMIN:
206
+ session.type = "guild-role-updated";
207
+ session.userId = event.user_id.toString();
208
+ session.guildId = event.group_id.toString();
209
+ session.channelId = event.group_id.toString();
210
+ session.roleId = event.sub_type === "set" ? GroupMemberRole.admin : GroupMemberRole.member;
233
211
  break;
234
- case "group_ban":
235
- session.type = "guild-member";
236
- session.subtype = "ban";
212
+ case NoticeType.GROUP_BAN:
213
+ session.type = "guild-member-updated";
214
+ session.userId = event.user_id.toString();
215
+ session.guildId = event.group_id.toString();
216
+ session.channelId = event.group_id.toString();
217
+ session.operatorId = event.operator_id.toString();
237
218
  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";
219
+ case NoticeType.GROUP_DECREASE:
220
+ session.type = event.sub_type === "kick_me" ? "guild-removed" : "guild-member-removed";
221
+ session.userId = event.user_id.toString();
222
+ session.guildId = event.group_id.toString();
223
+ session.channelId = event.group_id.toString();
224
+ session.operatorId = event.operator_id.toString();
241
225
  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";
226
+ case NoticeType.GROUP_INCREASE:
227
+ session.type = event.user_id.toString() === session.selfId ? "guild-added" : "guild-member-added";
228
+ session.userId = event.user_id.toString();
229
+ session.guildId = event.group_id.toString();
230
+ session.channelId = event.group_id.toString();
231
+ session.operatorId = event.operator_id.toString();
245
232
  break;
246
- case "group_card":
233
+ case NoticeType.GROUP_CARD:
247
234
  session.type = "guild-member-updated";
248
- session.subtype = "nickname";
235
+ session.userId = event.user_id.toString();
236
+ session.guildId = event.group_id.toString();
237
+ session.channelId = event.group_id.toString();
238
+ session.content = event.card_new;
249
239
  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);
240
+ case NoticeType.NOTIFY:
241
+ session.type = "onebot/notice";
242
+ switch (event.sub_type) {
243
+ case "poke":
244
+ session.type += "-poke";
245
+ session.userId = event.target_id.toString();
246
+ if (isGroupPokeNotice(event)) {
247
+ session.channelId = event.group_id.toString();
248
+ session.guildId = event.group_id.toString();
249
+ session.isDirect = false;
250
+ }
251
+ session.isDirect = true;
252
+ session.channelId = `private:${event.user_id}`;
253
+ break;
254
+ case "honor":
255
+ session.type += "-honor";
256
+ session.channelId = event.group_id.toString();
257
+ session.guildId = event.group_id.toString();
258
+ session.userId = event.user_id.toString();
259
+ session.content = event.honor_type;
260
+ break;
261
+ case "lucky_king":
262
+ session.type += "-lucky-king";
263
+ session.channelId = event.group_id.toString();
264
+ session.guildId = event.group_id.toString();
265
+ session.userId = event.target_id.toString();
266
+ break;
267
+ case "title":
268
+ session.type += "-title";
269
+ session.channelId = event.group_id.toString();
270
+ session.guildId = event.group_id.toString();
271
+ session.userId = event.user_id.toString();
272
+ session.content = event.title;
273
+ break;
258
274
  }
259
275
  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";
276
+ case NoticeType.GROUP_ESSENCE:
277
+ session.type = "onebot/group-essence";
278
+ session.userId = event.sender_id.toString();
279
+ session.guildId = event.group_id.toString();
280
+ session.channelId = event.group_id.toString();
281
+ session.messageId = event.message_id.toString();
282
+ session.operatorId = event.operator_id.toString();
275
283
  break;
276
284
  // https://github.com/koishijs/koishi-plugin-adapter-onebot/issues/33
277
285
  // 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.1",
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,8 +41,7 @@
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",
@@ -53,13 +52,11 @@
53
52
  "esbuild-register": "^3.6.0",
54
53
  "eslint": "^9.39.2",
55
54
  "koishi": "^4.18.9",
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
- }