This repository has been archived on 2024-07-25. You can view files and clone it, but cannot push or open issues or pull requests.
yandexgpt_tg_bot/main.mjs

59 lines
1.4 KiB
JavaScript
Raw Normal View History

2023-06-28 14:45:04 +03:00
import TelegramBot from "node-telegram-bot-api";
import {
2023-07-01 14:06:47 +03:00
option,
2023-06-28 14:45:04 +03:00
readerTaskEither as rte,
readonlyArray,
semigroup,
string,
taskEither,
2023-06-28 14:45:04 +03:00
} from "fp-ts";
import { flow, pipe } from "fp-ts/lib/function.js";
import { describeArticle } from "./api.mjs";
2023-07-02 11:41:03 +03:00
import { extractMessageLink } from "./message.mjs";
2023-06-28 14:45:04 +03:00
import config from "./config.mjs";
const bot = new TelegramBot(config.telegramBotToken, {
polling: true,
});
2023-07-01 00:32:58 +03:00
console.log("The telegram bot listens for updates");
2023-07-02 11:41:03 +03:00
bot.on("channel_post", (msg) => {
2023-06-28 14:45:04 +03:00
const link = extractMessageLink(msg);
2023-07-01 14:06:47 +03:00
if (option.isNone(link)) {
2023-07-01 00:32:58 +03:00
console.log("cannot find link in msg:", msg);
return;
}
2023-06-28 14:45:04 +03:00
pipe(
2023-07-01 14:06:47 +03:00
describeArticle(link.value),
2023-06-28 14:45:04 +03:00
rte.map(
flow(
readonlyArray.foldMap({
...string.Monoid,
...pipe(string.Semigroup, semigroup.intercalate("\n")),
})((row) => `- ${row}`),
string.trimLeft,
),
),
rte.flatMapTaskEither(
2023-06-28 14:45:04 +03:00
(res) =>
taskEither.tryCatch(
() =>
bot.editMessageText(
msg.text + "\n\nYandexGpt:\n\n" + res,
{
chat_id: (msg.forward_from_chat ?? msg.chat).id,
message_id: msg.forward_from_message_id ?? msg.message_id,
},
),
String,
),
),
rte.match(
(err) => console.log({ err, msg }),
(res) => console.log("done", msg.message_id),
2023-06-28 14:45:04 +03:00
),
)(config)();
});