mirror of
https://github.com/danog/telegram-bot-bash.git
synced 2024-12-02 09:28:01 +01:00
Nearly done
This commit is contained in:
parent
bd4a9cdae4
commit
501b757ac2
154
bashbot.sh
154
bashbot.sh
@ -26,7 +26,7 @@ VIDEO_URL=$URL'/sendVideo'
|
|||||||
VOICE_URL=$URL'/sendVoice'
|
VOICE_URL=$URL'/sendVoice'
|
||||||
LOCATION_URL=$URL'/sendLocation'
|
LOCATION_URL=$URL'/sendLocation'
|
||||||
ACTION_URL=$URL'/sendChatAction'
|
ACTION_URL=$URL'/sendChatAction'
|
||||||
|
FORWARD_URL=$URL'/forwardMessage'
|
||||||
|
|
||||||
FILE_URL='https://api.telegram.org/file/bot'$TOKEN'/'
|
FILE_URL='https://api.telegram.org/file/bot'$TOKEN'/'
|
||||||
UPD_URL=$URL'/getUpdates?offset='
|
UPD_URL=$URL'/getUpdates?offset='
|
||||||
@ -62,12 +62,6 @@ send_keyboard() {
|
|||||||
res=$(curl -s "$MSG_URL" --header "content-type: multipart/form-data" -F "chat_id=$chat" -F "text=$text" -F "reply_markup={\"keyboard\": [$keyboard],\"one_time_keyboard\": true}")
|
res=$(curl -s "$MSG_URL" --header "content-type: multipart/form-data" -F "chat_id=$chat" -F "text=$text" -F "reply_markup={\"keyboard\": [$keyboard],\"one_time_keyboard\": true}")
|
||||||
}
|
}
|
||||||
|
|
||||||
send_photo() {
|
|
||||||
res=$(curl -s "$PHO_URL" -F "chat_id=$1" -F "photo=@$2")
|
|
||||||
}
|
|
||||||
|
|
||||||
send_audio() {
|
|
||||||
}
|
|
||||||
|
|
||||||
get_file() {
|
get_file() {
|
||||||
[ "$1" != "" ] && echo $FILE_URL$(curl -s "$GET_URL" -F "file_id=$1" | ./JSON.sh -s | egrep '\["result","file_path"\]' | cut -f 2 | cut -d '"' -f 2)
|
[ "$1" != "" ] && echo $FILE_URL$(curl -s "$GET_URL" -F "file_id=$1" | ./JSON.sh -s | egrep '\["result","file_path"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
@ -75,12 +69,66 @@ get_file() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
send_file() {
|
send_file() {
|
||||||
|
[ "$2" = "" ] && return
|
||||||
|
chat_id=$1
|
||||||
|
file=$2
|
||||||
|
ext="${file##*.}"
|
||||||
|
case $ext in
|
||||||
|
"mp3")
|
||||||
|
CUR_URL=$AUDIO_URL
|
||||||
|
WHAT=audio
|
||||||
|
STATUS=upload_audio
|
||||||
|
;;
|
||||||
|
png|jpg|jpeg|gif)
|
||||||
|
CUR_URL=$PHO_URL
|
||||||
|
WHAT=photo
|
||||||
|
STATUS=upload_photo
|
||||||
|
;;
|
||||||
|
webp)
|
||||||
|
CUR_URL=$STICKER_URL
|
||||||
|
WHAT=sticker
|
||||||
|
STATUS=
|
||||||
|
;;
|
||||||
|
mp4)
|
||||||
|
CUR_URL=$VIDEO_URL
|
||||||
|
WHAT=video
|
||||||
|
STATUS=upload_video
|
||||||
|
;;
|
||||||
|
|
||||||
|
ogg)
|
||||||
|
CUR_URL=$VOICE_URL
|
||||||
|
WHAT=voice
|
||||||
|
STATUS=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
CUR_URL=$DOCUMENT_URL
|
||||||
|
WHAT=document
|
||||||
|
STATUS=upload_document
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
send_action $chat_id $STATUS
|
||||||
|
res=$(curl -s "$CUR_URL" -F "chat_id=$chat_id" -F "$WHAT=@$file")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# typing for text messages, upload_photo for photos, record_video or upload_video for videos, record_audio or upload_audio for audio files, upload_document for general files, find_location for location
|
||||||
|
|
||||||
|
send_action() {
|
||||||
|
[ "$2" = "" ] && return
|
||||||
|
res=$(curl -s "$ACTION_URL" -F "chat_id=$1" -F "action=$2")
|
||||||
|
}
|
||||||
|
|
||||||
|
send_location() {
|
||||||
|
[ "$3" = "" ] && return
|
||||||
|
res=$(curl -s "$LOCATION_URL" -F "chat_id=$1" -F "latitude=$2" -F "longitude=$3")
|
||||||
|
}
|
||||||
|
|
||||||
|
forward() {
|
||||||
|
[ "$3" = "" ] && return
|
||||||
|
res=$(curl -s "$FORWARD_URL" -F "chat_id=$1" -F "from_chat_id=$2" -F "message_id=$3")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
startproc() {
|
startproc() {
|
||||||
local copname="$1"
|
|
||||||
local USER="$2"
|
|
||||||
mkdir -p "$copname"
|
mkdir -p "$copname"
|
||||||
mkfifo $copname/out
|
mkfifo $copname/out
|
||||||
tmux new-session -d -s $copname "./question 2>&1>$copname/out"
|
tmux new-session -d -s $copname "./question 2>&1>$copname/out"
|
||||||
@ -94,23 +142,52 @@ startproc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inproc() {
|
inproc() {
|
||||||
local copname="$1"
|
|
||||||
local copid="$2"
|
|
||||||
local MESSAGE="$3"
|
|
||||||
shift 2
|
|
||||||
tmux send-keys -t $copname "$MESSAGE
|
tmux send-keys -t $copname "$MESSAGE
|
||||||
"
|
"
|
||||||
ps aux | grep -v grep | grep -q "$copid" || { rm -r $copname; };
|
ps aux | grep -v grep | grep -q "$copid" || { rm -r $copname; };
|
||||||
}
|
}
|
||||||
|
|
||||||
process_client() {
|
process_client() {
|
||||||
local copname="CO${USER[ID]}"
|
# User
|
||||||
local copidname="$copname/pid"
|
USER[FIRST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
local copid="$(cat $copidname 2>/dev/null)"
|
USER[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
USER[USERNAME]=$(echo "$res" | egrep '\["result",0,"message","chat","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
URLS[AUDIO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","audio","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
# Documenr
|
||||||
|
URLS[DOCUMENT]=$(get_file $(echo "$res" | egrep '\["result",0,"message","document","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
# Photo
|
||||||
|
URLS[PHOTO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","photo",.*,"file_id"\]' | cut -f 2 | cut -d '"' -f 2 | sed -n '$p'))
|
||||||
|
# Sticker
|
||||||
|
URLS[STICKER]=$(get_file $(echo "$res" | egrep '\["result",0,"message","sticker","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
# Video
|
||||||
|
URLS[VIDEO]=$(get_file $(echo "$res" | egrep '\["result",0,"message","video","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
# Voice
|
||||||
|
URLS[VOICE]=$(get_file $(echo "$res" | egrep '\["result",0,"message","voice","file_id"\]' | cut -f 2 | cut -d '"' -f 2))
|
||||||
|
|
||||||
|
# Contact
|
||||||
|
CONTACT[NUMBER]=$(echo "$res" | egrep '\["result",0,"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[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"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)
|
||||||
|
|
||||||
|
# Caption
|
||||||
|
CAPTION=$(echo "$res" | egrep '\["result",0,"message","caption"\]' | cut -f 2 | cut -d '"' -f 2)
|
||||||
|
|
||||||
|
# Location
|
||||||
|
LOCATION[LONGITUDE]=$(echo "$res" | egrep '\["result",0,"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)
|
||||||
|
|
||||||
|
# Tmux
|
||||||
|
copname="CO${USER[ID]}"
|
||||||
|
copidname="$copname/pid"
|
||||||
|
copid="$(cat $copidname 2>/dev/null)"
|
||||||
|
|
||||||
if [ "$copid" = "" ]; then
|
if [ "$copid" = "" ]; then
|
||||||
case $MESSAGE in
|
case $MESSAGE in
|
||||||
'/question')
|
'/question')
|
||||||
startproc "$copname" "${USER[ID]}"&
|
startproc&
|
||||||
;;
|
;;
|
||||||
'/info')
|
'/info')
|
||||||
send_message "${USER[ID]}" "This is bashbot, the Telegram bot written entirely in bash."
|
send_message "${USER[ID]}" "This is bashbot, the Telegram bot written entirely in bash."
|
||||||
@ -120,13 +197,11 @@ process_client() {
|
|||||||
Features background tasks and interactive chats.
|
Features background tasks and interactive chats.
|
||||||
Can serve as an interface for cli programs.
|
Can serve as an interface for cli programs.
|
||||||
Currently can send messages, custom keyboards and photos.
|
Currently can send messages, custom keyboards and photos.
|
||||||
|
|
||||||
Available commands:
|
Available commands:
|
||||||
/start: Start bot and get this message.
|
/start: Start bot and get this message.
|
||||||
/info: Get shorter info message about this bot.
|
/info: Get shorter info message about this bot.
|
||||||
/question: Start interactive chat.
|
/question: Start interactive chat.
|
||||||
/cancel: Cancel any currently running interactive chats.
|
/cancel: Cancel any currently running interactive chats.
|
||||||
|
|
||||||
Written by @topkecleon, Juan Potato (@awkward_potato), Lorenzo Santina (BigNerd95) and Daniil Gentili (danog)
|
Written by @topkecleon, Juan Potato (@awkward_potato), Lorenzo Santina (BigNerd95) and Daniil Gentili (danog)
|
||||||
https://github.com/topkecleon/telegram-bot-bash
|
https://github.com/topkecleon/telegram-bot-bash
|
||||||
"
|
"
|
||||||
@ -141,7 +216,7 @@ https://github.com/topkecleon/telegram-bot-bash
|
|||||||
rm -r $copname
|
rm -r $copname
|
||||||
send_message "${USER[ID]}" "Command canceled."
|
send_message "${USER[ID]}" "Command canceled."
|
||||||
;;
|
;;
|
||||||
*) inproc "$copname" "$copid" "$MESSAGE";;
|
*) inproc;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -160,43 +235,6 @@ while true; do {
|
|||||||
OFFSET=$((OFFSET+1))
|
OFFSET=$((OFFSET+1))
|
||||||
|
|
||||||
if [ $OFFSET != 1 ]; then
|
if [ $OFFSET != 1 ]; then
|
||||||
# User
|
|
||||||
USER[FIRST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","first_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
USER[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"message","chat","last_name"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
USER[USERNAME]=$(echo "$res" | egrep '\["result",0,"message","chat","username"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
|
|
||||||
# Audio
|
|
||||||
AUDIO_ID=$(echo "$res" | egrep '\["result",0,"message","audio","file_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
URLS[AUDIO]=$(get_file "$AUDIO_ID")
|
|
||||||
# Document
|
|
||||||
DOCUMENT_ID=$(echo "$res" | egrep '\["result",0,"message","document","file_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
URLS[DOCUMENT]=$(get_file "$DOCUMENT_ID")
|
|
||||||
# Photo
|
|
||||||
PHOTO_ID=$(echo "$res" | egrep '\["result",0,"message","photo",.*,"file_id"\]' | cut -f 2 | cut -d '"' -f 2 | sed -n '$p')
|
|
||||||
URLS[PHOTO]=$(get_file "$PHOTO_ID")
|
|
||||||
# Sticker
|
|
||||||
STICKER_ID=$(echo "$res" | egrep '\["result",0,"message","sticker","file_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
URLS[STICKER]=$(get_file "$STICKER_ID")
|
|
||||||
# Video
|
|
||||||
VIDEO_ID=$(echo "$res" | egrep '\["result",0,"message","video","file_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
URLS[VIDEO]=$(get_file "$VIDEO_ID")
|
|
||||||
# Voice
|
|
||||||
VOICE_ID=$(echo "$res" | egrep '\["result",0,"message","voice","file_id"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
URLS[VOICE]=$(get_file "$VOICE_ID")
|
|
||||||
|
|
||||||
# Contact
|
|
||||||
CONTACT[NUMBER]=$(echo "$res" | egrep '\["result",0,"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[LAST_NAME]=$(echo "$res" | egrep '\["result",0,"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)
|
|
||||||
|
|
||||||
# Caption
|
|
||||||
CAPTION=$(echo "$res" | egrep '\["result",0,"message","caption"\]' | cut -f 2 | cut -d '"' -f 2)
|
|
||||||
|
|
||||||
# Location
|
|
||||||
LOCATION[LONGITUDE]=$(echo "$res" | egrep '\["result",0,"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)
|
|
||||||
|
|
||||||
process_client&
|
process_client&
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user