Adding missing telegram methods...

This commit is contained in:
danogentili 2016-01-06 17:11:56 +01:00
parent 03be1530cb
commit bd4a9cdae4
3 changed files with 119 additions and 22 deletions

View File

@ -8,6 +8,7 @@ throw () {
BRIEF=0
LEAFONLY=0
PRUNE=0
NO_HEAD=0
NORMALIZE_SOLIDUS=0
usage() {
@ -17,6 +18,7 @@ usage() {
echo "-p - Prune empty. Exclude fields with empty values."
echo "-l - Leaf only. Only show leaf nodes, which stops data duplication."
echo "-b - Brief. Combines 'Leaf only' and 'Prune empty' options."
echo "-n - No-head. Do not show nodes that have no path (lines that start with [])."
echo "-s - Remove escaping of the solidus symbol (stright slash)."
echo "-h - This help text."
echo
@ -39,6 +41,8 @@ parse_options() {
;;
-p) PRUNE=1
;;
-n) NO_HEAD=1
;;
-s) NORMALIZE_SOLIDUS=1
;;
?*) echo "ERROR: Unknown option."
@ -170,6 +174,8 @@ parse_value () {
;;
esac
[ "$value" = '' ] && return
[ "$NO_HEAD" -eq 1 ] && [ -z "$jpath" ] && return
[ "$LEAFONLY" -eq 0 ] && [ "$PRUNE" -eq 0 ] && print=1
[ "$LEAFONLY" -eq 1 ] && [ "$isleaf" -eq 1 ] && [ $PRUNE -eq 0 ] && print=1
[ "$LEAFONLY" -eq 0 ] && [ "$PRUNE" -eq 1 ] && [ "$isempty" -eq 0 ] && print=1
@ -194,3 +200,5 @@ then
parse_options "$@"
tokenize | parse
fi
# vi: expandtab sw=2 ts=2

View File

@ -72,7 +72,32 @@ git clone https://github.com/topkecleon/telegram-bot-bash
Paste the token on line 12 (instead of tokenhere).
Then start editing the commands.
### Recieve data
You can read incoming data using the following variables:
* ```$MESSAGE```: Incoming messages
* ```$CAPTION```: Captions
* ```$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[FIRST_NAME]}```: User's first name
* ```${USER[LAST_NAME]}```: User's last name
* ```${USER[USERNAME]}```: Username
* ```$URLS```: This array contains documents, audio files, stickers, voice recordings and stickers stored in the form of URLs.
* ```${URLS[AUDIO]}```: Audio files
* ```${URLS[VIDEO]}```: Videos
* ```${URLS[PHOTO]}```: Photos (maximum quality)
* ```${URLS[VOICE]}```: Voice recordings
* ```${URLS[STICKER]}```: Stickers
* ```${URLS[DOCUMENT]}```: Any other file
* ```$CONTACT```: This array contains info about contacts sent in a chat.
* ```${CONTACT[NUMBER]}```: Phone number
* ```${CONTACT[FIRST_NAME]}```: First name
* ```${CONTACT[LAST_NAME]}```: Last name
* ```${CONTACT[ID]}```: User id
* ```$LOCATION```: This array contains info about locations sent in a chat.
* ```${LOCATION[LONGITUDE]}```: Longitude
* ```${LOCATION[LATITUDE]}```: Latitude
### Usage
To send messages use the ```send_message``` function:
@ -103,6 +128,7 @@ Or both:
echo "Text that will appear in chat? mykeyboardstartshere Yep No myimagelocationstartshere /home/user/doge.jpg"
```
Once you're done editing start the bot with ```tmux new-session -d -s bashbot "./bashbot.sh"```.
To stop the bot run ```tmux kill-session -t bashbot```.
If some thing doesn't work as it should, debug with ```bash -x bashbot.sh```.

View File

@ -14,11 +14,25 @@
TOKEN='tokenhere'
URL='https://api.telegram.org/bot'$TOKEN
FORWARD_URL=$URL'/forwardMessage'
MSG_URL=$URL'/sendMessage'
PHO_URL=$URL'/sendPhoto'
AUDIO_URL=$URL'/sendAudio'
DOCUMENT_URL=$URL'/sendDocument'
STICKER_URL=$URL'/sendSticker'
VIDEO_URL=$URL'/sendVideo'
VOICE_URL=$URL'/sendVoice'
LOCATION_URL=$URL'/sendLocation'
ACTION_URL=$URL'/sendChatAction'
FILE_URL='https://api.telegram.org/file/bot'$TOKEN'/'
UPD_URL=$URL'/getUpdates?offset='
GET_URL=$URL'/getFile'
OFFSET=0
declare -A USER URLS CONTACT LOCATION
send_message() {
local chat="$1"
@ -52,25 +66,37 @@ send_photo() {
res=$(curl -s "$PHO_URL" -F "chat_id=$1" -F "photo=@$2")
}
send_audio() {
}
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)
}
send_file() {
}
startproc() {
local copname="$1"
local TARGET="$2"
local USER="$2"
mkdir -p "$copname"
mkfifo $copname/out
tmux new-session -d -n $copname "./question 2>&1>$copname/out"
tmux new-session -d -s $copname "./question 2>&1>$copname/out"
local pid=$(ps aux | sed '/tmux/!d;/'$copname'/!d;/sed/d;s/'$USER'\s*//g;s/\s.*//g')
echo $pid>$copname/pid
while ps aux | grep -v grep | grep -q $pid;do
read -t 10 line
[ "$line" != "" ] && send_message "$TARGET" "$line"
[ "$line" != "" ] && send_message "${USER[ID]}" "$line"
line=
done <$copname/out
}
inproc() {
local copname="$1"
local copid="$2"
local MESSAGE="$3"
local PHOTO_ID="$4"
shift 2
tmux send-keys -t $copname "$MESSAGE
"
@ -78,23 +104,19 @@ inproc() {
}
process_client() {
local MESSAGE=$1
local TARGET=$2
local PHOTO_ID=$3
local msg=""
local copname="CO$TARGET"
local copname="CO${USER[ID]}"
local copidname="$copname/pid"
local copid="$(cat $copidname 2>/dev/null)"
if [ "$copid" = "" ]; then
case $MESSAGE in
'/question')
startproc "$copname" "$TARGET"&
startproc "$copname" "${USER[ID]}"&
;;
'/info')
send_message "$TARGET" "This is bashbot, the Telegram bot written entirely in bash."
send_message "${USER[ID]}" "This is bashbot, the Telegram bot written entirely in bash."
;;
'/start')
send_message "$TARGET" "This is bashbot, the Telegram bot written entirely in bash.
send_message "${USER[ID]}" "This is bashbot, the Telegram bot written entirely in bash.
Features background tasks and interactive chats.
Can serve as an interface for cli programs.
Currently can send messages, custom keyboards and photos.
@ -110,34 +132,75 @@ https://github.com/topkecleon/telegram-bot-bash
"
;;
*)
send_message "$TARGET" "$MESSAGE"
send_message "${USER[ID]}" "$MESSAGE"
esac
else
case $MESSAGE in
'/cancel')
kill $copid
rm -r $copname
send_message "$TARGET" "Command canceled."
send_message "${USER[ID]}" "Command canceled."
;;
*) inproc "$copname" "$copid" "$MESSAGE" "$PHOTO_ID";;
*) inproc "$copname" "$copid" "$MESSAGE";;
esac
fi
}
while true; do {
res=$(curl -s $UPD_URL$OFFSET)
TARGET=$(echo $res | ./JSON.sh | egrep '\["result",0,"message","chat","id"\]' | cut -f 2)
OFFSET=$(echo $res | ./JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2)
MESSAGE=$(echo $res | ./JSON.sh -s | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
PHOTO_ID=$(echo $res | ./JSON.sh -s | egrep '\["result",0,"message","photo",.*,"file_id"\]' | cut -f 2 | cut -d '"' -f 2 | sed -n '$p')
res=$(curl -s $UPD_URL$OFFSET | ./JSON.sh -s)
# Target
USER[ID]=$(echo "$res" | egrep '\["result",0,"message","chat","id"\]' | cut -f 2)
# Offset
OFFSET=$(echo "$res" | egrep '\["result",0,"update_id"\]' | cut -f 2)
# Message
MESSAGE=$(echo "$res" | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
OFFSET=$((OFFSET+1))
if [ $OFFSET != 1 ]; then
process_client "$MESSAGE" "$TARGET" "$PHOTO_ID"&
# 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&
fi
}; done