use option instead of null

This commit is contained in:
Dmitriy Pleshevskiy 2023-07-01 14:06:47 +03:00
parent b85b65dda0
commit 961f494fa2
Signed by: pleshevskiy
GPG key ID: 79C4487B44403985

View file

@ -1,5 +1,6 @@
import TelegramBot from "node-telegram-bot-api"; import TelegramBot from "node-telegram-bot-api";
import { import {
option,
readerTaskEither as rte, readerTaskEither as rte,
readonlyArray, readonlyArray,
semigroup, semigroup,
@ -17,13 +18,13 @@ console.log("The telegram bot listens for updates");
bot.on("channel_post", async (msg) => { bot.on("channel_post", async (msg) => {
const link = extractMessageLink(msg); const link = extractMessageLink(msg);
if (!link) { if (option.isNone(link)) {
console.log("cannot find link in msg:", msg); console.log("cannot find link in msg:", msg);
return; return;
} }
pipe( pipe(
describeArticle(link), describeArticle(link.value),
rte.map( rte.map(
flow( flow(
readonlyArray.foldMap({ readonlyArray.foldMap({
@ -44,21 +45,24 @@ bot.on("channel_post", async (msg) => {
)(config)(); )(config)();
}); });
// TODO: use option instead
function extractMessageLink(msg) { function extractMessageLink(msg) {
return getTextLink(msg) || getMessageUrl(msg); return pipe(
getTextLink(msg),
option.orElse(() => getMessageUrl(msg)),
);
} }
const RE_URL = const RE_URL =
/(http|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])/; /(http|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])/;
function getMessageUrl(msg) { function getMessageUrl(msg) {
return RE_URL.exec(msg.text)[0]; return option.fromNullable(RE_URL.exec(msg.text)?.[0]);
} }
function getTextLink(msg) { function getTextLink(msg) {
const textLink = (msg.entities ?? []).find(isTextLink); return readonlyArray.findFirstMap(
return textLink ? textLink.url : null; flow(option.fromPredicate(isTextLink), option.map((link) => link.url)),
)(msg.entities ?? readonnlyArray.empty);
} }
function isTextLink(msgEntity) { function isTextLink(msgEntity) {