diff --git a/addons/example.sh b/addons/example.sh index 86e480c..77fe724 100644 --- a/addons/example.sh +++ b/addons/example.sh @@ -19,6 +19,8 @@ # # BASHBOT_EVENT_INLINE inline query received # BASHBOT_EVENT_MESSAGE any type of message received +# BASHBOT_EVENT_TEXT message containing message text received +# BASHBOT_EVENT_CMD a command is recieved # BASHBOT_EVENT_REPLYTO reply to message received # BASHBOT_EVENT_FORWARD forwarded message received # BASHBOT_EVENT_CONTACT contact received @@ -37,29 +39,19 @@ # # export used events -export BASHBOT_EVENT_INLINE BASHBOT_EVENT_REPLY +export BASHBOT_EVENT_INLINE BASHBOT_EVENT_CMD BASHBOT_EVENT_REPLY # any global variable defined by addons MUST be prefixed by addon name EXAMPLE_ME="example" # initialize after installation or update if [[ "$1" = "init"* ]]; then - : # notihung to do + : # nothing to do fi # register on startbot if [[ "$1" = "start"* ]]; then - # register to inline - BASHBOT_EVENT_INLINE["${EXAMPLE_ME}"]="${EXAMPLE_ME}_inline" - - # any function defined by addons MUST be prefixed by addon name - # function local variables can have any name, but must be LOCAL - example_inline(){ - local msg="${MESSAGE}" - send_normal_message "${CHAT[ID]}" "Inline query received: ${msg}" - } - # register to reply BASHBOT_EVENT_REPLY["${EXAMPLE_ME}"]="${EXAMPLE_ME}_reply" @@ -69,4 +61,18 @@ if [[ "$1" = "start"* ]]; then local msg="message" send_markdown_message "${CHAT[ID]}" "User *${USER[USERNAME]}* replied to ${msg} from *${REPLYTO[USERNAME]}*" } + + # register to inline and command + BASHBOT_EVENT_INLINE["${EXAMPLE_ME}"]="${EXAMPLE_ME}_multievent" + BASHBOT_EVENT_CMD["${EXAMPLE_ME}"]="${EXAMPLE_ME}_multievent" + + # any function defined by addons MUST be prefixed by addon name + # function local variables can have any name, but must be LOCAL + example_multievent(){ + local type="$1" + local msg="${MESSAGE[0]}" + # shellcheck disable=SC2154 + [ "${type}" = "inline" ] && msg="${iQUERY[0]}" + send_normal_message "${CHAT[ID]}" "${type} received: ${msg}" + } fi diff --git a/bashbot.sh b/bashbot.sh index 6db56d5..b4c25c7 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.90-dev2-6-g3c6b2d3 +#### $$VERSION$$ v0.90-dev2-8-g9b05ae0 # # Exit Codes: # - 0 sucess (hopefully) @@ -133,8 +133,9 @@ UPD_URL=$URL'/getUpdates?offset=' GETFILE_URL=$URL'/getFile' unset USER +declare -a CMD declare -A UPD BOTSENT USER MESSAGE URLS CONTACT LOCATION CHAT FORWARD REPLYTO VENUE iQUERY -export res UPD BOTSENT USER MESSAGE URLS CONTACT LOCATION CHAT FORWARD REPLYTO VENUE iQUERY CAPTION +export res CMD UPD BOTSENT USER MESSAGE URLS CONTACT LOCATION CHAT FORWARD REPLYTO VENUE iQUERY CAPTION COMMANDS="${BASHBOT_ETC:-.}/commands.sh" @@ -327,6 +328,7 @@ process_updates() { } process_client() { local num="$1" debug="$2" + CMD=( ) iQUERY[ID]="${UPD["result",${num},"inline_query","id"]}" if [ "${iQUERY[ID]}" = "" ]; then [[ "${debug}" = *"debug"* ]] && cat <<< "$UPDATE" >>"MESSAGE.log" @@ -353,6 +355,11 @@ process_client() { grep -q "$tmpcount" <"${COUNTFILE}" &>/dev/null || cat <<< "$tmpcount" >>"${COUNTFILE}" } +declare -A BASBOT_EVENT_INLINE BASBOT_EVENT_MESSAGE BASHBOT_EVENT_CMD BASBOT_EVENT_REPLY BASBOT_EVENT_FORWARD +declare -A BASBOT_EVENT_CONTACT BASBOT_EVENT_LOCATION BASBOT_EVENT_FILE BASHBOT_EVENT_TEXT +export BASBOT_EVENT_INLINE BASBOT_EVENT_MESSAGE BASHBOT_EVENT_CMD BASBOT_EVENT_REPLY BASBOT_EVENT_FORWARD +export BASBOT_EVENT_CONTACT BASBOT_EVENT_LOCATION BASBOT_EVENT_FILE BASHBOT_EVENT_TEXT + event_inline() { local event debug="$1" # shellcheck disable=SC2153 @@ -370,6 +377,24 @@ event_message() { _exec_if_function "${BASHBOT_EVENT_MESSAGE[${event}]}" "messsage" "${debug}" done + # ${TEXT[*]} event_text + if [ "${MESSAGE[0]}" != "" ]; then + # shellcheck disable=SC2153 + for event in "${!BASHBOT_EVENT_TEXT[@]}" + do + _exec_if_function "${BASHBOT_EVENT_TEXT[${event}]}" "text" "${debug}" + done + + # ${CMD[*]} event_cmd + if [ "${CMD[0]}" != "" ]; then + # shellcheck disable=SC2153 + for event in "${!BASHBOT_EVENT_CMD[@]}" + do + _exec_if_function "${BASHBOT_EVENT_CMD[${event}]}" "command" "${debug}" + done + fi + fi + # ${REPLYTO[*]} event_replyto if [ "${REPLYTO[UID]}" != "" ]; then # shellcheck disable=SC2153 @@ -504,11 +529,15 @@ process_message() { # Location LOCATION[LONGITUDE]="${UPD["result",${num},"message","location","longitude"]}" LOCATION[LATITUDE]="${UPD["result",${num},"message","location","latitude"]}" - # event_message & -} -declare -A BASBOT_EVENT_INLINE BASBOT_EVENT_MESSAGE BASBOT_EVENT_REPLY BASBOT_EVENT_FORWARD BASBOT_EVENT_CONTACT BASBOT_EVENT_LOCATION BASBOT_EVENT_FILE -export BASBOT_EVENT_INLINE BASBOT_EVENT_MESSAGE BASBOT_EVENT_REPLY BASBOT_EVENT_FORWARD BASBOT_EVENT_CONTACT BASBOT_EVENT_LOCATION BASBOT_EVENT_FILE + # split message in command and args + if [[ "${MESSAGE[0]}" = "/"* ]]; then + set -f; unset IFS + # shellcheck disable=SC2206 + CMD=( ${MESSAGE[0]} ) + set +f + fi +} ######################### # main get updates loop, should never terminate