@snowluma/sdk 0.1.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.
Files changed (120) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +259 -0
  3. package/VERSIONING.md +43 -0
  4. package/dist/actions.d.ts +4 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +121 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/client/api-client.d.ts +151 -0
  9. package/dist/client/api-client.d.ts.map +1 -0
  10. package/dist/client/api-client.js +331 -0
  11. package/dist/client/api-client.js.map +1 -0
  12. package/dist/client/http-client.d.ts +25 -0
  13. package/dist/client/http-client.d.ts.map +1 -0
  14. package/dist/client/http-client.js +81 -0
  15. package/dist/client/http-client.js.map +1 -0
  16. package/dist/client/index.d.ts +6 -0
  17. package/dist/client/index.d.ts.map +1 -0
  18. package/dist/client/index.js +4 -0
  19. package/dist/client/index.js.map +1 -0
  20. package/dist/client/websocket-client.d.ts +65 -0
  21. package/dist/client/websocket-client.d.ts.map +1 -0
  22. package/dist/client/websocket-client.js +309 -0
  23. package/dist/client/websocket-client.js.map +1 -0
  24. package/dist/client/websocket-types.d.ts +53 -0
  25. package/dist/client/websocket-types.d.ts.map +1 -0
  26. package/dist/client/websocket-types.js +2 -0
  27. package/dist/client/websocket-types.js.map +1 -0
  28. package/dist/client/websocket-utils.d.ts +10 -0
  29. package/dist/client/websocket-utils.d.ts.map +1 -0
  30. package/dist/client/websocket-utils.js +68 -0
  31. package/dist/client/websocket-utils.js.map +1 -0
  32. package/dist/emitter.d.ts +11 -0
  33. package/dist/emitter.d.ts.map +1 -0
  34. package/dist/emitter.js +34 -0
  35. package/dist/emitter.js.map +1 -0
  36. package/dist/errors.d.ts +39 -0
  37. package/dist/errors.d.ts.map +1 -0
  38. package/dist/errors.js +71 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/events/command.d.ts +4 -0
  41. package/dist/events/command.d.ts.map +1 -0
  42. package/dist/events/command.js +46 -0
  43. package/dist/events/command.js.map +1 -0
  44. package/dist/events/context.d.ts +6 -0
  45. package/dist/events/context.d.ts.map +1 -0
  46. package/dist/events/context.js +65 -0
  47. package/dist/events/context.js.map +1 -0
  48. package/dist/events/guards.d.ts +11 -0
  49. package/dist/events/guards.d.ts.map +1 -0
  50. package/dist/events/guards.js +26 -0
  51. package/dist/events/guards.js.map +1 -0
  52. package/dist/events/index.d.ts +5 -0
  53. package/dist/events/index.d.ts.map +1 -0
  54. package/dist/events/index.js +5 -0
  55. package/dist/events/index.js.map +1 -0
  56. package/dist/events/types.d.ts +52 -0
  57. package/dist/events/types.d.ts.map +1 -0
  58. package/dist/events/types.js +2 -0
  59. package/dist/events/types.js.map +1 -0
  60. package/dist/index.d.ts +13 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +8 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/internal/abort.d.ts +11 -0
  65. package/dist/internal/abort.d.ts.map +1 -0
  66. package/dist/internal/abort.js +62 -0
  67. package/dist/internal/abort.js.map +1 -0
  68. package/dist/internal/json.d.ts +8 -0
  69. package/dist/internal/json.d.ts.map +1 -0
  70. package/dist/internal/json.js +60 -0
  71. package/dist/internal/json.js.map +1 -0
  72. package/dist/messages/chain.d.ts +100 -0
  73. package/dist/messages/chain.d.ts.map +1 -0
  74. package/dist/messages/chain.js +220 -0
  75. package/dist/messages/chain.js.map +1 -0
  76. package/dist/messages/cq-format.d.ts +5 -0
  77. package/dist/messages/cq-format.d.ts.map +1 -0
  78. package/dist/messages/cq-format.js +23 -0
  79. package/dist/messages/cq-format.js.map +1 -0
  80. package/dist/messages/cq.d.ts +5 -0
  81. package/dist/messages/cq.d.ts.map +1 -0
  82. package/dist/messages/cq.js +98 -0
  83. package/dist/messages/cq.js.map +1 -0
  84. package/dist/messages/index.d.ts +29 -0
  85. package/dist/messages/index.d.ts.map +1 -0
  86. package/dist/messages/index.js +10 -0
  87. package/dist/messages/index.js.map +1 -0
  88. package/dist/messages/segments.d.ts +24 -0
  89. package/dist/messages/segments.d.ts.map +1 -0
  90. package/dist/messages/segments.js +65 -0
  91. package/dist/messages/segments.js.map +1 -0
  92. package/dist/types/actions.d.ts +474 -0
  93. package/dist/types/actions.d.ts.map +1 -0
  94. package/dist/types/actions.js +2 -0
  95. package/dist/types/actions.js.map +1 -0
  96. package/dist/types/events.d.ts +60 -0
  97. package/dist/types/events.d.ts.map +1 -0
  98. package/dist/types/events.js +2 -0
  99. package/dist/types/events.js.map +1 -0
  100. package/dist/types/index.d.ts +7 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +7 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/types/json.d.ts +37 -0
  105. package/dist/types/json.d.ts.map +1 -0
  106. package/dist/types/json.js +2 -0
  107. package/dist/types/json.js.map +1 -0
  108. package/dist/types/messages.d.ts +90 -0
  109. package/dist/types/messages.d.ts.map +1 -0
  110. package/dist/types/messages.js +2 -0
  111. package/dist/types/messages.js.map +1 -0
  112. package/dist/types/params.d.ts +228 -0
  113. package/dist/types/params.d.ts.map +1 -0
  114. package/dist/types/params.js +2 -0
  115. package/dist/types/params.js.map +1 -0
  116. package/dist/types/results.d.ts +83 -0
  117. package/dist/types/results.d.ts.map +1 -0
  118. package/dist/types/results.js +2 -0
  119. package/dist/types/results.js.map +1 -0
  120. package/package.json +95 -0
@@ -0,0 +1,100 @@
1
+ import type { AnyMessageSegment, ContactSegment, ImageSegment, JsonObject, LocationSegment, MessageChainLike, MusicSegment, OutgoingMessage, RecordSegment, RequestOptions, ShareSegment, VideoSegment, XmlSegment } from '../types/index';
2
+ export interface MessageChainSender {
3
+ sendGroupMessage(groupId: number, message: OutgoingMessage, options?: RequestOptions & {
4
+ autoEscape?: boolean;
5
+ }): Promise<unknown>;
6
+ sendPrivateMessage(userId: number, message: OutgoingMessage, options?: RequestOptions & {
7
+ autoEscape?: boolean;
8
+ }): Promise<unknown>;
9
+ }
10
+ /**
11
+ * Immutable fluent builder for OneBot message segments.
12
+ *
13
+ * The generic state tracks single-use segments such as reply(), so TypeScript
14
+ * can reject duplicate reply segments in normal chained calls.
15
+ */
16
+ export declare class MessageChain<THasReply extends boolean = false> implements MessageChainLike {
17
+ private readonly items;
18
+ private readonly used;
19
+ private readonly replyStateBrand?;
20
+ private constructor();
21
+ static empty(): MessageChain<false>;
22
+ /** Number of segments currently in the chain. */
23
+ get length(): number;
24
+ /** True when no segment has been appended. */
25
+ get isEmpty(): boolean;
26
+ /** Appends a text segment. */
27
+ text(text?: string): MessageChain<THasReply>;
28
+ /** Appends a newline text segment. */
29
+ br(): MessageChain<THasReply>;
30
+ face(id: number | string): MessageChain<THasReply>;
31
+ /** Mentions a user or everyone in a group. */
32
+ at(qq: number | 'all', options?: {
33
+ name?: string;
34
+ uid?: string;
35
+ }): MessageChain<THasReply>;
36
+ atAll(): MessageChain<THasReply>;
37
+ /** Adds a reply segment. A chain can contain at most one reply segment. */
38
+ reply(this: MessageChain<false>, id: number | string): MessageChain<true>;
39
+ /** Appends an image segment from a URL, local path, file id, or base64 URI. */
40
+ image(file: string, options?: Omit<ImageSegment['data'], 'file'>): MessageChain<THasReply>;
41
+ record(file: string, options?: Omit<RecordSegment['data'], 'file'>): MessageChain<THasReply>;
42
+ video(file: string, options?: Omit<VideoSegment['data'], 'file'>): MessageChain<THasReply>;
43
+ json(data: string | JsonObject): MessageChain<THasReply>;
44
+ xml(data: string, options?: Omit<XmlSegment['data'], 'data'>): MessageChain<THasReply>;
45
+ poke(type: number | string, id?: number | string): MessageChain<THasReply>;
46
+ forward(id: string): MessageChain<THasReply>;
47
+ node(userId: number, nickname: string, content: OutgoingMessage): MessageChain<THasReply>;
48
+ share(options: ShareSegment['data']): MessageChain<THasReply>;
49
+ music(options: MusicSegment['data']): MessageChain<THasReply>;
50
+ location(options: LocationSegment['data']): MessageChain<THasReply>;
51
+ contact(type: ContactSegment['data']['type'], id: number | string): MessageChain<THasReply>;
52
+ raw<TType extends string, TData extends JsonObject>(type: TType, data: TData): MessageChain<THasReply>;
53
+ /** Appends another outgoing message while preserving single-use segment checks. */
54
+ append(messageInput: OutgoingMessage): MessageChain<THasReply>;
55
+ /** Returns a fresh segment array suitable for OneBot array message format. */
56
+ build(): AnyMessageSegment[];
57
+ toArray(): AnyMessageSegment[];
58
+ toSegments(): AnyMessageSegment[];
59
+ toJSON(): AnyMessageSegment[];
60
+ toString(): string;
61
+ /** Sends this chain to a group through a compatible SnowLuma client. */
62
+ sendToGroup(client: MessageChainSender, groupId: number, options?: RequestOptions & {
63
+ autoEscape?: boolean;
64
+ }): Promise<unknown>;
65
+ /** Sends this chain to a private chat through a compatible SnowLuma client. */
66
+ sendToPrivate(client: MessageChainSender, userId: number, options?: RequestOptions & {
67
+ autoEscape?: boolean;
68
+ }): Promise<unknown>;
69
+ [Symbol.iterator](): IterableIterator<AnyMessageSegment>;
70
+ private addFromSegment;
71
+ private addSegment;
72
+ }
73
+ export declare function chain(): MessageChain<false>;
74
+ /** Starts a message chain with a text segment. */
75
+ export declare function text(value?: string): MessageChain<false>;
76
+ export declare function br(): MessageChain<false>;
77
+ export declare function face(id: number | string): MessageChain<false>;
78
+ export declare function at(qq: number | 'all', options?: {
79
+ name?: string;
80
+ uid?: string;
81
+ }): MessageChain<false>;
82
+ export declare function atAll(): MessageChain<false>;
83
+ export declare function reply(id: number | string): MessageChain<true>;
84
+ /** Starts a message chain with an image segment. */
85
+ export declare function image(file: string, options?: Omit<ImageSegment['data'], 'file'>): MessageChain<false>;
86
+ export declare function record(file: string, options?: Omit<RecordSegment['data'], 'file'>): MessageChain<false>;
87
+ export declare function video(file: string, options?: Omit<VideoSegment['data'], 'file'>): MessageChain<false>;
88
+ export declare function json(data: string | JsonObject): MessageChain<false>;
89
+ export declare function xml(data: string, options?: Omit<XmlSegment['data'], 'data'>): MessageChain<false>;
90
+ export declare function poke(type: number | string, id?: number | string): MessageChain<false>;
91
+ export declare function forward(id: string): MessageChain<false>;
92
+ export declare function node(userId: number, nickname: string, content: OutgoingMessage): MessageChain<false>;
93
+ export declare function share(options: ShareSegment['data']): MessageChain<false>;
94
+ export declare function music(options: MusicSegment['data']): MessageChain<false>;
95
+ export declare function location(options: LocationSegment['data']): MessageChain<false>;
96
+ export declare function contact(type: ContactSegment['data']['type'], id: number | string): MessageChain<false>;
97
+ export declare function raw<TType extends string, TData extends JsonObject>(type: TType, data: TData): MessageChain<false>;
98
+ /** Normalizes a string, segment, segment array, or MessageChain into OneBot output. */
99
+ export declare function normalizeMessage(input: OutgoingMessage): string | AnyMessageSegment[];
100
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/messages/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import { segments } from './segments';
2
+ import { segmentsToCQString } from './cq-format';
3
+ const SINGLE_USE_TYPES = new Set(['reply']);
4
+ /**
5
+ * Immutable fluent builder for OneBot message segments.
6
+ *
7
+ * The generic state tracks single-use segments such as reply(), so TypeScript
8
+ * can reject duplicate reply segments in normal chained calls.
9
+ */
10
+ export class MessageChain {
11
+ items;
12
+ used;
13
+ replyStateBrand;
14
+ constructor(items = [], used = new Set()) {
15
+ this.items = items;
16
+ this.used = used;
17
+ }
18
+ static empty() {
19
+ return new MessageChain();
20
+ }
21
+ /** Number of segments currently in the chain. */
22
+ get length() {
23
+ return this.items.length;
24
+ }
25
+ /** True when no segment has been appended. */
26
+ get isEmpty() {
27
+ return this.items.length === 0;
28
+ }
29
+ /** Appends a text segment. */
30
+ text(text = '') {
31
+ return this.addSegment(segments.text(text));
32
+ }
33
+ /** Appends a newline text segment. */
34
+ br() {
35
+ return this.text('\n');
36
+ }
37
+ face(id) {
38
+ return this.addSegment(segments.face(id));
39
+ }
40
+ /** Mentions a user or everyone in a group. */
41
+ at(qq, options = {}) {
42
+ return this.addSegment(segments.at(qq, options));
43
+ }
44
+ atAll() {
45
+ return this.at('all');
46
+ }
47
+ /** Adds a reply segment. A chain can contain at most one reply segment. */
48
+ reply(id) {
49
+ return this.addSegment(segments.reply(id), 'reply');
50
+ }
51
+ /** Appends an image segment from a URL, local path, file id, or base64 URI. */
52
+ image(file, options = {}) {
53
+ return this.addSegment(segments.image(file, options));
54
+ }
55
+ record(file, options = {}) {
56
+ return this.addSegment(segments.record(file, options));
57
+ }
58
+ video(file, options = {}) {
59
+ return this.addSegment(segments.video(file, options));
60
+ }
61
+ json(data) {
62
+ return this.addSegment(segments.json(data));
63
+ }
64
+ xml(data, options = {}) {
65
+ return this.addSegment(segments.xml(data, options));
66
+ }
67
+ poke(type, id) {
68
+ return this.addSegment(segments.poke(type, id));
69
+ }
70
+ forward(id) {
71
+ return this.addSegment(segments.forward(id));
72
+ }
73
+ node(userId, nickname, content) {
74
+ return this.addSegment(segments.node(userId, nickname, content));
75
+ }
76
+ share(options) {
77
+ return this.addSegment(segments.share(options));
78
+ }
79
+ music(options) {
80
+ return this.addSegment(segments.music(options));
81
+ }
82
+ location(options) {
83
+ return this.addSegment(segments.location(options));
84
+ }
85
+ contact(type, id) {
86
+ return this.addSegment(segments.contact(type, id));
87
+ }
88
+ raw(type, data) {
89
+ return this.addSegment(segments.raw(type, data), type);
90
+ }
91
+ /** Appends another outgoing message while preserving single-use segment checks. */
92
+ append(messageInput) {
93
+ let next = this;
94
+ const normalized = normalizeMessage(messageInput);
95
+ if (typeof normalized === 'string') {
96
+ return next.text(normalized);
97
+ }
98
+ for (const segment of normalized) {
99
+ next = next.addFromSegment(segment);
100
+ }
101
+ return next;
102
+ }
103
+ /** Returns a fresh segment array suitable for OneBot array message format. */
104
+ build() {
105
+ return this.toSegments();
106
+ }
107
+ toArray() {
108
+ return this.toSegments();
109
+ }
110
+ toSegments() {
111
+ return [...this.items];
112
+ }
113
+ toJSON() {
114
+ return this.toSegments();
115
+ }
116
+ toString() {
117
+ return segmentsToCQString(this.items);
118
+ }
119
+ /** Sends this chain to a group through a compatible SnowLuma client. */
120
+ sendToGroup(client, groupId, options) {
121
+ return client.sendGroupMessage(groupId, this, options);
122
+ }
123
+ /** Sends this chain to a private chat through a compatible SnowLuma client. */
124
+ sendToPrivate(client, userId, options) {
125
+ return client.sendPrivateMessage(userId, this, options);
126
+ }
127
+ [Symbol.iterator]() {
128
+ return this.items[Symbol.iterator]();
129
+ }
130
+ addFromSegment(segment) {
131
+ return this.addSegment(segment, segment.type);
132
+ }
133
+ addSegment(segment, singleUseType) {
134
+ if (singleUseType && SINGLE_USE_TYPES.has(singleUseType) && this.used.has(singleUseType)) {
135
+ throw new Error(`Message segment "${singleUseType}" can only appear once in a chain`);
136
+ }
137
+ const nextUsed = new Set(this.used);
138
+ if (singleUseType && SINGLE_USE_TYPES.has(singleUseType)) {
139
+ nextUsed.add(singleUseType);
140
+ }
141
+ return new MessageChain([...this.items, segment], nextUsed);
142
+ }
143
+ }
144
+ export function chain() {
145
+ return MessageChain.empty();
146
+ }
147
+ /** Starts a message chain with a text segment. */
148
+ export function text(value = '') {
149
+ return chain().text(value);
150
+ }
151
+ export function br() {
152
+ return chain().br();
153
+ }
154
+ export function face(id) {
155
+ return chain().face(id);
156
+ }
157
+ export function at(qq, options = {}) {
158
+ return chain().at(qq, options);
159
+ }
160
+ export function atAll() {
161
+ return chain().atAll();
162
+ }
163
+ export function reply(id) {
164
+ return chain().reply(id);
165
+ }
166
+ /** Starts a message chain with an image segment. */
167
+ export function image(file, options = {}) {
168
+ return chain().image(file, options);
169
+ }
170
+ export function record(file, options = {}) {
171
+ return chain().record(file, options);
172
+ }
173
+ export function video(file, options = {}) {
174
+ return chain().video(file, options);
175
+ }
176
+ export function json(data) {
177
+ return chain().json(data);
178
+ }
179
+ export function xml(data, options = {}) {
180
+ return chain().xml(data, options);
181
+ }
182
+ export function poke(type, id) {
183
+ return chain().poke(type, id);
184
+ }
185
+ export function forward(id) {
186
+ return chain().forward(id);
187
+ }
188
+ export function node(userId, nickname, content) {
189
+ return chain().node(userId, nickname, content);
190
+ }
191
+ export function share(options) {
192
+ return chain().share(options);
193
+ }
194
+ export function music(options) {
195
+ return chain().music(options);
196
+ }
197
+ export function location(options) {
198
+ return chain().location(options);
199
+ }
200
+ export function contact(type, id) {
201
+ return chain().contact(type, id);
202
+ }
203
+ export function raw(type, data) {
204
+ return chain().raw(type, data);
205
+ }
206
+ /** Normalizes a string, segment, segment array, or MessageChain into OneBot output. */
207
+ export function normalizeMessage(input) {
208
+ if (typeof input === 'string')
209
+ return input;
210
+ if (isMessageChainLike(input))
211
+ return input.toSegments();
212
+ return Array.isArray(input) ? input : [input];
213
+ }
214
+ function isMessageChainLike(value) {
215
+ return typeof value === 'object'
216
+ && value !== null
217
+ && 'toSegments' in value
218
+ && typeof value.toSegments === 'function';
219
+ }
220
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/messages/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { KnownMessageSegment, MessageSegment } from '../types/index';
2
+ export declare function escapeCqText(text: string): string;
3
+ export declare function escapeCqParam(text: string): string;
4
+ export declare function segmentsToCQString(segments: Array<KnownMessageSegment | MessageSegment>): string;
5
+ //# sourceMappingURL=cq-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cq-format.d.ts","sourceRoot":"","sources":["../../src/messages/cq-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,GAAG,cAAc,CAAC,GAAG,MAAM,CAEhG"}
@@ -0,0 +1,23 @@
1
+ export function escapeCqText(text) {
2
+ return text
3
+ .replace(/&/g, '&amp;')
4
+ .replace(/\[/g, '&#91;')
5
+ .replace(/\]/g, '&#93;');
6
+ }
7
+ export function escapeCqParam(text) {
8
+ return escapeCqText(text).replace(/,/g, '&#44;');
9
+ }
10
+ export function segmentsToCQString(segments) {
11
+ return segments.map(segmentToCq).join('');
12
+ }
13
+ function segmentToCq(segment) {
14
+ if (segment.type === 'text') {
15
+ return escapeCqText(String(segment.data.text ?? ''));
16
+ }
17
+ const params = Object.entries(segment.data)
18
+ .filter(([, value]) => value !== undefined && value !== null)
19
+ .map(([key, value]) => `${key}=${escapeCqParam(String(value))}`)
20
+ .join(',');
21
+ return params ? `[CQ:${segment.type},${params}]` : `[CQ:${segment.type}]`;
22
+ }
23
+ //# sourceMappingURL=cq-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cq-format.js","sourceRoot":"","sources":["../../src/messages/cq-format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAqD;IACtF,OAAO,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,WAAW,CAAC,OAA6C;IAChE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SAC/D,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AnyMessageSegment, OutgoingMessage } from '../types/index';
2
+ export declare function toCQString(input: OutgoingMessage): string;
3
+ export declare function fromCQString(input: string): import("./chain").MessageChain<false>;
4
+ export declare function parseSegments(input: string): AnyMessageSegment[];
5
+ //# sourceMappingURL=cq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cq.d.ts","sourceRoot":"","sources":["../../src/messages/cq.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIzE,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAMzD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,yCAsBzC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAEhE"}
@@ -0,0 +1,98 @@
1
+ import { normalizeMessage, chain } from './chain';
2
+ import { escapeCqText, segmentsToCQString } from './cq-format';
3
+ import { segments } from './segments';
4
+ const CQ_REGEX = /\[CQ:([a-zA-Z0-9_.-]+)(?:,([^\]]*))?\]/g;
5
+ export function toCQString(input) {
6
+ if (typeof input === 'string')
7
+ return escapeCqText(input);
8
+ const normalized = normalizeMessage(input);
9
+ return typeof normalized === 'string'
10
+ ? escapeCqText(normalized)
11
+ : segmentsToCQString(normalized);
12
+ }
13
+ export function fromCQString(input) {
14
+ let current = chain();
15
+ let lastIndex = 0;
16
+ for (const match of input.matchAll(CQ_REGEX)) {
17
+ const index = match.index ?? 0;
18
+ if (index > lastIndex) {
19
+ const textValue = cqUnescape(input.slice(lastIndex, index));
20
+ if (textValue)
21
+ current = current.text(textValue);
22
+ }
23
+ const segment = segmentFromCq(match[1] ?? '', parseCQParams(match[2] ?? ''));
24
+ if (segment)
25
+ current = current.append(segment);
26
+ lastIndex = index + match[0].length;
27
+ }
28
+ if (lastIndex < input.length) {
29
+ const textValue = cqUnescape(input.slice(lastIndex));
30
+ if (textValue)
31
+ current = current.text(textValue);
32
+ }
33
+ return current;
34
+ }
35
+ export function parseSegments(input) {
36
+ return fromCQString(input).toSegments();
37
+ }
38
+ function parseCQParams(raw) {
39
+ const params = {};
40
+ if (!raw)
41
+ return params;
42
+ for (const pair of raw.split(',')) {
43
+ const eq = pair.indexOf('=');
44
+ if (eq <= 0)
45
+ continue;
46
+ params[pair.slice(0, eq)] = cqUnescapeParam(pair.slice(eq + 1));
47
+ }
48
+ return params;
49
+ }
50
+ function cqUnescape(text) {
51
+ return text
52
+ .replace(/&#91;/g, '[')
53
+ .replace(/&#93;/g, ']')
54
+ .replace(/&amp;/g, '&');
55
+ }
56
+ function cqUnescapeParam(text) {
57
+ return cqUnescape(text).replace(/&#44;/g, ',');
58
+ }
59
+ function segmentFromCq(type, data) {
60
+ switch (type) {
61
+ case 'text':
62
+ return segments.text(data.text ?? '');
63
+ case 'face':
64
+ return segments.face(data.id ?? '0');
65
+ case 'at':
66
+ if (data.qq === 'all')
67
+ return segments.at('all');
68
+ {
69
+ const qq = Number(data.qq);
70
+ return Number.isFinite(qq) && qq > 0
71
+ ? segments.at(qq, { name: data.name, uid: data.uid })
72
+ : segments.raw(type, data);
73
+ }
74
+ case 'reply':
75
+ return segments.reply(data.id ?? '0');
76
+ case 'image':
77
+ return segments.image(data.file ?? data.url ?? '', {
78
+ url: data.url,
79
+ type: data.type === 'flash' ? 'flash' : undefined,
80
+ summary: data.summary,
81
+ });
82
+ case 'record':
83
+ return segments.record(data.file ?? data.url ?? '', { url: data.url });
84
+ case 'video':
85
+ return segments.video(data.file ?? data.url ?? '', { url: data.url, thumb: data.thumb });
86
+ case 'json':
87
+ return segments.json(data.data ?? '');
88
+ case 'xml':
89
+ return segments.xml(data.data ?? '', { id: data.id });
90
+ case 'poke':
91
+ return segments.poke(data.type ?? data.id ?? '0', data.id);
92
+ case 'forward':
93
+ return segments.forward(data.id ?? data.res_id ?? data.forward_id ?? '');
94
+ default:
95
+ return segments.raw(type, data);
96
+ }
97
+ }
98
+ //# sourceMappingURL=cq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cq.js","sourceRoot":"","sources":["../../src/messages/cq.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { segments } from './segments';
2
+ export { MessageChain } from './chain';
3
+ export { at, atAll, br, chain, contact, face, forward, image, json, location, music, node, normalizeMessage, poke, raw, record, reply, share, text, video, xml, } from './chain';
4
+ export { escapeCqParam, escapeCqText } from './cq-format';
5
+ export { fromCQString, parseSegments, toCQString } from './cq';
6
+ export { segments };
7
+ export declare const message: {
8
+ text(text: string): import("..").TextSegment;
9
+ face(id: number | string): import("..").FaceSegment;
10
+ at(qq: number | "all", options?: {
11
+ name?: string;
12
+ uid?: string;
13
+ }): import("..").AtSegment;
14
+ reply(id: number | string): import("..").ReplySegment;
15
+ image(file: string, options?: Omit<import("..").ImageSegment["data"], "file">): import("..").ImageSegment;
16
+ record(file: string, options?: Omit<import("..").RecordSegment["data"], "file">): import("..").RecordSegment;
17
+ video(file: string, options?: Omit<import("..").VideoSegment["data"], "file">): import("..").VideoSegment;
18
+ json(data: string | import("..").JsonObject): import("..").JsonSegment;
19
+ xml(data: string, options?: Omit<import("..").XmlSegment["data"], "data">): import("..").XmlSegment;
20
+ poke(type: number | string, id?: number | string): import("..").PokeSegment;
21
+ forward(id: string): import("..").ForwardSegment;
22
+ node(userId: number, nickname: string, content: import("..").OutgoingMessage): import("..").NodeSegment;
23
+ share(options: import("..").ShareSegment["data"]): import("..").ShareSegment;
24
+ music(options: import("..").MusicSegment["data"]): import("..").MusicSegment;
25
+ location(options: import("..").LocationSegment["data"]): import("..").LocationSegment;
26
+ contact(type: import("..").ContactSegment["data"]["type"], id: number | string): import("..").ContactSegment;
27
+ raw<TType extends string, TData extends import("..").JsonObject>(type: TType, data: TData): import("..").MessageSegment<TType, TData>;
28
+ };
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,EAAE,EACF,KAAK,EACL,EAAE,EACF,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,GACJ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,eAAO,MAAM,OAAO;;;;YAGwO,CAAC;WAAa,CAAC;;;;;;;;;;;;;;kBAAkvD,mCAAuB;;CADnhE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { segments } from './segments';
2
+ export { MessageChain } from './chain';
3
+ export { at, atAll, br, chain, contact, face, forward, image, json, location, music, node, normalizeMessage, poke, raw, record, reply, share, text, video, xml, } from './chain';
4
+ export { escapeCqParam, escapeCqText } from './cq-format';
5
+ export { fromCQString, parseSegments, toCQString } from './cq';
6
+ export { segments };
7
+ export const message = {
8
+ ...segments,
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,EAAE,EACF,KAAK,EACL,EAAE,EACF,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,GACJ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,QAAQ;CACZ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AtSegment, ContactSegment, FaceSegment, ForwardSegment, ImageSegment, JsonObject, JsonSegment, LocationSegment, MessageSegment, MusicSegment, NodeSegment, OutgoingMessage, PokeSegment, RecordSegment, ReplySegment, ShareSegment, TextSegment, VideoSegment, XmlSegment } from '../types/index';
2
+ export declare const segments: {
3
+ text(text: string): TextSegment;
4
+ face(id: number | string): FaceSegment;
5
+ at(qq: number | "all", options?: {
6
+ name?: string;
7
+ uid?: string;
8
+ }): AtSegment;
9
+ reply(id: number | string): ReplySegment;
10
+ image(file: string, options?: Omit<ImageSegment["data"], "file">): ImageSegment;
11
+ record(file: string, options?: Omit<RecordSegment["data"], "file">): RecordSegment;
12
+ video(file: string, options?: Omit<VideoSegment["data"], "file">): VideoSegment;
13
+ json(data: string | JsonObject): JsonSegment;
14
+ xml(data: string, options?: Omit<XmlSegment["data"], "data">): XmlSegment;
15
+ poke(type: number | string, id?: number | string): PokeSegment;
16
+ forward(id: string): ForwardSegment;
17
+ node(userId: number, nickname: string, content: OutgoingMessage): NodeSegment;
18
+ share(options: ShareSegment["data"]): ShareSegment;
19
+ music(options: MusicSegment["data"]): MusicSegment;
20
+ location(options: LocationSegment["data"]): LocationSegment;
21
+ contact(type: ContactSegment["data"]["type"], id: number | string): ContactSegment;
22
+ raw<TType extends string, TData extends JsonObject>(type: TType, data: TData): MessageSegment<TType, TData>;
23
+ };
24
+ //# sourceMappingURL=segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/messages/segments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACX,MAAM,gBAAgB,CAAC;AAMxB,eAAO,MAAM,QAAQ;eACR,MAAM,GAAG,WAAW;aAItB,MAAM,GAAG,MAAM,GAAG,WAAW;WAI/B,MAAM,GAAG,KAAK,YAAW;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAQ,SAAS;cAOtE,MAAM,GAAG,MAAM,GAAG,YAAY;gBAI5B,MAAM,YAAW,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAQ,YAAY;iBAItE,MAAM,YAAW,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAQ,aAAa;gBAI1E,MAAM,YAAW,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAQ,YAAY;eAIxE,MAAM,GAAG,UAAU,GAAG,WAAW;cAIlC,MAAM,YAAW,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAQ,UAAU;eAIlE,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG,MAAM,GAAG,WAAW;gBAMlD,MAAM,GAAG,cAAc;iBAItB,MAAM,YAAY,MAAM,WAAW,eAAe,GAAG,WAAW;mBAI9D,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY;mBAInC,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY;sBAIhC,eAAe,CAAC,MAAM,CAAC,GAAG,eAAe;kBAI7C,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,GAAG,cAAc;QAI9E,KAAK,SAAS,MAAM,EAAE,KAAK,SAAS,UAAU,QAAQ,KAAK,QAAQ,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;CAG5G,CAAC"}
@@ -0,0 +1,65 @@
1
+ function seg(type, data) {
2
+ return { type, data };
3
+ }
4
+ export const segments = {
5
+ text(text) {
6
+ return seg('text', { text });
7
+ },
8
+ face(id) {
9
+ return seg('face', { id: String(id) });
10
+ },
11
+ at(qq, options = {}) {
12
+ const data = { qq: String(qq) };
13
+ if (options.name)
14
+ data.name = options.name;
15
+ if (options.uid)
16
+ data.uid = options.uid;
17
+ return seg('at', data);
18
+ },
19
+ reply(id) {
20
+ return seg('reply', { id: String(id) });
21
+ },
22
+ image(file, options = {}) {
23
+ return seg('image', { file, ...options });
24
+ },
25
+ record(file, options = {}) {
26
+ return seg('record', { file, ...options });
27
+ },
28
+ video(file, options = {}) {
29
+ return seg('video', { file, ...options });
30
+ },
31
+ json(data) {
32
+ return seg('json', { data: typeof data === 'string' ? data : JSON.stringify(data) });
33
+ },
34
+ xml(data, options = {}) {
35
+ return seg('xml', { data, ...options });
36
+ },
37
+ poke(type, id) {
38
+ const data = { type };
39
+ if (id !== undefined)
40
+ data.id = id;
41
+ return seg('poke', data);
42
+ },
43
+ forward(id) {
44
+ return seg('forward', { id, res_id: id, forward_id: id });
45
+ },
46
+ node(userId, nickname, content) {
47
+ return seg('node', { user_id: userId, nickname, content });
48
+ },
49
+ share(options) {
50
+ return seg('share', options);
51
+ },
52
+ music(options) {
53
+ return seg('music', options);
54
+ },
55
+ location(options) {
56
+ return seg('location', options);
57
+ },
58
+ contact(type, id) {
59
+ return seg('contact', { type, id });
60
+ },
61
+ raw(type, data) {
62
+ return seg(type, data);
63
+ },
64
+ };
65
+ //# sourceMappingURL=segments.js.map