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