/* This file is part of »munin«. Copyright 2025 'Fenris Wolf' »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 . */ namespace _munin.targets.telegram_bot { /** */ export type type_parameters = { bot_token : string; chat_id : int; hide_tags : boolean; reminders : Array<_munin.type_reminder>; language : string; strings : { notification_head : string; }; }; /** */ function get_translation( parameters : type_parameters, path : string ) : string { return lib_plankton.translate.get_new( path, { "preferred_language": parameters.language, } ); } /** */ function render_event( parameters : type_parameters, event : _munin.type_event ) : string { return lib_plankton.string.coin( "{{title_label}} | {{macro_tags}}{{title_value}}\n{{time_label}} | {{time_value}}{{macro_location}}{{macro_description}}", { "macro_tags": ( (parameters.hide_tags || (event.tags === null)) ? "" : (event.tags.map(tag => ("{" + tag + "}")).join(" ") + " ") ), "title_label": get_translation(parameters, "core.event.title.short").toUpperCase(), "title_value": event.title, "time_label": get_translation(parameters, "core.event.time.short").toUpperCase(), "time_value": lib_plankton.pit.timespan_format( event.begin, event.end, { "adjust_to_ce": true, } ), "macro_location": ( (event.location === null) ? "" : lib_plankton.string.coin( "\n{{location_label}} | {{location_value}}", { "location_label": get_translation(parameters, "core.event.location.short").toUpperCase(), "location_value": event.location, } ) ), "macro_description": ( (event.description === null) ? "" : lib_plankton.string.coin( "\n\n{{description_value}}", { "description_value": event.description, } ) ), } ); } /** */ async function send( parameters : type_parameters, events : Array<_munin.type_event> ) : Promise { await lib_plankton.telegram.bot_call_send_message( parameters.bot_token, parameters.chat_id, lib_plankton.string.coin( "*{{head}}*\n\n{{body}}", { "head": lib_plankton.string.coin( parameters.strings.notification_head, { "core": lib_plankton.string.coin( "{{label_event}}-{{label_reminder}}", { "label_event": lib_plankton.string.capitalize(get_translation(parameters, "core.event.event")), "label_reminder": lib_plankton.string.capitalize(get_translation(parameters, "core.reminder.reminder")), } ), "extra": ( (events.length <= 1) ? "" : lib_plankton.string.coin( " ({{count}} {{events}})", { "count": events.length.toFixed(0), "events": get_translation(parameters, "core.event.events"), } ) ), } ), "body": ( events .map(event => render_event(parameters, event)) .join("\n\n--------\n\n") ), } ), { "parse_mode": "Markdown", } ); } /** */ 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), } ), "send": (events) => send(parameters, events), }; } }