import { parseArgs } from "jsr:@std/cli/parse-args"; async function makeTelegramRequest( command: string, additionalParam: typeof args, ) { const url = `https://api.telegram.org/bot${additionalParam.bot_token}/${command}?chat_id=${additionalParam.chat_id}`; const formData = new FormData(); switch (command) { case "sendMessage": { formData.append("text", additionalParam.text); if (additionalParam.parse_mode) { formData.append("parse_mode", additionalParam.parse_mode); } break; } case "sendMediaGroup": { const files = additionalParam.files.split(" "); const jsonData = []; for (let i = 0; i < files.length; i++) { if (files[i].startsWith("http")) { jsonData.push({ "type": "photo", "media": files[i], }); } else { const file = await Deno.readFile(files[i]); formData.append( `file${i}`, new Blob([file]), files[i], ); if (i == 0) { jsonData.push({ "parse_mode": additionalParam.parse_mode, "caption": additionalParam.caption, "type": "photo", "media": `attach://file${i}`, }); } else { jsonData.push({ "type": "photo", "media": `attach://file${i}`, }); } } } formData.append("media", JSON.stringify(jsonData)); console.log(formData); break; } case "sendPhoto": { if (additionalParam.file.startsWith("http")) { formData.append( "photo", additionalParam.file, additionalParam.file, ); } else { const file = await Deno.readFile(additionalParam.file); formData.append( "photo", new Blob([file]), additionalParam.file, ); } if (additionalParam.caption) { formData.append("caption", additionalParam.caption); } if (additionalParam.parse_mode) { formData.append("parse_mode", additionalParam.parse_mode); } break; } case "deleteMessage": { formData.append("message_id", additionalParam.message_id); break; } default: { console.log("Unknown command"); return; } } const response = await fetch(url, { method: "POST", body: formData, }); const data = await response.json(); console.info(JSON.stringify(data)); } const args = parseArgs(Deno.args, { string: [ "bot_token", "chat_id", "caption", "text", "file", "files", "message_id", "parse_mode", ], default: { bot_token: "", chat_id: "0", caption: "", text: "", file: "", files: "", message_id: "0", parse_mode: "MarkdownV2", }, }); const command = String(args._[0]); if (!command) { console.error("Missing arguments. Usage: "); console.error("Supported commands:"); console.error(" sendMessage: Sends a text message"); console.error(" sendPhoto: Sends a photo"); console.error(" sendMediaGroup: Sends a media group"); console.error(" deleteMessage: Deletes a message"); Deno.exit(1); } await makeTelegramRequest(command, args);