From 38164ba9a2cd7a60f9cfb975ee4e0f28962c42a2 Mon Sep 17 00:00:00 2001 From: "Kay Marquardt (Gnadelwartz)" Date: Thu, 11 Jun 2020 15:55:15 +0200 Subject: [PATCH] dispose JSON.sh complaint about empty input --- bashbot.sh | 10 +++++----- doc/3_advanced.md | 4 ++-- doc/7_develop.md | 19 +++++++++++++------ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/bashbot.sh b/bashbot.sh index a90c7e2..4f6c2a0 100755 --- a/bashbot.sh +++ b/bashbot.sh @@ -11,7 +11,7 @@ # This file is public domain in the USA and all free countries. # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # -#### $$VERSION$$ v0.96-pre-40-ge663979 +#### $$VERSION$$ v0.96-pre-41-g15f6da8 # # Exit Codes: # - 0 sucess (hopefully) @@ -319,7 +319,7 @@ if [ -z "${BASHBOT_WGET}" ] && _exists curl ; then # shellcheck disable=SC2086 res="$("${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} -m "${TIMEOUT}"\ -d '{'"${chat} $(iconv -f utf-8 -t utf-8 -c <<<$2)"'}' -X POST "${3}" \ - -H "Content-Type: application/json" | "${JSONSHFILE}" -s -b -n )" + -H "Content-Type: application/json" | "${JSONSHFILE}" -s -b -n 2>/dev/null )" sendJsonResult "${res}" "sendJson (curl)" "$@" } #$1 Chat, $2 what , $3 file, $4 URL, $5 caption @@ -348,7 +348,7 @@ else [ -n "${1}" ] && chat='"chat_id":'"${1}"',' # shellcheck disable=SC2086 res="$(wget --no-check-certificate -t 2 -T "${TIMEOUT}" ${BASHBOT_WGET_ARGS} -qO - --post-data='{'"${chat} $(iconv -f utf-8 -t utf-8 -c <<<$2)"'}' \ - --header='Content-Type:application/json' "${3}" | "${JSONSHFILE}" -s -b -n )" + --header='Content-Type:application/json' "${3}" | "${JSONSHFILE}" -s -b -n 2>/dev/null )" sendJsonResult "${res}" "sendJson (wget)" "$@" } sendUpload() { @@ -462,7 +462,7 @@ title2Json(){ # get bot name getBotName() { - getJson "$ME_URL" | "${JSONSHFILE}" -s -b -n | JsonGetString '"result","username"' + getJson "$ME_URL" | "${JSONSHFILE}" -s -b -n 2>/dev/null | JsonGetString '"result","username"' } # pure bash implementaion, done by KayM (@gnadelwartz) @@ -821,7 +821,7 @@ start_bot() { sleep "$(_round_float "${nextsleep}e-3" "1")" ((nextsleep+= stepsleep , nextsleep= nextsleep>maxsleep ?maxsleep:nextsleep)) # get next update - UPDATE="$(getJson "$UPD_URL$OFFSET" 2>/dev/null | "${JSONSHFILE}" -s -b -n | iconv -f utf-8 -t utf-8 -c)" + UPDATE="$(getJson "$UPD_URL$OFFSET" 2>/dev/null | "${JSONSHFILE}" -s -b -n 2>/dev/null | iconv -f utf-8 -t utf-8 -c)" # did we ge an responsn0r if [ -n "${UPDATE}" ]; then # we got something, do processing diff --git a/doc/3_advanced.md b/doc/3_advanced.md index d8bdfbf..2b5e432 100644 --- a/doc/3_advanced.md +++ b/doc/3_advanced.md @@ -232,7 +232,7 @@ Only if the retry fails also an error is returned. The downside is that send_mes If you want to disable automatic error processing and handle all errors manually (or don't care) set ```BASHBOT_RETRY``` to any no zero value. -[Telegram API error codes](https://core.telegram.org/api/errors) +[Telegram Bot API error codes](https://github.com/TelegramBotAPI/errors) #### Detect bot blocked @@ -274,5 +274,5 @@ Note: If you disable automatic retry, se above, you disable also connection prob #### [Prev Getting started](2_usage.md) #### [Next Expert Use](4_expert.md) -#### $$VERSION$$ v0.96-pre-40-ge663979 +#### $$VERSION$$ v0.96-pre-41-g15f6da8 diff --git a/doc/7_develop.md b/doc/7_develop.md index 53c141b..054e931 100644 --- a/doc/7_develop.md +++ b/doc/7_develop.md @@ -43,10 +43,15 @@ If a not mandatory module is used in 'bashbot.sh' or 'commands.sh', the use of ` Addons must register themself to BASHBOT_EVENTS at startup, e.g. to call a function everytime a message is received. Addons works similar as 'commands.sh' and 'mycommands.sh' but are much more flexible on when functions/commands are triggered. -Another major difference is: **Addons are executed in the context of the main script**, while 'commands.sh' and 'mycommands.sh' are executed new child process on efery execution. -This is why event functions are time critical and must finish as fast as possible. +Another major difference is: While regular command processing is done in as a new sub shell for every command, +**Addons are executed in the context of bashbot event loop!**, This is why event functions are (time) critical +and must return as fast as possible. **If an event function call exit, also bashbot exits!** + +*Important*: If an event function e.g. send_messages or need longer time for processing spawn a sub shell! +This prevents blocking or exiting bashbots event loop. #### Bashbot Events + Addons must register functions to bashbot events by providing their name, and internal identifier and a callback function. If an event occours each registered function for the event is called. @@ -85,7 +90,9 @@ BASHBOT_EVENT_TEXT["example_1"]="example_echo" example_echo() { local event="$1" key="$2" # all availible bashbot functions and variables can be used - send_normal_message "${CHAT[ID]}" "Event: ${event} Key: ${key} : ${MESSAGE[0]}" & # note the &! + send_normal_message "${CHAT[ID]}" "Event: ${event} Key: ${key} : ${MESSAGE[0]}" & # NOTE the & for sub shell!!! + + do_more_processing & # NOTE the & for sub shell!!! } ``` @@ -135,7 +142,7 @@ This means if you register an every 5 minutes callback first execution may < 5 M * 0 ignored * 1 execute once every minute * x execute every x minutes - * -x execute once WHITHIN the next x Minutes (10=between now and 10 Minutes) + * -x execute once WHITHIN the next x Minutes (next 10 Minutes since start "event") Note: If you want exact "in x minutes" use "EVENT_TIMER plus x" as time: ```-(EVENT_TIMER + x)``` @@ -153,7 +160,7 @@ example_everymin() { # register other callback: BAHSBOT_EVENT_TIMER["example_every5","5"]="example_every5min" -# execute once in the next 1 to 10 minutes +# execute once on the next 10 minutes since start "event" BAHSBOT_EVENT_TIMER["example_10min","-10"]="example_in10min" # once in exact 10 minutes @@ -338,5 +345,5 @@ fi #### [Prev Function Reference](6_reference.md) -#### $$VERSION$$ v0.96-pre-40-ge663979 +#### $$VERSION$$ v0.96-pre-41-g15f6da8