mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 22:51:36 +00:00
fix: tighten commands output + telegram pagination (#2504)
Co-authored-by: hougangdev <hougangdev@users.noreply.github.com>
This commit is contained in:
committed by
Gustavo Madeira Santana
parent
97440eaf52
commit
cc1782b105
13
src/auto-reply/reply/commands-info.test.ts
Normal file
13
src/auto-reply/reply/commands-info.test.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { buildCommandsPaginationKeyboard } from "./commands-info.js";
|
||||
|
||||
describe("buildCommandsPaginationKeyboard", () => {
|
||||
it("adds agent id to callback data when provided", () => {
|
||||
const keyboard = buildCommandsPaginationKeyboard(2, 3, "agent-main");
|
||||
expect(keyboard[0]).toEqual([
|
||||
{ text: "◀ Prev", callback_data: "commands_page_1:agent-main" },
|
||||
{ text: "2/3", callback_data: "commands_page_noop:agent-main" },
|
||||
{ text: "Next ▶", callback_data: "commands_page_3:agent-main" },
|
||||
]);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
import { logVerbose } from "../../globals.js";
|
||||
import { listSkillCommandsForWorkspace } from "../skill-commands.js";
|
||||
import { listSkillCommandsForAgents } from "../skill-commands.js";
|
||||
import {
|
||||
buildCommandsMessage,
|
||||
buildCommandsMessagePaginated,
|
||||
@@ -35,20 +35,18 @@ export const handleCommandsListCommand: CommandHandler = async (params, allowTex
|
||||
}
|
||||
const skillCommands =
|
||||
params.skillCommands ??
|
||||
listSkillCommandsForWorkspace({
|
||||
workspaceDir: params.workspaceDir,
|
||||
listSkillCommandsForAgents({
|
||||
cfg: params.cfg,
|
||||
agentIds: params.agentId ? [params.agentId] : undefined,
|
||||
});
|
||||
const surface = params.ctx.Surface;
|
||||
|
||||
// For Telegram, return paginated result with inline buttons
|
||||
if (surface === "telegram") {
|
||||
const result = buildCommandsMessagePaginated(params.cfg, skillCommands, {
|
||||
page: 1,
|
||||
surface,
|
||||
});
|
||||
|
||||
// Build inline keyboard for pagination if there are multiple pages
|
||||
if (result.totalPages > 1) {
|
||||
return {
|
||||
shouldContinue: false,
|
||||
@@ -56,7 +54,11 @@ export const handleCommandsListCommand: CommandHandler = async (params, allowTex
|
||||
text: result.text,
|
||||
channelData: {
|
||||
telegram: {
|
||||
buttons: buildCommandsPaginationKeyboard(result.currentPage, result.totalPages),
|
||||
buttons: buildCommandsPaginationKeyboard(
|
||||
result.currentPage,
|
||||
result.totalPages,
|
||||
params.agentId,
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -78,17 +80,28 @@ export const handleCommandsListCommand: CommandHandler = async (params, allowTex
|
||||
export function buildCommandsPaginationKeyboard(
|
||||
currentPage: number,
|
||||
totalPages: number,
|
||||
agentId?: string,
|
||||
): Array<Array<{ text: string; callback_data: string }>> {
|
||||
const buttons: Array<{ text: string; callback_data: string }> = [];
|
||||
const suffix = agentId ? `:${agentId}` : "";
|
||||
|
||||
if (currentPage > 1) {
|
||||
buttons.push({ text: "◀ Prev", callback_data: `commands_page_${currentPage - 1}` });
|
||||
buttons.push({
|
||||
text: "◀ Prev",
|
||||
callback_data: `commands_page_${currentPage - 1}${suffix}`,
|
||||
});
|
||||
}
|
||||
|
||||
buttons.push({ text: `${currentPage}/${totalPages}`, callback_data: "commands_page_noop" });
|
||||
buttons.push({
|
||||
text: `${currentPage}/${totalPages}`,
|
||||
callback_data: `commands_page_noop${suffix}`,
|
||||
});
|
||||
|
||||
if (currentPage < totalPages) {
|
||||
buttons.push({ text: "Next ▶", callback_data: `commands_page_${currentPage + 1}` });
|
||||
buttons.push({
|
||||
text: "Next ▶",
|
||||
callback_data: `commands_page_${currentPage + 1}${suffix}`,
|
||||
});
|
||||
}
|
||||
|
||||
return [buttons];
|
||||
|
||||
Reference in New Issue
Block a user