Polls: scope Telegram poll extras to plugin schema

This commit is contained in:
Gustavo Madeira Santana 2026-03-18 02:34:33 +00:00
parent fa73f5aeb5
commit d8b95d2315
No known key found for this signature in database
3 changed files with 22 additions and 11 deletions

View File

@ -18,7 +18,7 @@ import type { OpenClawConfig } from "../../config/config.js";
import { loadConfig } from "../../config/config.js";
import { GATEWAY_CLIENT_IDS, GATEWAY_CLIENT_MODES } from "../../gateway/protocol/client-info.js";
import { getToolResult, runMessageAction } from "../../infra/outbound/message-action-runner.js";
import { POLL_CREATION_PARAM_DEFS, POLL_CREATION_PARAM_NAMES } from "../../poll-params.js";
import { POLL_CREATION_PARAM_DEFS, SHARED_POLL_CREATION_PARAM_NAMES } from "../../poll-params.js";
import { normalizeAccountId } from "../../routing/session-key.js";
import { stripReasoningTagsFromText } from "../../shared/text/reasoning-tags.js";
import { normalizeMessageChannel } from "../../utils/message-channel.js";
@ -197,11 +197,8 @@ function buildPollSchema() {
),
),
};
for (const name of POLL_CREATION_PARAM_NAMES) {
for (const name of SHARED_POLL_CREATION_PARAM_NAMES) {
const def = POLL_CREATION_PARAM_DEFS[name];
if (def.telegramOnly) {
continue;
}
switch (def.kind) {
case "string":
props[name] = Type.Optional(Type.String());

View File

@ -153,7 +153,6 @@ export function createSlackMessageToolBlocksSchema(): TSchema {
export function createTelegramPollExtraToolSchemas(): Record<string, TSchema> {
return {
pollDurationHours: Type.Optional(Type.Number()),
pollDurationSeconds: Type.Optional(Type.Number()),
pollAnonymous: Type.Optional(Type.Boolean()),
pollPublic: Type.Optional(Type.Boolean()),

View File

@ -4,22 +4,37 @@ export type PollCreationParamKind = "string" | "stringArray" | "number" | "boole
export type PollCreationParamDef = {
kind: PollCreationParamKind;
telegramOnly?: boolean;
};
export const POLL_CREATION_PARAM_DEFS: Record<string, PollCreationParamDef> = {
const SHARED_POLL_CREATION_PARAM_DEFS = {
pollQuestion: { kind: "string" },
pollOption: { kind: "stringArray" },
pollDurationHours: { kind: "number" },
pollMulti: { kind: "boolean" },
pollDurationSeconds: { kind: "number", telegramOnly: true },
pollAnonymous: { kind: "boolean", telegramOnly: true },
pollPublic: { kind: "boolean", telegramOnly: true },
} satisfies Record<string, PollCreationParamDef>;
const TELEGRAM_POLL_CREATION_PARAM_DEFS = {
pollDurationSeconds: { kind: "number" },
pollAnonymous: { kind: "boolean" },
pollPublic: { kind: "boolean" },
} satisfies Record<string, PollCreationParamDef>;
export const POLL_CREATION_PARAM_DEFS: Record<string, PollCreationParamDef> = {
...SHARED_POLL_CREATION_PARAM_DEFS,
...TELEGRAM_POLL_CREATION_PARAM_DEFS,
};
export type SharedPollCreationParamName = keyof typeof SHARED_POLL_CREATION_PARAM_DEFS;
export type TelegramPollCreationParamName = keyof typeof TELEGRAM_POLL_CREATION_PARAM_DEFS;
export type PollCreationParamName = keyof typeof POLL_CREATION_PARAM_DEFS;
export const POLL_CREATION_PARAM_NAMES = Object.keys(POLL_CREATION_PARAM_DEFS);
export const SHARED_POLL_CREATION_PARAM_NAMES = Object.keys(
SHARED_POLL_CREATION_PARAM_DEFS,
) as SharedPollCreationParamName[];
export const TELEGRAM_POLL_CREATION_PARAM_NAMES = Object.keys(
TELEGRAM_POLL_CREATION_PARAM_DEFS,
) as TelegramPollCreationParamName[];
function readPollParamRaw(params: Record<string, unknown>, key: string): unknown {
return readSnakeCaseParamRaw(params, key);