mirror of
https://github.com/danog/telegram-bot-bash.git
synced 2024-11-26 20:15:02 +01:00
Now the messages id can be accessed in MESSAGE[ID], all updates fetched with getUpdates are processed simultaneously and newlines and certain unicode codepoints are parsed correctly in messages (closes #21)
This commit is contained in:
parent
e040558919
commit
b5c576633d
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
*~
|
*~
|
||||||
count
|
count
|
||||||
token
|
token
|
||||||
|
*.save
|
||||||
|
2
JSON.sh
2
JSON.sh
@ -1 +1 @@
|
|||||||
Subproject commit 2de457939e9b3fcf0d1e3f55b6072d060cb47a45
|
Subproject commit 022ec337c3225d5857856fd924cef0ab20443088
|
@ -81,6 +81,7 @@ Then start editing the commands.
|
|||||||
You can read incoming data using the following variables:
|
You can read incoming data using the following variables:
|
||||||
|
|
||||||
* ```$MESSAGE```: Incoming messages
|
* ```$MESSAGE```: Incoming messages
|
||||||
|
* ```$MESSAGE[ID]```: ID of incoming message
|
||||||
* ```$CAPTION```: Captions
|
* ```$CAPTION```: Captions
|
||||||
* ```$USER```: This array contains the First name, last name, username and user id of the sender of the current message.
|
* ```$USER```: This array contains the First name, last name, username and user id of the sender of the current message.
|
||||||
* ```${USER[ID]}```: User id
|
* ```${USER[ID]}```: User id
|
||||||
@ -93,6 +94,8 @@ You can read incoming data using the following variables:
|
|||||||
* ```${CHAT[LAST_NAME]}```: Chat's last name
|
* ```${CHAT[LAST_NAME]}```: Chat's last name
|
||||||
* ```${CHAT[USERNAME]}```: Username
|
* ```${CHAT[USERNAME]}```: Username
|
||||||
* ```${CHAT[TITLE]}```: Title
|
* ```${CHAT[TITLE]}```: Title
|
||||||
|
* ```${CHAT[TYPE]}```: Type
|
||||||
|
* ```${CHAT[ALL_MEMBERS_ARE_ADMINISTRATORS]}```: All members are administrators (true if true)
|
||||||
* ```$URLS```: This array contains documents, audio files, stickers, voice recordings and stickers stored in the form of URLs.
|
* ```$URLS```: This array contains documents, audio files, stickers, voice recordings and stickers stored in the form of URLs.
|
||||||
* ```${URLS[AUDIO]}```: Audio files
|
* ```${URLS[AUDIO]}```: Audio files
|
||||||
* ```${URLS[VIDEO]}```: Videos
|
* ```${URLS[VIDEO]}```: Videos
|
||||||
|
73
bashbot.sh
73
bashbot.sh
@ -306,49 +306,61 @@ inproc() {
|
|||||||
tmux send-keys -t $copname "$MESSAGE ${URLS[*]}
|
tmux send-keys -t $copname "$MESSAGE ${URLS[*]}
|
||||||
"
|
"
|
||||||
}
|
}
|
||||||
|
process_updates() {
|
||||||
|
MAX_PROCESS_NUMBER=$(echo "$UPDATE" | sed '/\["result",[0-9]*\]/!d' | tail -1 | sed 's/\["result",//g;s/\].*//g')
|
||||||
|
for ((PROCESS_NUMBER=0; PROCESS_NUMBER<=MAX_PROCESS_NUMBER; PROCESS_NUMBER++)); do
|
||||||
|
if [ "$1" == "test" ]; then
|
||||||
|
process_client "$1"
|
||||||
|
else
|
||||||
|
process_client "$1" &
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
process_client() {
|
process_client() {
|
||||||
# Message
|
# Message
|
||||||
MESSAGE=$(echo "$res" | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
|
MESSAGE[0]=$(echo -e $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","text"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
MESSAGE_ID=$(echo "$res" | egrep '\["result",0,"message","message_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
MESSAGE[ID]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","message_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
# Chat
|
# Chat
|
||||||
CHAT[ID]=$(echo "$res" | egrep '\["result",0,"message","chat","id"\]' | cut -f 2)
|
CHAT[ID]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","id"\]' | cut -f 2)
|
||||||
CHAT[FIRST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
CHAT[FIRST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CHAT[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
CHAT[LAST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CHAT[USERNAME]=$(echo "$res" | egrep '\["result",0,"message","chat","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
CHAT[USERNAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CHAT[TITLE]=$(echo "$res" | egrep '\["result",0,"message","chat","title"\]' | cut -f 2 | cut -d '"' -f 2)
|
CHAT[TITLE]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","title"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
CHAT[TYPE]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","type"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
CHAT[ALL_MEMBERS_ARE_ADMINISTRATORS]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","chat","all_members_are_administrators"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
# User
|
# User
|
||||||
USER[ID]=$(echo "$res" | egrep '\["result",0,"message","from","id"\]' | cut -f 2)
|
USER[ID]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","from","id"\]' | cut -f 2)
|
||||||
USER[FIRST_NAME]=$(echo "$res" | egrep '\["result",0,"message","from","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
USER[FIRST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","from","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
USER[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"message","from","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
USER[LAST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","from","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
USER[USERNAME]=$(echo "$res" | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
USER[USERNAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
# Audio
|
# Audio
|
||||||
URLS[AUDIO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","audio","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
URLS[AUDIO]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","audio","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
# Document
|
# Document
|
||||||
URLS[DOCUMENT]=$(get_file $(echo "$res" | egrep '\["result",0,"message","document","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
URLS[DOCUMENT]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","document","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
# Photo
|
# Photo
|
||||||
URLS[PHOTO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","photo",.*,"file_id"\]' | cut -f 2 | cut -d '"' -f 2 | sed -n '$p'))
|
URLS[PHOTO]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","photo",.*,"file_id"\]' | cut -f 2 | cut -d '"' -f 2 | sed -n '$p'))
|
||||||
# Sticker
|
# Sticker
|
||||||
URLS[STICKER]=$(get_file $(echo "$res" | egrep '\["result",0,"message","sticker","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
URLS[STICKER]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","sticker","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
# Video
|
# Video
|
||||||
URLS[VIDEO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","video","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
URLS[VIDEO]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","video","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
# Voice
|
# Voice
|
||||||
URLS[VOICE]=$(get_file $(echo "$res" | egrep '\["result",0,"message","voice","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
URLS[VOICE]=$(get_file $(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","voice","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
|
||||||
# Contact
|
# Contact
|
||||||
CONTACT[NUMBER]=$(echo "$res" | egrep '\["result",0,"message","contact","phone_number"\]' | cut -f 2 | cut -d '"' -f 2)
|
CONTACT[NUMBER]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","contact","phone_number"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CONTACT[FIRST_NAME]=$(echo "$res" | egrep '\["result",0,"message","contact","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
CONTACT[FIRST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","contact","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CONTACT[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"message","contact","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
CONTACT[LAST_NAME]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","contact","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
CONTACT[USER_ID]=$(echo "$res" | egrep '\["result",0,"message","contact","user_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
CONTACT[USER_ID]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","contact","user_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
# Caption
|
# Caption
|
||||||
CAPTION=$(echo "$res" | egrep '\["result",0,"message","caption"\]' | cut -f 2 | cut -d '"' -f 2)
|
CAPTION=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","caption"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
# Location
|
# Location
|
||||||
LOCATION[LONGITUDE]=$(echo "$res" | egrep '\["result",0,"message","location","longitude"\]' | cut -f 2 | cut -d '"' -f 2)
|
LOCATION[LONGITUDE]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","location","longitude"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
LOCATION[LATITUDE]=$(echo "$res" | egrep '\["result",0,"message","location","latitude"\]' | cut -f 2 | cut -d '"' -f 2)
|
LOCATION[LATITUDE]=$(echo "$UPDATE" | egrep '\["result",'$PROCESS_NUMBER',"message","location","latitude"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
NAME="$(echo ${URLS[*]} | sed 's/.*\///g')"
|
NAME="$(echo ${URLS[*]} | sed 's/.*\///g')"
|
||||||
|
|
||||||
# Tmux
|
# Tmux
|
||||||
@ -364,17 +376,17 @@ process_client() {
|
|||||||
# source the script with source as param to use functions in other scripts
|
# source the script with source as param to use functions in other scripts
|
||||||
while [ "$1" == "startbot" ]; do {
|
while [ "$1" == "startbot" ]; do {
|
||||||
|
|
||||||
res=$(curl -s $UPD_URL$OFFSET | ./JSON.sh/JSON.sh -s)
|
UPDATE=$(curl -s $UPD_URL$OFFSET | ./JSON.sh/JSON.sh)
|
||||||
|
|
||||||
# Offset
|
# Offset
|
||||||
OFFSET=$(echo "$res" | egrep '\["result",0,"update_id"\]' | cut -f 2)
|
OFFSET=$(echo "$UPDATE" | egrep '\["result",[0-9]*,"update_id"\]' | tail -1 | cut -f 2)
|
||||||
OFFSET=$((OFFSET+1))
|
OFFSET=$((OFFSET+1))
|
||||||
|
|
||||||
if [ $OFFSET != 1 ]; then
|
if [ $OFFSET != 1 ]; then
|
||||||
if [ "$2" == "test" ]; then
|
if [ "$2" == "test" ]; then
|
||||||
process_client
|
process_updates "$2"
|
||||||
else
|
else
|
||||||
process_client&
|
process_updates "$2" &
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -419,6 +431,9 @@ case "$1" in
|
|||||||
"attach")
|
"attach")
|
||||||
tmux attach -t $ME
|
tmux attach -t $ME
|
||||||
;;
|
;;
|
||||||
|
"source")
|
||||||
|
echo "OK"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e '\e[0;31mBAD REQUEST\e[0m'
|
echo -e '\e[0;31mBAD REQUEST\e[0m'
|
||||||
echo -e '\e[0;31mAvailable arguments: outproc, count, broadcast, start, kill, help, attach\e[0m'
|
echo -e '\e[0;31mAvailable arguments: outproc, count, broadcast, start, kill, help, attach\e[0m'
|
||||||
|
@ -15,7 +15,7 @@ if [ "$1" = "source" ];then
|
|||||||
else
|
else
|
||||||
if ! tmux ls | grep -v send | grep -q $copname; then
|
if ! tmux ls | grep -v send | grep -q $copname; then
|
||||||
[ ! -z ${URLS[*]} ] && {
|
[ ! -z ${URLS[*]} ] && {
|
||||||
curl -s ${URLS[*]} -o $NAME
|
curl -s ${URLS[*]} -o $NAME
|
||||||
send_file "${CHAT[ID]}" "$NAME" "$CAPTION"
|
send_file "${CHAT[ID]}" "$NAME" "$CAPTION"
|
||||||
rm "$NAME"
|
rm "$NAME"
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ else
|
|||||||
if [[ $iQUERY_MSG == web ]]; then
|
if [[ $iQUERY_MSG == web ]]; then
|
||||||
answer_inline_query "$iQUERY_ID" "article" "GitHub" "http://github.com/topkecleon/telegram-bot-bash"
|
answer_inline_query "$iQUERY_ID" "article" "GitHub" "http://github.com/topkecleon/telegram-bot-bash"
|
||||||
fi
|
fi
|
||||||
fi
|
fi &
|
||||||
fi
|
fi
|
||||||
case $MESSAGE in
|
case $MESSAGE in
|
||||||
'/question')
|
'/question')
|
||||||
|
Loading…
Reference in New Issue
Block a user