2020-05-14 12:21:15 +00:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
########
|
|
|
|
|
#
|
|
|
|
|
# files: mycommands.sh.clean
|
|
|
|
|
# copy to mycommands.sh and add all your commands and functions here ...
|
|
|
|
|
#
|
2021-01-02 22:10:02 +00:00
|
|
|
|
#### $$VERSION$$ v1.21-pre-40-gf95e214
|
2020-05-14 12:21:15 +00:00
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
##########
|
|
|
|
|
# edit the following lines to fit your bot usage
|
|
|
|
|
|
2020-05-14 20:12:44 +00:00
|
|
|
|
export bashbot_info='This is bashbot, the Telegram bot written entirely in bash.
|
2020-05-14 12:21:15 +00:00
|
|
|
|
'
|
|
|
|
|
|
2020-05-14 20:12:44 +00:00
|
|
|
|
export bashbot_help='*Available commands*:
|
2020-05-14 12:21:15 +00:00
|
|
|
|
'
|
2020-05-14 20:12:44 +00:00
|
|
|
|
export res=""
|
2020-05-14 12:21:15 +00:00
|
|
|
|
|
|
|
|
|
# Set INLINE to 1 in order to receive inline queries.
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# To enable this option in your bot must also send the /setinline command to @BotFather.
|
2020-05-14 12:21:15 +00:00
|
|
|
|
export INLINE="0"
|
|
|
|
|
|
2020-12-14 19:35:45 +00:00
|
|
|
|
# if your bot is group admin it get commands sent to other bots
|
|
|
|
|
# Set MEONLY to 1 to ignore commands sent to other bots
|
|
|
|
|
export MEONLY="0"
|
|
|
|
|
|
2020-05-14 12:21:15 +00:00
|
|
|
|
# NOTE: this is a regex, not shell globbing! you must use a valid egex,
|
2020-06-23 14:35:50 +00:00
|
|
|
|
# '.' matches any character and '.*' matches all remaining charatcers!
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# additionally you must escape special characters with '\', e.g. '\. \? \[ \*" to match them literally
|
2020-05-14 12:21:15 +00:00
|
|
|
|
# do NOT set to .* as this allow sending files from all locations!
|
2020-05-14 20:12:44 +00:00
|
|
|
|
export FILE_REGEX="${BASHBOT_ETC}/.*"
|
2020-05-14 12:21:15 +00:00
|
|
|
|
|
2020-06-11 06:33:59 +00:00
|
|
|
|
# set BASHBOT_RETRY to enable retry in case of recoverable errors, e.g. throtteling
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# problems with send_,´message etc are looged to logs/ERROR.log
|
2020-06-11 06:33:59 +00:00
|
|
|
|
unset BASHBOT_RETRY
|
|
|
|
|
#export BASHBOT_RETRY="yes"
|
2020-06-09 09:57:25 +00:00
|
|
|
|
|
2020-06-09 14:51:50 +00:00
|
|
|
|
# set value for adaptive sleeping while waitingnfor uodates in millisconds
|
|
|
|
|
# max slepp between polling updates 10s (default 5s)
|
|
|
|
|
export BASHBOT_SLEEP="10000"
|
2020-06-23 14:35:50 +00:00
|
|
|
|
# add 0.2s if no update available, up to BASHBOT_SLEEP (default 0.1s)
|
2020-06-09 14:51:50 +00:00
|
|
|
|
export BASHBOT_SLEEP_STEP="200"
|
|
|
|
|
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# if you want to use timer functions, set BASHBOT_START_TIMER to a not empty value
|
2020-06-09 14:51:50 +00:00
|
|
|
|
# default is to nit start timer
|
|
|
|
|
unset BASHBOT_START_TIMER
|
|
|
|
|
#export BASHBOT_START_TIMER="yes"
|
2020-05-14 13:02:17 +00:00
|
|
|
|
# set to "yes" and give your bot admin privilegs to remove service messaes from groups
|
|
|
|
|
export SILENCER="no"
|
|
|
|
|
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# uncomment to remove keyboards sent by your bot
|
2020-06-27 14:01:27 +00:00
|
|
|
|
# export REMOVEKEYBOARD="yes"
|
|
|
|
|
# export REMOVEKEYBOARD_PRIVATE="yes"
|
|
|
|
|
|
2020-05-14 12:21:15 +00:00
|
|
|
|
########
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# special network setup may require additional ARGS to curl
|
2020-05-14 12:21:15 +00:00
|
|
|
|
#
|
|
|
|
|
# example: run bashbot over TOR or SOCKS proxy
|
|
|
|
|
# export BASHBOT_CURL_ARGS="--socks5-hostname 127.0.0.1:9050" # TOR
|
|
|
|
|
# export BASHBOT_CURL_ARGS="--socks5-hostname 127.0.0.1" # regular SOCKS
|
|
|
|
|
|
2020-05-14 13:02:17 +00:00
|
|
|
|
if [ "$1" = "startbot" ];then
|
2020-06-11 07:23:03 +00:00
|
|
|
|
# run once after startup when the first message is received
|
2020-05-14 13:02:17 +00:00
|
|
|
|
my_startup(){
|
|
|
|
|
:
|
|
|
|
|
}
|
|
|
|
|
touch .mystartup
|
|
|
|
|
else
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# call my_startup on first message after startup
|
|
|
|
|
# things to do only once
|
2020-05-14 13:02:17 +00:00
|
|
|
|
[ -f .mystartup ] && rm -f .mystartup && _exec_if_function my_startup
|
|
|
|
|
|
|
|
|
|
#############################
|
|
|
|
|
# your own bashbot commands
|
2020-08-01 07:10:14 +00:00
|
|
|
|
# NOTE: command can have @botname attached, you must add * to case tests...
|
2020-05-14 12:21:15 +00:00
|
|
|
|
mycommands() {
|
|
|
|
|
|
2020-05-14 13:02:17 +00:00
|
|
|
|
##############
|
2020-06-11 07:23:03 +00:00
|
|
|
|
# a service Message was received
|
2020-05-14 13:02:17 +00:00
|
|
|
|
# add your own stuff here
|
2020-05-14 18:49:13 +00:00
|
|
|
|
if [ -n "${SERVICE}" ]; then
|
2020-05-14 13:02:17 +00:00
|
|
|
|
# example: delete every service message
|
|
|
|
|
if [ "${SILENCER}" = "yes" ]; then
|
|
|
|
|
delete_message "${CHAT[ID]}" "${MESSAGE[ID]}"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
2020-06-27 14:01:27 +00:00
|
|
|
|
# remove keyboard if you use keyboards
|
|
|
|
|
[ -n "${REMOVEKEYBOARD}" ] && remove_keyboard "${CHAT[ID]}" &
|
|
|
|
|
[[ -n "${REMOVEKEYBOARD_PRIVATE}" && "${CHAT[ID]}" == "${USER[ID]}" ]] && remove_keyboard "${CHAT[ID]}" &
|
|
|
|
|
|
2020-05-14 12:21:15 +00:00
|
|
|
|
case "${MESSAGE}" in
|
|
|
|
|
##################
|
|
|
|
|
# example command, replace them by your own
|
|
|
|
|
'/echo'*) # example echo command
|
|
|
|
|
send_normal_message "${CHAT[ID]}" "$MESSAGE"
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
##########
|
|
|
|
|
# command overwrite examples
|
|
|
|
|
# return 0 -> run default command afterwards
|
|
|
|
|
# return 1 -> skip possible default commands
|
|
|
|
|
'/info'*) # output date in front of regular info
|
|
|
|
|
send_normal_message "${CHAT[ID]}" "$(date)"
|
|
|
|
|
return 0
|
|
|
|
|
;;
|
|
|
|
|
'/kickme'*) # this will replace the /kickme command
|
2020-12-14 15:26:27 +00:00
|
|
|
|
send_markdownv2_mesage "${CHAT[ID]}" "This bot will *not* kick you!"
|
2020-05-14 12:21:15 +00:00
|
|
|
|
return 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
myinlines() {
|
|
|
|
|
#######################
|
|
|
|
|
# this fuinction is called only if you has set INLINE=1 !!
|
|
|
|
|
# shellcheck disable=SC2128
|
|
|
|
|
iQUERY="${iQUERY,,}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case "${iQUERY}" in
|
|
|
|
|
##################
|
|
|
|
|
# example inline command, replace it by your own
|
|
|
|
|
"image "*) # search images with yahoo
|
|
|
|
|
local search="${iQUERY#* }"
|
|
|
|
|
answer_inline_multi "${iQUERY[ID]}" "$(my_image_search "${search}")"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#####################
|
|
|
|
|
# place your processing functions here
|
|
|
|
|
|
|
|
|
|
# example inline processing function, not really useful
|
|
|
|
|
# $1 search parameter
|
|
|
|
|
my_image_search(){
|
|
|
|
|
local image result sep="" count="1"
|
|
|
|
|
result="$(wget --user-agent 'Mozilla/5.0' -qO - "https://images.search.yahoo.com/search/images?p=$1" | sed 's/</\n</g' | grep "<img src=")"
|
|
|
|
|
while read -r image; do
|
|
|
|
|
[ "$count" -gt "20" ] && break
|
|
|
|
|
image="${image#* src=\'}"; image="${image%%&pid=*}"
|
|
|
|
|
[[ "${image}" = *"src="* ]] && continue
|
2021-01-02 22:10:02 +00:00
|
|
|
|
printf "%s\n" "${sep}"; inline_query_compose "$RANDOM" "photo" "${image}"; sep=","
|
2020-05-14 12:21:15 +00:00
|
|
|
|
count=$(( count + 1 ))
|
|
|
|
|
done <<<"${result}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fi
|