From 26520cf094a5c40224fe4751cc1cb4e384d39aa2 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Tue, 31 Aug 2021 19:50:47 +0200 Subject: [PATCH] + basic reply support, generic deserialize function --- tg.sh | 90 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 27 deletions(-) diff --git a/tg.sh b/tg.sh index 180a959..01140e6 100755 --- a/tg.sh +++ b/tg.sh @@ -80,6 +80,11 @@ function _on_voice() { echo "[voice] ${event[json]}" } +#jq_to_array(jq_expression) +function _jq_to_array() { + declare -ga "_tmp=($(jq -r "$1" | sed 's/[][`~!@#$%^&*():;<>.,?/\|{}=+-]/\\&/g' ))" +} + _offset=0 while true; do @@ -88,6 +93,7 @@ while true; do unset IFS for (( i=0; i<${#_events[@]}; i++ )); do + declare -A event _msg_type="$(jq -r '(select(.message) | "message"), (select(.edited_message) | "edited_message")' <<< "${_events[$i]}")" _event_type="$(jq -r '(select(.message) | .message), (select(.edited_message) | .edited_message) | ( (select(.animation) | "animation"), @@ -98,8 +104,62 @@ while true; do (select(.video) | "video"), (select(.video_note) | "video_note"), (select(.voice) | "voice"))' <<< "${_events[$i]}")" - - declare -A event + + _jq_to_array '(select(.message) | .message), (select(.edited_message) | .edited_message) | + [.message_id, + .from.id, + .from.is_bot, + .from.first_name, + .from.last_name, + .from.username, + .chat.id, + (if .chat.type == "private" then .chat.username else .chat.title end), + .chat.type, + .date, + .text, + (if .reply_to_message then + .reply_to_message | ( + "true", + .message_id, + .from.id, + .from.is_bot, + .from.first_name, + .from.last_name, + .from.username, + .date, + .text + ) + else + "false" + end)] + | @sh' <<< "${_events[$i]}" + + event[message_id]="${_tmp[0]}" + event[from_id]="${_tmp[1]}" + event[from_is_bot]="${_tmp[2]}" + event[from_first_name]="${_tmp[3]}" + event[from_last_name]="${_tmp[4]}" + event[from_username]="${_tmp[5]}" + event[chat_id]="${_tmp[6]}" + event[chat_title]="${_tmp[7]}" + event[chat_type]="${_tmp[8]}" + event[date]="${_tmp[9]}" + event[text]="${_tmp[10]}" + + if [[ "${_tmp[11]}" == "true" ]]; then + event[reply]=true + event[reply_message_id]="${_tmp[12]}" + event[reply_from_id]="${_tmp[13]}" + event[reply_from_is_bot]="${_tmp[14]}" + event[reply_from_first_name]="${_tmp[15]}" + event[reply_from_last_name]="${_tmp[16]}" + event[reply_from_username]="${_tmp[17]}" + event[reply_date]="${_tmp[18]}" + event[reply_text]="${_tmp[19]}" + else + event[reply]=false + fi + event[type]="$_msg_type" event[json]="${_events[$i]}" if [[ "$_msg_type" == edited_message ]]; then @@ -120,31 +180,7 @@ while true; do _on_video_note elif [[ "$_event_type" == voice ]]; then _on_voice - else - declare -a "_tmp=($(jq -r '.message | - [.message_id, - .from.id, - .from.is_bot, - .from.first_name, - .from.last_name, - .from.username, - .chat.id, - (if .chat.type == "private" then .chat.username else .chat.title end), - .chat.type, - .date, - .text] - | @sh' <<< "${_events[$i]}" | sed 's/[][`~!@#$%^&*():;<>.,?/\|{}=+-]/\\&/g' ))" - event[message_id]="${_tmp[0]}" - event[from_id]="${_tmp[1]}" - event[from_is_bot]="${_tmp[2]}" - event[from_first_name]="${_tmp[3]}" - event[from_last_name]="${_tmp[4]}" - event[from_username]="${_tmp[5]}" - event[chat_id]="${_tmp[6]}" - event[chat_title]="${_tmp[7]}" - event[chat_type]="${_tmp[8]}" - event[date]="${_tmp[9]}" - event[text]="${_tmp[10]}" + else _on_msg fi unset event