From 20579432af2660858fa2510f638f230105d9ad06 Mon Sep 17 00:00:00 2001 From: celso Date: Fri, 31 Mar 2023 01:51:04 -0300 Subject: [PATCH] added gettimestamp function --- README.md | 22 ++++++++++++++-------- bashbot-lib.sh | 11 +++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ce9cefa..d7a4c41 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,19 @@ # bashbot-lib -bashbot-lib provides generic functionality for telegram bots made in bash
-with this library you will be able to run a telegram bot with few dependencies
-**IMPORTANT**: bashbot-lib uses the getUpdates method with tcp_keepalive, not webhooks
-**IMPORTANT**: bashbot-lib is not made for asynchronous use, only one message is received at a time and is done so in order
+bashbot-lib provides generic functionality for telegram bots made in bash + +with this library you will be able to run a telegram bot with few dependencies + +**IMPORTANT**: bashbot-lib uses the getUpdates method with tcp_keepalive, not webhooks + +**IMPORTANT**: bashbot-lib is not made for asynchronous use, only one message is received at a time and is done so in order + [TOC2] + ## license this program is licensed under the **Affero GNU Public License v3**, you can read the copy that comes along with this program or read it at [gnu.org's website](http://www.gnu.org/licenses/agpl-3.0.html) ## dependencies -the following is all that's needed +the following is all that's needed: * bash 4+ * GNU coreutils (sed, grep, tail, head, etc.) * curl @@ -17,7 +22,7 @@ the following is all that's needed Bash 4+ is obligatory for this library to work as features introduced at this point are heavily used. ## installation -drop it wherever you like, although I recommend either of these options +drop it wherever you like, although I recommend either of these options: * copying the files to /usr/lib/bashbot-lib/ * add it as a submodule in your project (git submodules are very annoying to deal with) * simply keep it in a subfolder in your project @@ -28,7 +33,7 @@ source the library, and optionally the viewer, in your bash shellscript . /usr/lib/bashbot-lib/bashbot-lib.sh . /usr/lib/bashbot-lib/viewer.sh ``` -you will also need the following +you will also need the following: * a variable named api_url with the following content (mind the trailing forward slash): `api_url="https:/api.telegram.org/bot${YOUR_TOKEN_HERE}/"` * the following files to read and write from: `updates.txt` `sentmsgs.txt` `delmsgs.txt` * these files must be placed in the same directory you run your bot from or in the directory defined in the following bullet poiint @@ -51,7 +56,7 @@ with every update, getupd calculates the new offset required to request new upda ### reading message contents use the `getmsg_content` function to parse the contents of a message and save them to a bash associative array -the `getmsg_content` receives two arguments +the `getmsg_content` receives two arguments: * the **name** (not a reference to) of a bash associative array * the filename of a file with telegram JSON responses formatted by this library's functions @@ -80,6 +85,7 @@ the bash associative array will hold the following contents | msg_id | a number to reference this message | | text | may contain special symbols | | callback | callback_data, empty if there is none | +| timestamp | timestamp in dd/mm/yy hh:mm format | if you sourced the viewer, you can view these contents with `view_content "curmsg"` where `curmsg` is the name of the bash associative array populated by `getmsg_content` diff --git a/bashbot-lib.sh b/bashbot-lib.sh index ae0fc5a..2fe8493 100755 --- a/bashbot-lib.sh +++ b/bashbot-lib.sh @@ -36,6 +36,9 @@ getupd() { [ ! -z "${update}" ] && printf "%s\n" "${update}" >> "${bot_tmpdir}updates.txt" } +# when another comment refers to "getX functions", the following are what is being refered to +# $1 is the filename of a file with telegram JSON responses to the getupd function +# if ${bot_tmpdir} is set, it will be appended before the filename getmsg_id() { tail -n1 "${bot_tmpdir}${1}" | grep -om1\ "\"message\":{\"message_id\":[0-9]\+\|^\"message_id\":[0-9]\+" | grep -om1 "[0-9]\+" @@ -108,6 +111,12 @@ getcbk_data() { [ ! -z "${callbacks}" ] && utf-16-surrogate-pair-decode "${callbacks:8:-2}" } +gettimestamp() { + local timestamp="$(tail -n 1 "${bot_tmpdir}${1}"\ + | grep "\"date\"" | grep -om1 "\"date\":[0-9]\+,")" + [ ! -z "${timestamp}" ] && printf "%s" "${timestamp:7:-1}" +} + # $1 is name of a bash array with the number of columns in every row such as ( 1 1 3 ) for a 3 row keyboard in which the first and second row have 1 column, and the third has 3 # $2 is name of a bash array with as many text entries as there are columns, they are added left to right, up to down, to the rows/columns configuration passed as first arg # $3 is name of a bash array with as many data entries as there are columns, they are added left to right, up to down, to the rows/columns configuration passed as first arg @@ -199,6 +208,7 @@ delmsg() { } # $1 is the name of a bash associative array to be filled with the message contents +# $2 is the filename to be passed to the getX functions getmsg_content(){ local -n _REF="${1}" _REF[user_id]="$(getusr_id "${2}")" @@ -209,4 +219,5 @@ getmsg_content(){ _REF[msg_id]="$(getmsg_id "${2}")" _REF[text]="$(gettext "${2}")" _REF[callback]="$(getcbk_data "${2}")" + _REF[timestamp]="$(gettimestamp "${2}")" }