tgbotcli-ts/cli.ts

132 lines
4.0 KiB
TypeScript
Raw Normal View History

2024-09-06 03:11:55 +02:00
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}`;
2024-09-06 03:11:55 +02:00
const formData = new FormData();
switch (command) {
case "sendMessage": {
formData.append("text", additionalParam.text);
2024-09-06 03:16:29 +02:00
if (additionalParam.parse_mode) {
formData.append("parse_mode", additionalParam.parse_mode);
}
2024-09-06 03:11:55 +02:00
break;
}
case "sendMediaGroup": {
const files = additionalParam.files.split(" ");
2024-09-06 03:11:55 +02:00
const jsonData = [];
for (let i = 0; i < files.length; i++) {
if (files[i].startsWith("http")) {
2024-09-06 03:11:55 +02:00
jsonData.push({
"type": "photo",
"media": files[i],
2024-09-06 03:11:55 +02:00
});
} 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}`,
});
}
2024-09-06 03:11:55 +02:00
}
}
formData.append("media", JSON.stringify(jsonData));
console.log(formData);
2024-09-06 03:11:55 +02:00
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,
);
}
2024-09-06 03:11:55 +02:00
if (additionalParam.caption) {
formData.append("caption", additionalParam.caption);
}
2024-09-06 03:16:29 +02:00
if (additionalParam.parse_mode) {
formData.append("parse_mode", additionalParam.parse_mode);
}
2024-09-06 03:11:55 +02:00
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();
2024-09-06 03:21:13 +02:00
console.info(JSON.stringify(data));
2024-09-06 03:11:55 +02:00
}
const args = parseArgs(Deno.args, {
string: [
"bot_token",
2024-09-06 03:11:55 +02:00
"chat_id",
"caption",
"text",
"file",
"files",
"message_id",
"parse_mode",
],
default: {
bot_token: "",
2024-09-06 03:11:55 +02:00
chat_id: "0",
caption: "",
text: "",
file: "",
files: "",
2024-09-06 03:11:55 +02:00
message_id: "0",
parse_mode: "MarkdownV2",
},
});
const command = String(args._[0]);
if (!command) {
console.error("Missing arguments. Usage: <command> <additional_arguments>");
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);