Merge remote-tracking branch 'origin/kenneth/telegram-bot-commands' into kenneth/channels-rollup

This commit is contained in:
Kenneth Lien
2026-03-20 13:13:08 -07:00

View File

@@ -381,6 +381,11 @@ mcp.setRequestHandler(ListToolsRequestSchema, async () => ({
items: { type: 'string' },
description: 'Absolute file paths to attach. Images send as photos (inline preview); other types as documents. Max 50MB each.',
},
format: {
type: 'string',
enum: ['text', 'markdownv2'],
description: "Rendering mode. 'markdownv2' enables Telegram formatting (bold, italic, code, links). Caller must escape special chars per MarkdownV2 rules. Default: 'text' (plain, no escaping needed).",
},
},
required: ['chat_id', 'text'],
},
@@ -407,6 +412,11 @@ mcp.setRequestHandler(ListToolsRequestSchema, async () => ({
chat_id: { type: 'string' },
message_id: { type: 'string' },
text: { type: 'string' },
format: {
type: 'string',
enum: ['text', 'markdownv2'],
description: "Rendering mode. 'markdownv2' enables Telegram formatting (bold, italic, code, links). Caller must escape special chars per MarkdownV2 rules. Default: 'text' (plain, no escaping needed).",
},
},
required: ['chat_id', 'message_id', 'text'],
},
@@ -423,6 +433,8 @@ mcp.setRequestHandler(CallToolRequestSchema, async req => {
const text = args.text as string
const reply_to = args.reply_to != null ? Number(args.reply_to) : undefined
const files = (args.files as string[] | undefined) ?? []
const format = (args.format as string | undefined) ?? 'text'
const parseMode = format === 'markdownv2' ? 'MarkdownV2' as const : undefined
assertAllowedChat(chat_id)
@@ -449,6 +461,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async req => {
(replyMode === 'all' || i === 0)
const sent = await bot.api.sendMessage(chat_id, chunks[i], {
...(shouldReplyTo ? { reply_parameters: { message_id: reply_to } } : {}),
...(parseMode ? { parse_mode: parseMode } : {}),
})
sentIds.push(sent.message_id)
}
@@ -491,10 +504,13 @@ mcp.setRequestHandler(CallToolRequestSchema, async req => {
}
case 'edit_message': {
assertAllowedChat(args.chat_id as string)
const editFormat = (args.format as string | undefined) ?? 'text'
const editParseMode = editFormat === 'markdownv2' ? 'MarkdownV2' as const : undefined
const edited = await bot.api.editMessageText(
args.chat_id as string,
Number(args.message_id),
args.text as string,
...(editParseMode ? [{ parse_mode: editParseMode }] : []),
)
const id = typeof edited === 'object' ? edited.message_id : args.message_id
return { content: [{ type: 'text', text: `edited (id: ${id})` }] }