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 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) {
|
||||||
|
|
Reference in a new issue