+ basic reply support, generic deserialize function
parent
9719b84267
commit
26520cf094
90
tg.sh
90
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
|
||||
|
|
Loading…
Reference in New Issue