@elizaos/plugin-line 2.0.0-alpha.7 → 2.0.11-beta.7
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 +185 -0
- package/package.json +28 -12
- package/dist/accounts.d.ts +0 -152
- package/dist/accounts.d.ts.map +0 -1
- package/dist/accounts.js +0 -258
- package/dist/accounts.js.map +0 -1
- package/dist/actions/index.d.ts +0 -7
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/index.js +0 -7
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/sendFlexMessage.d.ts +0 -6
- package/dist/actions/sendFlexMessage.d.ts.map +0 -1
- package/dist/actions/sendFlexMessage.js +0 -204
- package/dist/actions/sendFlexMessage.js.map +0 -1
- package/dist/actions/sendLocation.d.ts +0 -6
- package/dist/actions/sendLocation.d.ts.map +0 -1
- package/dist/actions/sendLocation.js +0 -181
- package/dist/actions/sendLocation.js.map +0 -1
- package/dist/actions/sendMessage.d.ts +0 -6
- package/dist/actions/sendMessage.d.ts.map +0 -1
- package/dist/actions/sendMessage.js +0 -172
- package/dist/actions/sendMessage.js.map +0 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -49
- package/dist/index.js.map +0 -1
- package/dist/messaging.d.ts +0 -142
- package/dist/messaging.d.ts.map +0 -1
- package/dist/messaging.js +0 -357
- package/dist/messaging.js.map +0 -1
- package/dist/providers/chatContext.d.ts +0 -6
- package/dist/providers/chatContext.d.ts.map +0 -1
- package/dist/providers/chatContext.js +0 -86
- package/dist/providers/chatContext.js.map +0 -1
- package/dist/providers/index.d.ts +0 -6
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -6
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/userContext.d.ts +0 -6
- package/dist/providers/userContext.d.ts.map +0 -1
- package/dist/providers/userContext.js +0 -71
- package/dist/providers/userContext.js.map +0 -1
- package/dist/service.d.ts +0 -102
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -433
- package/dist/service.js.map +0 -1
- package/dist/types.d.ts +0 -279
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -106
- package/dist/types.js.map +0 -1
package/dist/service.d.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LINE service implementation for ElizaOS.
|
|
3
|
-
*/
|
|
4
|
-
import type { IAgentRuntime } from "@elizaos/core";
|
|
5
|
-
import { Service } from "@elizaos/core";
|
|
6
|
-
import { type MiddlewareConfig, middleware, type WebhookEvent } from "@line/bot-sdk";
|
|
7
|
-
import { type ILineService, type LineFlexMessage, type LineGroup, type LineLocationMessage, type LineMessageSendOptions, type LineSendResult, type LineSettings, type LineTemplateMessage, type LineUser } from "./types.js";
|
|
8
|
-
/**
|
|
9
|
-
* LINE messaging service for ElizaOS agents.
|
|
10
|
-
*/
|
|
11
|
-
export declare class LineService extends Service implements ILineService {
|
|
12
|
-
static serviceType: string;
|
|
13
|
-
capabilityDescription: string;
|
|
14
|
-
private settings;
|
|
15
|
-
private client;
|
|
16
|
-
private connected;
|
|
17
|
-
constructor(runtime?: IAgentRuntime);
|
|
18
|
-
/**
|
|
19
|
-
* Start the LINE service.
|
|
20
|
-
*/
|
|
21
|
-
static start(runtime: IAgentRuntime): Promise<Service>;
|
|
22
|
-
/**
|
|
23
|
-
* Initialize the service.
|
|
24
|
-
*/
|
|
25
|
-
private initialize;
|
|
26
|
-
/**
|
|
27
|
-
* Stop the LINE service.
|
|
28
|
-
*/
|
|
29
|
-
stop(): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Check if the service is connected.
|
|
32
|
-
*/
|
|
33
|
-
isConnected(): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Get bot info.
|
|
36
|
-
*/
|
|
37
|
-
getBotInfo(): Promise<LineUser | null>;
|
|
38
|
-
/**
|
|
39
|
-
* Send a text message.
|
|
40
|
-
*/
|
|
41
|
-
sendMessage(to: string, text: string, options?: LineMessageSendOptions): Promise<LineSendResult>;
|
|
42
|
-
/**
|
|
43
|
-
* Send multiple messages.
|
|
44
|
-
*/
|
|
45
|
-
sendMessages(to: string, messages: Array<{
|
|
46
|
-
type: string;
|
|
47
|
-
[key: string]: unknown;
|
|
48
|
-
}>): Promise<LineSendResult>;
|
|
49
|
-
/**
|
|
50
|
-
* Send a flex message.
|
|
51
|
-
*/
|
|
52
|
-
sendFlexMessage(to: string, flex: LineFlexMessage): Promise<LineSendResult>;
|
|
53
|
-
/**
|
|
54
|
-
* Send a template message.
|
|
55
|
-
*/
|
|
56
|
-
sendTemplateMessage(to: string, template: LineTemplateMessage): Promise<LineSendResult>;
|
|
57
|
-
/**
|
|
58
|
-
* Send a location message.
|
|
59
|
-
*/
|
|
60
|
-
sendLocationMessage(to: string, location: LineLocationMessage): Promise<LineSendResult>;
|
|
61
|
-
/**
|
|
62
|
-
* Reply to a message using reply token.
|
|
63
|
-
*/
|
|
64
|
-
replyMessage(replyToken: string, messages: Array<{
|
|
65
|
-
type: string;
|
|
66
|
-
[key: string]: unknown;
|
|
67
|
-
}>): Promise<LineSendResult>;
|
|
68
|
-
/**
|
|
69
|
-
* Get user profile.
|
|
70
|
-
*/
|
|
71
|
-
getUserProfile(userId: string): Promise<LineUser | null>;
|
|
72
|
-
/**
|
|
73
|
-
* Get group info.
|
|
74
|
-
*/
|
|
75
|
-
getGroupInfo(groupId: string): Promise<LineGroup | null>;
|
|
76
|
-
/**
|
|
77
|
-
* Leave a group or room.
|
|
78
|
-
*/
|
|
79
|
-
leaveChat(chatId: string, chatType: "group" | "room"): Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Get the middleware config for webhook verification.
|
|
82
|
-
*/
|
|
83
|
-
getMiddlewareConfig(): MiddlewareConfig;
|
|
84
|
-
/**
|
|
85
|
-
* Create Express middleware for webhook handling.
|
|
86
|
-
*/
|
|
87
|
-
createMiddleware(): ReturnType<typeof middleware>;
|
|
88
|
-
/**
|
|
89
|
-
* Handle webhook events.
|
|
90
|
-
*/
|
|
91
|
-
handleWebhookEvents(events: WebhookEvent[]): Promise<void>;
|
|
92
|
-
/**
|
|
93
|
-
* Get current settings.
|
|
94
|
-
*/
|
|
95
|
-
getSettings(): LineSettings | null;
|
|
96
|
-
private loadSettings;
|
|
97
|
-
private validateSettings;
|
|
98
|
-
private pushMessages;
|
|
99
|
-
private handleWebhookEvent;
|
|
100
|
-
private handleMessageEvent;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
DELETED
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LINE service implementation for ElizaOS.
|
|
3
|
-
*/
|
|
4
|
-
import { logger, Service } from "@elizaos/core";
|
|
5
|
-
import { messagingApi, middleware, } from "@line/bot-sdk";
|
|
6
|
-
import { getChatTypeFromId, LINE_SERVICE_NAME, LineApiError, LineConfigurationError, LineEventTypes, MAX_LINE_BATCH_SIZE, splitMessageForLine, } from "./types.js";
|
|
7
|
-
/**
|
|
8
|
-
* LINE messaging service for ElizaOS agents.
|
|
9
|
-
*/
|
|
10
|
-
export class LineService extends Service {
|
|
11
|
-
static serviceType = LINE_SERVICE_NAME;
|
|
12
|
-
capabilityDescription = "The agent is able to send and receive messages via LINE";
|
|
13
|
-
settings = null;
|
|
14
|
-
client = null;
|
|
15
|
-
connected = false;
|
|
16
|
-
constructor(runtime) {
|
|
17
|
-
super(runtime);
|
|
18
|
-
if (!runtime)
|
|
19
|
-
return;
|
|
20
|
-
this.settings = this.loadSettings();
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Start the LINE service.
|
|
24
|
-
*/
|
|
25
|
-
static async start(runtime) {
|
|
26
|
-
const service = new LineService(runtime);
|
|
27
|
-
await service.initialize();
|
|
28
|
-
return service;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Initialize the service.
|
|
32
|
-
*/
|
|
33
|
-
async initialize() {
|
|
34
|
-
if (!this.runtime)
|
|
35
|
-
return;
|
|
36
|
-
logger.info("Starting LINE service...");
|
|
37
|
-
// Load settings
|
|
38
|
-
if (!this.settings) {
|
|
39
|
-
this.settings = this.loadSettings();
|
|
40
|
-
}
|
|
41
|
-
this.validateSettings();
|
|
42
|
-
// Initialize LINE client
|
|
43
|
-
this.client = new messagingApi.MessagingApiClient({
|
|
44
|
-
channelAccessToken: this.settings.channelAccessToken,
|
|
45
|
-
});
|
|
46
|
-
this.connected = true;
|
|
47
|
-
logger.info("LINE service started");
|
|
48
|
-
// Emit connection ready event
|
|
49
|
-
if (this.runtime) {
|
|
50
|
-
this.runtime.emitEvent([LineEventTypes.CONNECTION_READY], {
|
|
51
|
-
runtime: this.runtime,
|
|
52
|
-
source: "line",
|
|
53
|
-
service: this,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Stop the LINE service.
|
|
59
|
-
*/
|
|
60
|
-
async stop() {
|
|
61
|
-
logger.info("Stopping LINE service...");
|
|
62
|
-
this.connected = false;
|
|
63
|
-
this.client = null;
|
|
64
|
-
this.settings = null;
|
|
65
|
-
logger.info("LINE service stopped");
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Check if the service is connected.
|
|
69
|
-
*/
|
|
70
|
-
isConnected() {
|
|
71
|
-
return this.connected && this.client !== null;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Get bot info.
|
|
75
|
-
*/
|
|
76
|
-
async getBotInfo() {
|
|
77
|
-
if (!this.client) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const info = await this.client.getBotInfo();
|
|
81
|
-
return {
|
|
82
|
-
userId: info.userId,
|
|
83
|
-
displayName: info.displayName,
|
|
84
|
-
pictureUrl: info.pictureUrl,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Send a text message.
|
|
89
|
-
*/
|
|
90
|
-
async sendMessage(to, text, options) {
|
|
91
|
-
if (!this.client) {
|
|
92
|
-
return { success: false, error: "Service not connected" };
|
|
93
|
-
}
|
|
94
|
-
const chunks = splitMessageForLine(text);
|
|
95
|
-
const messages = chunks.map((chunk) => ({
|
|
96
|
-
type: "text",
|
|
97
|
-
text: chunk,
|
|
98
|
-
}));
|
|
99
|
-
// Add quick replies to last message if provided
|
|
100
|
-
if (options?.quickReplyItems && messages.length > 0) {
|
|
101
|
-
const lastIdx = messages.length - 1;
|
|
102
|
-
// Cast to unknown first to avoid strict type checking with LINE SDK types
|
|
103
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
-
messages[lastIdx].quickReply = {
|
|
105
|
-
items: options.quickReplyItems,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
return this.pushMessages(to, messages);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Send multiple messages.
|
|
112
|
-
*/
|
|
113
|
-
async sendMessages(to, messages) {
|
|
114
|
-
return this.pushMessages(to, messages);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Send a flex message.
|
|
118
|
-
*/
|
|
119
|
-
async sendFlexMessage(to, flex) {
|
|
120
|
-
if (!this.client) {
|
|
121
|
-
return { success: false, error: "Service not connected" };
|
|
122
|
-
}
|
|
123
|
-
const message = {
|
|
124
|
-
type: "flex",
|
|
125
|
-
altText: flex.altText.slice(0, 400),
|
|
126
|
-
contents: flex.contents,
|
|
127
|
-
};
|
|
128
|
-
return this.pushMessages(to, [message]);
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Send a template message.
|
|
132
|
-
*/
|
|
133
|
-
async sendTemplateMessage(to, template) {
|
|
134
|
-
if (!this.client) {
|
|
135
|
-
return { success: false, error: "Service not connected" };
|
|
136
|
-
}
|
|
137
|
-
const message = {
|
|
138
|
-
type: "template",
|
|
139
|
-
altText: template.altText.slice(0, 400),
|
|
140
|
-
template: template.template,
|
|
141
|
-
};
|
|
142
|
-
return this.pushMessages(to, [message]);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Send a location message.
|
|
146
|
-
*/
|
|
147
|
-
async sendLocationMessage(to, location) {
|
|
148
|
-
if (!this.client) {
|
|
149
|
-
return { success: false, error: "Service not connected" };
|
|
150
|
-
}
|
|
151
|
-
const message = {
|
|
152
|
-
type: "location",
|
|
153
|
-
title: location.title.slice(0, 100),
|
|
154
|
-
address: location.address.slice(0, 100),
|
|
155
|
-
latitude: location.latitude,
|
|
156
|
-
longitude: location.longitude,
|
|
157
|
-
};
|
|
158
|
-
return this.pushMessages(to, [message]);
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Reply to a message using reply token.
|
|
162
|
-
*/
|
|
163
|
-
async replyMessage(replyToken, messages) {
|
|
164
|
-
if (!this.client) {
|
|
165
|
-
return { success: false, error: "Service not connected" };
|
|
166
|
-
}
|
|
167
|
-
await this.client.replyMessage({
|
|
168
|
-
replyToken,
|
|
169
|
-
messages: messages.slice(0, MAX_LINE_BATCH_SIZE),
|
|
170
|
-
});
|
|
171
|
-
return {
|
|
172
|
-
success: true,
|
|
173
|
-
messageId: "reply",
|
|
174
|
-
chatId: "reply",
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Get user profile.
|
|
179
|
-
*/
|
|
180
|
-
async getUserProfile(userId) {
|
|
181
|
-
if (!this.client) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
const profile = await this.client.getProfile(userId);
|
|
185
|
-
return {
|
|
186
|
-
userId: profile.userId,
|
|
187
|
-
displayName: profile.displayName,
|
|
188
|
-
pictureUrl: profile.pictureUrl,
|
|
189
|
-
statusMessage: profile.statusMessage,
|
|
190
|
-
language: profile.language,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Get group info.
|
|
195
|
-
*/
|
|
196
|
-
async getGroupInfo(groupId) {
|
|
197
|
-
if (!this.client) {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
const chatType = getChatTypeFromId(groupId);
|
|
201
|
-
if (chatType === "group") {
|
|
202
|
-
const summary = await this.client.getGroupSummary(groupId);
|
|
203
|
-
return {
|
|
204
|
-
groupId: summary.groupId,
|
|
205
|
-
groupName: summary.groupName,
|
|
206
|
-
pictureUrl: summary.pictureUrl,
|
|
207
|
-
type: "group",
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
else if (chatType === "room") {
|
|
211
|
-
// Rooms don't have summary, just return ID
|
|
212
|
-
return {
|
|
213
|
-
groupId,
|
|
214
|
-
type: "room",
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
return null;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Leave a group or room.
|
|
221
|
-
*/
|
|
222
|
-
async leaveChat(chatId, chatType) {
|
|
223
|
-
if (!this.client) {
|
|
224
|
-
throw new LineApiError("Service not connected");
|
|
225
|
-
}
|
|
226
|
-
if (chatType === "group") {
|
|
227
|
-
await this.client.leaveGroup(chatId);
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
await this.client.leaveRoom(chatId);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Get the middleware config for webhook verification.
|
|
235
|
-
*/
|
|
236
|
-
getMiddlewareConfig() {
|
|
237
|
-
if (!this.settings) {
|
|
238
|
-
throw new LineConfigurationError("Service not configured");
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
channelSecret: this.settings.channelSecret,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Create Express middleware for webhook handling.
|
|
246
|
-
*/
|
|
247
|
-
createMiddleware() {
|
|
248
|
-
return middleware(this.getMiddlewareConfig());
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Handle webhook events.
|
|
252
|
-
*/
|
|
253
|
-
async handleWebhookEvents(events) {
|
|
254
|
-
if (!this.runtime) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
for (const event of events) {
|
|
258
|
-
await this.handleWebhookEvent(event);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Get current settings.
|
|
263
|
-
*/
|
|
264
|
-
getSettings() {
|
|
265
|
-
return this.settings;
|
|
266
|
-
}
|
|
267
|
-
// Private methods
|
|
268
|
-
loadSettings() {
|
|
269
|
-
if (!this.runtime) {
|
|
270
|
-
throw new LineConfigurationError("Runtime not initialized");
|
|
271
|
-
}
|
|
272
|
-
const getStringSetting = (key) => {
|
|
273
|
-
const value = this.runtime?.getSetting(key);
|
|
274
|
-
return typeof value === "string" ? value : "";
|
|
275
|
-
};
|
|
276
|
-
const channelAccessToken = getStringSetting("LINE_CHANNEL_ACCESS_TOKEN") || process.env.LINE_CHANNEL_ACCESS_TOKEN || "";
|
|
277
|
-
const channelSecret = getStringSetting("LINE_CHANNEL_SECRET") || process.env.LINE_CHANNEL_SECRET || "";
|
|
278
|
-
const webhookPath = getStringSetting("LINE_WEBHOOK_PATH") || process.env.LINE_WEBHOOK_PATH || "/webhooks/line";
|
|
279
|
-
const dmPolicyRaw = getStringSetting("LINE_DM_POLICY") || process.env.LINE_DM_POLICY || "pairing";
|
|
280
|
-
const dmPolicy = dmPolicyRaw;
|
|
281
|
-
const groupPolicyRaw = getStringSetting("LINE_GROUP_POLICY") || process.env.LINE_GROUP_POLICY || "allowlist";
|
|
282
|
-
const groupPolicy = groupPolicyRaw;
|
|
283
|
-
const allowFromRaw = getStringSetting("LINE_ALLOW_FROM") || process.env.LINE_ALLOW_FROM || "";
|
|
284
|
-
const allowFrom = allowFromRaw
|
|
285
|
-
.split(",")
|
|
286
|
-
.map((s) => s.trim())
|
|
287
|
-
.filter(Boolean);
|
|
288
|
-
const enabledRaw = getStringSetting("LINE_ENABLED") || process.env.LINE_ENABLED || "true";
|
|
289
|
-
const enabled = enabledRaw !== "false";
|
|
290
|
-
return {
|
|
291
|
-
channelAccessToken,
|
|
292
|
-
channelSecret,
|
|
293
|
-
webhookPath,
|
|
294
|
-
dmPolicy,
|
|
295
|
-
groupPolicy,
|
|
296
|
-
allowFrom,
|
|
297
|
-
enabled,
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
validateSettings() {
|
|
301
|
-
if (!this.settings) {
|
|
302
|
-
throw new LineConfigurationError("Settings not loaded");
|
|
303
|
-
}
|
|
304
|
-
if (!this.settings.channelAccessToken) {
|
|
305
|
-
throw new LineConfigurationError("LINE_CHANNEL_ACCESS_TOKEN is required", "LINE_CHANNEL_ACCESS_TOKEN");
|
|
306
|
-
}
|
|
307
|
-
if (!this.settings.channelSecret) {
|
|
308
|
-
throw new LineConfigurationError("LINE_CHANNEL_SECRET is required", "LINE_CHANNEL_SECRET");
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
async pushMessages(to, messages) {
|
|
312
|
-
if (!this.client) {
|
|
313
|
-
return { success: false, error: "Service not connected" };
|
|
314
|
-
}
|
|
315
|
-
// Send in batches of 5
|
|
316
|
-
for (let i = 0; i < messages.length; i += MAX_LINE_BATCH_SIZE) {
|
|
317
|
-
const batch = messages.slice(i, i + MAX_LINE_BATCH_SIZE);
|
|
318
|
-
await this.client.pushMessage({
|
|
319
|
-
to,
|
|
320
|
-
messages: batch,
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
// Emit sent event
|
|
324
|
-
if (this.runtime) {
|
|
325
|
-
this.runtime.emitEvent(LineEventTypes.MESSAGE_SENT, {
|
|
326
|
-
runtime: this.runtime,
|
|
327
|
-
source: "line",
|
|
328
|
-
to,
|
|
329
|
-
messageCount: messages.length,
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
return {
|
|
333
|
-
success: true,
|
|
334
|
-
messageId: Date.now().toString(),
|
|
335
|
-
chatId: to,
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
async handleWebhookEvent(event) {
|
|
339
|
-
if (!this.runtime) {
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
switch (event.type) {
|
|
343
|
-
case "message":
|
|
344
|
-
await this.handleMessageEvent(event);
|
|
345
|
-
break;
|
|
346
|
-
case "follow":
|
|
347
|
-
this.runtime.emitEvent([LineEventTypes.FOLLOW], {
|
|
348
|
-
runtime: this.runtime,
|
|
349
|
-
source: "line",
|
|
350
|
-
userId: event.source.userId,
|
|
351
|
-
timestamp: event.timestamp,
|
|
352
|
-
});
|
|
353
|
-
break;
|
|
354
|
-
case "unfollow":
|
|
355
|
-
this.runtime.emitEvent([LineEventTypes.UNFOLLOW], {
|
|
356
|
-
runtime: this.runtime,
|
|
357
|
-
source: "line",
|
|
358
|
-
userId: event.source.userId,
|
|
359
|
-
timestamp: event.timestamp,
|
|
360
|
-
});
|
|
361
|
-
break;
|
|
362
|
-
case "join":
|
|
363
|
-
this.runtime.emitEvent([LineEventTypes.JOIN_GROUP], {
|
|
364
|
-
runtime: this.runtime,
|
|
365
|
-
source: "line",
|
|
366
|
-
groupId: event.source.type === "group"
|
|
367
|
-
? event.source.groupId
|
|
368
|
-
: event.source.type === "room"
|
|
369
|
-
? event.source.roomId
|
|
370
|
-
: undefined,
|
|
371
|
-
type: event.source.type,
|
|
372
|
-
timestamp: event.timestamp,
|
|
373
|
-
});
|
|
374
|
-
break;
|
|
375
|
-
case "leave":
|
|
376
|
-
this.runtime.emitEvent([LineEventTypes.LEAVE_GROUP], {
|
|
377
|
-
runtime: this.runtime,
|
|
378
|
-
source: "line",
|
|
379
|
-
groupId: event.source.type === "group"
|
|
380
|
-
? event.source.groupId
|
|
381
|
-
: event.source.type === "room"
|
|
382
|
-
? event.source.roomId
|
|
383
|
-
: undefined,
|
|
384
|
-
type: event.source.type,
|
|
385
|
-
timestamp: event.timestamp,
|
|
386
|
-
});
|
|
387
|
-
break;
|
|
388
|
-
case "postback":
|
|
389
|
-
this.runtime.emitEvent([LineEventTypes.POSTBACK], {
|
|
390
|
-
runtime: this.runtime,
|
|
391
|
-
source: "line",
|
|
392
|
-
userId: event.source.userId,
|
|
393
|
-
data: event.postback.data,
|
|
394
|
-
params: event.postback.params,
|
|
395
|
-
timestamp: event.timestamp,
|
|
396
|
-
});
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
async handleMessageEvent(event) {
|
|
401
|
-
if (!this.runtime) {
|
|
402
|
-
return;
|
|
403
|
-
}
|
|
404
|
-
const message = {
|
|
405
|
-
id: event.message.id,
|
|
406
|
-
type: event.message.type,
|
|
407
|
-
userId: event.source.userId || "",
|
|
408
|
-
timestamp: event.timestamp,
|
|
409
|
-
replyToken: event.replyToken,
|
|
410
|
-
};
|
|
411
|
-
// Add text for text messages
|
|
412
|
-
if (event.message.type === "text") {
|
|
413
|
-
message.text = event.message.text;
|
|
414
|
-
message.mention = event.message.mention;
|
|
415
|
-
}
|
|
416
|
-
// Add group/room ID if applicable
|
|
417
|
-
if (event.source.type === "group") {
|
|
418
|
-
message.groupId = event.source.groupId;
|
|
419
|
-
}
|
|
420
|
-
else if (event.source.type === "room") {
|
|
421
|
-
message.roomId = event.source.roomId;
|
|
422
|
-
}
|
|
423
|
-
// Emit message received event
|
|
424
|
-
this.runtime.emitEvent([LineEventTypes.MESSAGE_RECEIVED], {
|
|
425
|
-
runtime: this.runtime,
|
|
426
|
-
source: "line",
|
|
427
|
-
message,
|
|
428
|
-
lineSource: event.source,
|
|
429
|
-
replyToken: event.replyToken,
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
//# sourceMappingURL=service.js.map
|
package/dist/service.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|