Skip to content

Commit

Permalink
telegram-chat: read file content...
Browse files Browse the repository at this point in the history
... instead of getting it. This lifts the size limit, though we are
still limited by Telegram message size.

This requires RouterOS 7.13.
  • Loading branch information
eworm-de committed Apr 1, 2024
1 parent 15ca80f commit c01a424
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 10 deletions.
7 changes: 3 additions & 4 deletions doc/telegram-chat.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Chat with your router and send commands via Telegram bot
[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network)
[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers)
[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.12-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.13-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts)
[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J)

Expand Down Expand Up @@ -130,9 +130,8 @@ send information on its own. Something like this should do the job:

### Output size

RouterOS is limited in reading file content to a size of about four
kilobytes. Reading larger files does just fail, and that is also the limit
for command output.
Telegram messages have a limit of 4096 characters. If output is too large it
is truncated, and a warning is added to the message.

### Sending commands to a group

Expand Down
2 changes: 1 addition & 1 deletion global-functions.rsc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
:local ScriptName [ :jobname ];

# expected configuration version
:global ExpectedConfigVersion 125;
:global ExpectedConfigVersion 126;

# global variables not to be changed by user
:global GlobalFunctionsReady false;
Expand Down
1 change: 1 addition & 0 deletions news-and-changes.rsc
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
123="Introduced new function '\$LogPrint', and deprecated '\$LogPrintExit2'. Please update custom scripts if you use it.";
124="Added support for links in 'netwatch-notify', these are added below the formatted notification text.";
125=("April's Fool! " . [ $SymbolForNotification "smiley-partying-face" ] . "Well, you missed it... - no charge nor fees. (Anyway... Donations are much appreciated, " . [ $SymbolForNotification "smiley-smiling-face" ] . "thanks!)");
126="Made 'telegram-chat' capable of handling large command output. Telegram messages still limit the size, so it is truncated now.";
};

# Migration steps to be applied on script updates
Expand Down
9 changes: 4 additions & 5 deletions telegram-chat.rsc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Copyright (c) 2023-2024 Christian Hesse <mail@eworm.de>
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
#
# requires RouterOS, version=7.12
# requires RouterOS, version=7.13
#
# use Telegram to chat with your Router and send commands
# https://git.eworm.de/cgit/routeros-scripts/about/doc/telegram-chat.md
Expand Down Expand Up @@ -141,14 +141,13 @@
:if ([ :len [ /file/find where name=($File . ".failed") ] ] > 0) do={
:set State ([ $SymbolForNotification "cross-mark" ] . "The command failed with an error!\n\n");
}
:local Content [ /file/get $File contents ];
:local Content ([ /file/read chunk-size=32768 file=$File as-value ]->"data");
$SendTelegram2 ({ origin=$ScriptName; chatid=($Chat->"id"); silent=true; replyto=($Message->"message_id"); \
subject=([ $SymbolForNotification "speech-balloon" ] . "Telegram Chat"); \
message=([ $SymbolForNotification "gear" ] . "Command:\n" . $Message->"text" . "\n\n" . \
$State . [ $IfThenElse ([ :len $Content ] > 0) \
([ $SymbolForNotification "memo" ] . "Output:\n" . $Content) [ $IfThenElse ([ /file/get $File size ] > 0) \
([ $SymbolForNotification "warning-sign" ] . "Output exceeds file read size.") \
([ $SymbolForNotification "memo" ] . "No output.") ] ]) });
([ $SymbolForNotification "memo" ] . "Output:\n" . $Content) \
([ $SymbolForNotification "memo" ] . "No output.") ]) });
/file/remove "tmpfs/telegram-chat";
} else={
$LogPrint info $ScriptName ("The command from update " . $UpdateID . " failed syntax validation!");
Expand Down

0 comments on commit c01a424

Please sign in to comment.