telegram-bot-bash/commands.sh

159 lines
5.6 KiB
Bash
Raw Normal View History

#!/bin/bash
# file: commands.sh
# _____ _______ _ _ _
# (____ \ _ (_______) | (_)_ | |
# _ \ \ ___ ____ ___ | |_ _____ _ | |_| |_ | |
# | | | / _ \ | _ \ / _ \| _) | ___) / || | | _)|_|
# | |__/ / |_| | | | | | |_| | |__ | |____( (_| | | |__ _
# |_____/ \___/ |_| |_|\___/ \___) |_______)____|_|\___)_|
#
2021-02-02 19:33:22 +00:00
# this file *MUST* not edited! place your config in the file "mycommands.conf"
# and commands in "mycommands.sh", a clean version is provided as "mycommands.sh.clean"
#
# This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
#
2022-06-27 18:18:58 +00:00
#### $$VERSION$$ v1.52-1-g0dae2db
2019-04-01 16:24:05 +00:00
#
# bashbot locale defaults to c.UTF-8, adjust locale in mycommands.sh if needed
2019-03-30 14:11:33 +00:00
export 'LC_ALL=C.UTF-8'
export 'LANG=C.UTF-8'
export 'LANGUAGE=C.UTF-8'
unset IFS
# set -f # if you are paranoid use set -f to disable globbing
2020-08-01 09:37:32 +00:00
#-----------------------------
# this file *MUST* not edited!
# copy "mycommands.sh.dist" to "mycommands.sh" and change the strings there
2019-05-02 13:14:18 +00:00
bashbot_info='This is bashbot, the Telegram bot written entirely in bash.
2019-04-11 11:53:01 +00:00
It features background tasks and interactive chats, and can serve as an interface for CLI programs.
It currently can send, receive and forward messages, custom keyboards, photos, audio, voice, documents, locations and video files.
2019-04-11 11:53:01 +00:00
'
2020-08-01 09:37:32 +00:00
#-----------------------------
# this file *MUST* not edited!
# copy "mycommands.sh.dist" to "mycommands.sh" and change the strings there
2020-12-14 14:43:50 +00:00
bashbot_help='
2020-06-11 06:33:59 +00:00
*Available commands*:
2019-04-11 11:53:01 +00:00
*• /start*: _Start bot and get this message_.
2019-04-27 11:36:32 +00:00
*• /help*: _Get this message_.
2019-04-11 11:53:01 +00:00
*• /info*: _Get shorter info message about this bot_.
2020-12-14 14:43:50 +00:00
*• /kickme*: _You will be autokicked from the group_.
2019-04-11 11:53:01 +00:00
*• /leavechat*: _The bot will leave the group with this command _.
2021-02-07 19:44:58 +00:00
Additional commands from mycommands.dist ...
*• /game*: _throw a die_.
*• /question*: _Start interactive chat_.
*• /cancel*: _Cancel any currently running interactive chat_.
2021-06-03 12:21:40 +00:00
*• /run_notify*: _Start background job_.
*• /stop_notify*: _Stop notify background job_.
2020-12-14 14:43:50 +00:00
Written by Drew (@topkecleon) and KayM (@gnadelwartz).
Get the code on [GitHub](http://github.com/topkecleon/telegram-bot-bash)
2019-04-11 11:53:01 +00:00
'
2020-08-01 09:37:32 +00:00
# load modules on startup and always on on debug
if [ -n "$1" ]; then
2020-05-20 14:35:22 +00:00
# load all readable modules
for modules in "${MODULEDIR:-.}"/*.sh ; do
if [[ "$1" == *"debug"* ]] || ! _is_function "$(basename "${modules}")"; then
# shellcheck source=./modules/aliases.sh
[ -r "${modules}" ] && source "${modules}" "$1"
2020-05-20 14:35:22 +00:00
fi
done
fi
2020-08-01 09:37:32 +00:00
#----------------------------
# this file *MUST* not edited!
# copy "mycommands.sh.dist" to "mycommands.sh" and change the values there
# defaults to no inline, all commands and nonsense home dir
export INLINE="0"
export CALLBACK="0"
export MEONLY="0"
2020-05-20 14:35:22 +00:00
export FILE_REGEX="${BASHBOT_ETC}/.*"
2019-05-02 13:14:18 +00:00
# load mycommands
# shellcheck source=./commands.sh
[ -r "${BASHBOT_ETC:-.}/mycommands.sh" ] && source "${BASHBOT_ETC:-.}/mycommands.sh" "$1"
2019-04-12 12:04:57 +00:00
if [ -z "$1" ] || [[ "$1" == *"debug"* ]];then
#################
# detect inline and callback query
2021-01-25 15:49:15 +00:00
if [ -n "${iQUERY[ID]}" ]; then
# forward inline query to optional dispatcher
[ "${INLINE:-0}" != "0" ] && _exec_if_function myinlines
2021-01-25 15:49:15 +00:00
elif [ -n "${iBUTTON[ID]}" ]; then
# forward inline query to optional dispatcher
[ "${CALLBACK:-0}" != "0" ] && _exec_if_function mycallbacks
#################
# regular command
2019-05-02 13:14:18 +00:00
else
###################
# if is bashbot is group admin it get commands sent to other bots
# set MEONLY=1 to ignore commands for other bots
2021-02-26 05:45:50 +00:00
if [[ "${MEONLY}" != "0" && "${MESSAGE}" == "/"*"@"* ]]; then
# here we have a command with @xyz_bot added, check if it's our bot
2021-02-26 05:45:50 +00:00
[ "${MESSAGE%%@*}" != "${MESSAGE%%@${ME}}" ] && return
fi
2019-05-25 11:31:36 +00:00
###################
2019-05-26 19:25:01 +00:00
# user defined commands must placed in mycommands
2020-11-29 14:34:00 +00:00
! _is_function mycommands || mycommands
2019-05-25 11:31:36 +00:00
# run commands if true (0) is returned or if mycommands dose not exist
# shellcheck disable=SC2181
if [ "$?" = "0" ]; then
case "${MESSAGE}" in
################################################
# this file *MUST* not edited!
# copy "mycommands.sh.dist" to "mycommands.sh" and change the values and add your commands there
#
2019-04-27 11:36:32 +00:00
# GLOBAL commands start here, edit messages only
'/info'*)
2019-11-27 17:47:44 +00:00
send_markdown_message "${CHAT[ID]}" "${bashbot_info}"
;;
'/start'*)
send_action "${CHAT[ID]}" "typing"
2020-12-28 14:11:28 +00:00
MYCOMMANDS="*Note*: MISSING mycommands.sh: copy _mycommands.dist_ or _mycommands.clean_."
2020-12-14 14:43:50 +00:00
[ -r "${BASHBOT_ETC:-.}/mycommands.sh" ] && MYCOMMANDS="Place your commands and messages in _mycommands.sh_"
user_is_botadmin "${USER[ID]}" &&\
send_markdownv2_message "${CHAT[ID]}" "You are *BOTADMIN*.\n${MYCOMMANDS}"
if user_is_admin "${CHAT[ID]}" "${USER[ID]}" || user_is_allowed "${USER[ID]}" "start" ; then
send_markdown_message "${CHAT[ID]}" "${bashbot_help}"
2019-04-12 11:14:33 +00:00
else
send_normal_message "${CHAT[ID]}" "You are not allowed to start Bot."
2019-04-12 12:04:57 +00:00
fi
;;
'/help'*)
send_markdown_message "${CHAT[ID]}" "${bashbot_help}"
2019-04-27 11:36:32 +00:00
;;
2021-01-20 18:50:19 +00:00
'/leavechat'*) # bot leave chat if user is admin in chat
if user_is_admin "${CHAT[ID]}" "${USER[ID]}" || user_is_allowed "${USER[ID]}" "leave" ; then
send_markdown_message "${CHAT[ID]}" "*LEAVING CHAT...*"
leave_chat "${CHAT[ID]}"
fi
;;
'/kickme'*)
kick_chat_member "${CHAT[ID]}" "${USER[ID]}"
unban_chat_member "${CHAT[ID]}" "${USER[ID]}"
;;
2020-06-23 14:35:50 +00:00
'/'*) # discard all unknown commands
: ;;
*) # forward message to interactive chats
2019-05-26 19:25:01 +00:00
_exec_if_function send_interactive "${CHAT[ID]}" "${MESSAGE}"
;;
2019-05-25 11:31:36 +00:00
esac
fi
fi
fi