mirror of
https://github.com/farcasclaudiu/openclaw.git
synced 2026-06-28 23:02:02 +03:00
refactor(line): centralize action helpers
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
import type { messagingApi } from "@line/bot-sdk";
|
||||||
|
|
||||||
|
export type Action = messagingApi.Action;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a message action (sends text when tapped)
|
||||||
|
*/
|
||||||
|
export function messageAction(label: string, text?: string): Action {
|
||||||
|
return {
|
||||||
|
type: "message",
|
||||||
|
label: label.slice(0, 20),
|
||||||
|
text: text ?? label,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a URI action (opens a URL when tapped)
|
||||||
|
*/
|
||||||
|
export function uriAction(label: string, uri: string): Action {
|
||||||
|
return {
|
||||||
|
type: "uri",
|
||||||
|
label: label.slice(0, 20),
|
||||||
|
uri,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a postback action (sends data to webhook when tapped)
|
||||||
|
*/
|
||||||
|
export function postbackAction(label: string, data: string, displayText?: string): Action {
|
||||||
|
return {
|
||||||
|
type: "postback",
|
||||||
|
label: label.slice(0, 20),
|
||||||
|
data: data.slice(0, 300),
|
||||||
|
displayText: displayText?.slice(0, 300),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a datetime picker action
|
||||||
|
*/
|
||||||
|
export function datetimePickerAction(
|
||||||
|
label: string,
|
||||||
|
data: string,
|
||||||
|
mode: "date" | "time" | "datetime",
|
||||||
|
options?: {
|
||||||
|
initial?: string;
|
||||||
|
max?: string;
|
||||||
|
min?: string;
|
||||||
|
},
|
||||||
|
): Action {
|
||||||
|
return {
|
||||||
|
type: "datetimepicker",
|
||||||
|
label: label.slice(0, 20),
|
||||||
|
data: data.slice(0, 300),
|
||||||
|
mode,
|
||||||
|
initial: options?.initial,
|
||||||
|
max: options?.max,
|
||||||
|
min: options?.min,
|
||||||
|
};
|
||||||
|
}
|
||||||
+2
-57
@@ -3,6 +3,7 @@ import { readFile } from "node:fs/promises";
|
|||||||
import { loadConfig } from "../config/config.js";
|
import { loadConfig } from "../config/config.js";
|
||||||
import { logVerbose } from "../globals.js";
|
import { logVerbose } from "../globals.js";
|
||||||
import { resolveLineAccount } from "./accounts.js";
|
import { resolveLineAccount } from "./accounts.js";
|
||||||
|
import { datetimePickerAction, messageAction, postbackAction, uriAction } from "./actions.js";
|
||||||
|
|
||||||
type RichMenuRequest = messagingApi.RichMenuRequest;
|
type RichMenuRequest = messagingApi.RichMenuRequest;
|
||||||
type RichMenuResponse = messagingApi.RichMenuResponse;
|
type RichMenuResponse = messagingApi.RichMenuResponse;
|
||||||
@@ -382,63 +383,7 @@ export function createGridLayout(
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export { datetimePickerAction, messageAction, postbackAction, uriAction };
|
||||||
* Create a message action (sends text when tapped)
|
|
||||||
*/
|
|
||||||
export function messageAction(label: string, text?: string): Action {
|
|
||||||
return {
|
|
||||||
type: "message",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
text: text ?? label,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a URI action (opens a URL when tapped)
|
|
||||||
*/
|
|
||||||
export function uriAction(label: string, uri: string): Action {
|
|
||||||
return {
|
|
||||||
type: "uri",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
uri,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a postback action (sends data to webhook when tapped)
|
|
||||||
*/
|
|
||||||
export function postbackAction(label: string, data: string, displayText?: string): Action {
|
|
||||||
return {
|
|
||||||
type: "postback",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
data: data.slice(0, 300),
|
|
||||||
displayText: displayText?.slice(0, 300),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a datetime picker action
|
|
||||||
*/
|
|
||||||
export function datetimePickerAction(
|
|
||||||
label: string,
|
|
||||||
data: string,
|
|
||||||
mode: "date" | "time" | "datetime",
|
|
||||||
options?: {
|
|
||||||
initial?: string;
|
|
||||||
max?: string;
|
|
||||||
min?: string;
|
|
||||||
},
|
|
||||||
): Action {
|
|
||||||
return {
|
|
||||||
type: "datetimepicker",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
data: data.slice(0, 300),
|
|
||||||
mode,
|
|
||||||
initial: options?.initial,
|
|
||||||
max: options?.max,
|
|
||||||
min: options?.min,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a default help/status/settings menu
|
* Create a default help/status/settings menu
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
import type { messagingApi } from "@line/bot-sdk";
|
import type { messagingApi } from "@line/bot-sdk";
|
||||||
|
import {
|
||||||
|
datetimePickerAction,
|
||||||
|
messageAction,
|
||||||
|
postbackAction,
|
||||||
|
uriAction,
|
||||||
|
type Action,
|
||||||
|
} from "./actions.js";
|
||||||
|
|
||||||
|
export { datetimePickerAction, messageAction, postbackAction, uriAction };
|
||||||
|
|
||||||
type TemplateMessage = messagingApi.TemplateMessage;
|
type TemplateMessage = messagingApi.TemplateMessage;
|
||||||
type ConfirmTemplate = messagingApi.ConfirmTemplate;
|
type ConfirmTemplate = messagingApi.ConfirmTemplate;
|
||||||
@@ -7,7 +16,6 @@ type CarouselTemplate = messagingApi.CarouselTemplate;
|
|||||||
type CarouselColumn = messagingApi.CarouselColumn;
|
type CarouselColumn = messagingApi.CarouselColumn;
|
||||||
type ImageCarouselTemplate = messagingApi.ImageCarouselTemplate;
|
type ImageCarouselTemplate = messagingApi.ImageCarouselTemplate;
|
||||||
type ImageCarouselColumn = messagingApi.ImageCarouselColumn;
|
type ImageCarouselColumn = messagingApi.ImageCarouselColumn;
|
||||||
type Action = messagingApi.Action;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a confirm template (yes/no style dialog)
|
* Create a confirm template (yes/no style dialog)
|
||||||
@@ -147,64 +155,6 @@ export function createImageCarouselColumn(imageUrl: string, action: Action): Ima
|
|||||||
// Action Helpers (same as rich-menu but re-exported for convenience)
|
// Action Helpers (same as rich-menu but re-exported for convenience)
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a message action (sends text when tapped)
|
|
||||||
*/
|
|
||||||
export function messageAction(label: string, text?: string): Action {
|
|
||||||
return {
|
|
||||||
type: "message",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
text: text ?? label,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a URI action (opens a URL when tapped)
|
|
||||||
*/
|
|
||||||
export function uriAction(label: string, uri: string): Action {
|
|
||||||
return {
|
|
||||||
type: "uri",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
uri,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a postback action (sends data to webhook when tapped)
|
|
||||||
*/
|
|
||||||
export function postbackAction(label: string, data: string, displayText?: string): Action {
|
|
||||||
return {
|
|
||||||
type: "postback",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
data: data.slice(0, 300),
|
|
||||||
displayText: displayText?.slice(0, 300),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a datetime picker action
|
|
||||||
*/
|
|
||||||
export function datetimePickerAction(
|
|
||||||
label: string,
|
|
||||||
data: string,
|
|
||||||
mode: "date" | "time" | "datetime",
|
|
||||||
options?: {
|
|
||||||
initial?: string;
|
|
||||||
max?: string;
|
|
||||||
min?: string;
|
|
||||||
},
|
|
||||||
): Action {
|
|
||||||
return {
|
|
||||||
type: "datetimepicker",
|
|
||||||
label: label.slice(0, 20),
|
|
||||||
data: data.slice(0, 300),
|
|
||||||
mode,
|
|
||||||
initial: options?.initial,
|
|
||||||
max: options?.max,
|
|
||||||
min: options?.min,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Convenience Builders
|
// Convenience Builders
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user