munin/source/targets/telegram_bot.ts

107 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-04-25 12:50:13 +02:00
/*
This file is part of »munin«.
Copyright 2025 'Fenris Wolf' <fenris@folksprak.org>
»munin« is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
»munin« is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with »munin«. If not, see <http://www.gnu.org/licenses/>.
*/
namespace _munin.targets.telegram_bot
{
/**
*/
export type type_parameters = {
bot_token : string;
chat_id : int;
reminders : Array<int>;
2025-04-25 12:50:13 +02:00
};
/**
*/
async function send(
parameters : type_parameters,
labels : _munin.type_labels,
event : _munin.type_event
) : Promise<void>
{
await lib_plankton.telegram.bot_call_send_message(
parameters.bot_token,
parameters.chat_id,
lib_plankton.string.coin(
"*{{head}}*\n\n\{{title_label}} | {{macro_tags}}{{title_value}}\n{{time_label}} | {{time_value}}{{macro_location}}",
2025-04-25 12:50:13 +02:00
{
"head": labels.head,
"macro_tags": (
(event.tags === null)
?
""
:
(event.tags.map(tag => ("{" + tag + "}")).join(" ") + " ")
),
2025-04-25 12:50:13 +02:00
"title_label": labels.title.toUpperCase(),
"title_value": event.title,
"time_label": labels.time.toUpperCase(),
2025-05-13 19:19:51 +02:00
"time_value": lib_plankton.pit.timespan_format(
event.begin,
event.end,
{
"adjust_to_ce": true,
}
),
2025-04-25 12:50:13 +02:00
"macro_location": (
(event.location === null)
?
""
:
lib_plankton.string.coin(
"\n{{location_label}} | {{location_value}}",
{
"location_label": labels.location.toUpperCase(),
"location_value": event.location,
}
)
),
}
),
{
"parse_mode": "Markdown",
2025-04-25 12:50:13 +02:00
}
);
}
/**
*/
export function implementation_target(
parameters : type_parameters
) : _munin.type_target
{
return {
"reminders": parameters.reminders,
"show": () => lib_plankton.string.coin(
"telegram:{{chat_id}}",
{
"chat_id": parameters.chat_id.toFixed(0),
}
),
2025-04-25 12:50:13 +02:00
"send": (labels, event) => send(parameters, labels, event),
};
}
}