2016-01-02 20:35:15 +01:00
#!/bin/bash
2015-07-10 07:43:08 +02:00
# bashbot, the Telegram bot written in bash.
2015-12-26 02:58:54 +01:00
# Written by @topkecleon, Juan Potato (@awkward_potato) and Lorenzo Santina (BigNerd95)
2015-07-10 07:43:08 +02:00
# http://github.com/topkecleon/bashbot
# Depends on JSON.sh (http://github.com/dominictarr/JSON.sh),
# which is MIT/Apache-licensed.
# This file is public domain in the USA and all free countries.
# If you're in Europe, and public domain does not exist, then haha.
2015-07-10 09:32:34 +02:00
TOKEN = ''
2015-07-10 07:43:08 +02:00
URL = 'https://api.telegram.org/bot' $TOKEN
2015-11-25 04:07:39 +01:00
MSG_URL = $URL '/sendMessage'
PHO_URL = $URL '/sendPhoto'
2015-07-10 07:43:08 +02:00
UPD_URL = $URL '/getUpdates?offset='
OFFSET = 0
2015-12-26 02:47:10 +01:00
send_message( ) {
2016-01-03 02:14:07 +01:00
[ " $2 " != "" ] && res = $( curl " $MSG_URL " -F " chat_id= $1 " -F " text= $2 " )
}
send_keyboard( ) {
for f in ${ @/1 \| 2 / } ; do keyboard = " $keyboard , [\" $f \"] " ; done
keyboard = ${ keyboard /^, / }
res = $( curl " $MSG_URL " -F " chat_id= $1 " -F " text= $2 " -F " reply_markup={\"keyboard\": $keyboard , \"one_time_keyboard\": true} " )
2015-11-25 04:07:39 +01:00
}
2015-12-26 02:47:10 +01:00
send_photo( ) {
2015-11-25 04:07:39 +01:00
res = $( curl " $PHO_URL " -F " chat_id= $1 " -F " photo=@ $2 " )
2015-07-10 09:32:34 +02:00
}
2016-01-03 02:14:07 +01:00
question( ) {
TARGET = " $1 '
echo " Why hello there.
Would you like some tea ( y/n) ?"
read answer
[ [ $answer = ~ ^( [ yY] [ eE] [ sS] | [ yY] ) $ ] ] && echo "OK then, here you go: http://www.rivertea.com/blog/wp-content/uploads/2013/12/Green-Tea.jpg" || echo "OK then."
until [ " $SUCCESS " = "y" ] ; do
send_keyboard " $TARGET " "Do you like Music?" "Yass!" "No"
read answer
case $answer in
'Yass!' ) echo "Goody!" ; SUCCESS = y; ;
'No' ) echo "Well that's weird" ; SUCCESS = y; ;
*) SUCCESS = n; ;
esac
done
2016-01-02 21:51:45 +01:00
}
2016-01-03 02:14:07 +01:00
inproc( ) {
copname = " $1 "
msg = " ${ @/1/ } "
echo " $msg " >& ${ $1 [ "0" ] }
}
outproc( ) {
copname = " $1 "
TARGET = " $2 "
while true; do read msg <& ${ $copname [ "0" ] } ; [ " $? " != "0" ] && return || send_message " $TARGET " " $msg " ; done
2016-01-02 20:35:15 +01:00
}
2016-01-02 21:51:45 +01:00
2015-12-26 02:47:10 +01:00
process_client( ) {
local MESSAGE = $1
local TARGET = $2
local msg = ""
2016-01-03 02:14:07 +01:00
local copname = " coproc $TARGET "
local copidname = " $copname " _PID
local copid = " ${ $copid } "
[ " $copid " = "" ] {
2016-01-02 21:51:45 +01:00
case $MESSAGE in
2016-01-03 02:14:07 +01:00
'/info' ) send_message " $TARGET " "This is bashbot, the Telegram bot written entirely in bash." ; ;
'/question' ) coproc " $copname " { question " $TARGET " ; } & >& 1; outproc " $copname " " $TARGET " ; return ; ;
*) send_message " $TARGET " " $MESSAGE " ; ;
2016-01-02 21:51:45 +01:00
esac
} || {
case $MESSAGE in
2016-01-03 02:14:07 +01:00
'/cancel' ) kill $copid ; ;
*) inproc " $copname " " $MESSAGE " ; ;
2016-01-02 21:51:45 +01:00
esac
2016-01-03 02:14:07 +01:00
}
2015-12-26 02:47:10 +01:00
}
2015-07-10 07:43:08 +02:00
while true; do {
2015-07-10 09:32:34 +02:00
res = $( curl $UPD_URL $OFFSET )
2015-07-10 07:43:08 +02:00
2015-07-10 09:32:34 +02:00
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)
2015-07-10 07:43:08 +02:00
OFFSET = $(( OFFSET+1))
2015-07-10 09:32:34 +02:00
if [ $OFFSET != 1 ] ; then
2016-01-02 20:46:34 +01:00
process_client " $MESSAGE " " $TARGET " &
2015-07-10 09:32:34 +02:00
fi
2015-07-10 07:43:08 +02:00
} & >/dev/null; done