mirror of
https://github.com/octoleo/telegram-bot-bash.git
synced 2024-11-22 23:45:10 +00:00
Merge pull request #91 from topkecleon/develop
Version v0.72 - Inline Query confirmed to work!
This commit is contained in:
commit
8b97444c38
10
README.html
10
README.html
@ -61,7 +61,13 @@
|
||||
<li>Seperate logic from commands</li>
|
||||
<li>Test your Bot with shellcheck</li>
|
||||
</ul></li>
|
||||
<li><a href="doc/6_reference.md">Bashbot function reference</a></li>
|
||||
<li><a href="doc/6_reference.md">Function Reference</a>
|
||||
<ul>
|
||||
<li>Sending Messages, Files, Keyboards</li>
|
||||
<li>User Access Control</li>
|
||||
<li>Inline Queries</li>
|
||||
<li>Background and Interactive Jobs</li>
|
||||
</ul></li>
|
||||
<li><a href="doc/7_develop.md">Deveoper Notess</a>
|
||||
<ul>
|
||||
<li>Setup your environment</li>
|
||||
@ -97,6 +103,6 @@
|
||||
<p><span class="citation">@Gnadelwartz</span></p>
|
||||
<h2 id="thats-it">That’s it!</h2>
|
||||
<p>If you feel that there’s something missing or if you found a bug, feel free to submit a pull request!</p>
|
||||
<h4 id="version-v0.70-0-g6243be9"><br /><span class="math display"><em>V</em><em>E</em><em>R</em><em>S</em><em>I</em><em>O</em><em>N</em></span><br /> v0.70-0-g6243be9</h4>
|
||||
<h4 id="version-v0.72-1-g67c47ac"><br /><span class="math display"><em>V</em><em>E</em><em>R</em><em>S</em><em>I</em><em>O</em><em>N</em></span><br /> v0.72-1-g67c47ac</h4>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -44,7 +44,11 @@ Bashbot [Documentation](https://github.com/topkecleon/telegram-bot-bash) and [Do
|
||||
* Customize commands.sh
|
||||
* Seperate logic from commands
|
||||
* Test your Bot with shellcheck
|
||||
* [Bashbot function reference](doc/6_reference.md)
|
||||
* [Function Reference](doc/6_reference.md)
|
||||
* Sending Messages, Files, Keyboards
|
||||
* User Access Control
|
||||
* Inline Queries
|
||||
* Background and Interactive Jobs
|
||||
* [Deveoper Notess](doc/7_develop.md)
|
||||
* Setup your environment
|
||||
* Test, Add, Push changes
|
||||
@ -94,4 +98,4 @@ Well, thats a damn good question ... may be because I'm an Unix/Linux admin from
|
||||
|
||||
If you feel that there's something missing or if you found a bug, feel free to submit a pull request!
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
@ -51,7 +51,11 @@ all](https://core.telegram.org/bots#3-how-do-i-create-a-bot)
|
||||
* Customize commands.sh
|
||||
* Seperate logic from commands
|
||||
* Test your Bot with shellcheck
|
||||
* [Bashbot function reference](doc/6_reference.md)
|
||||
* [Function Reference](doc/6_reference.md)
|
||||
* Sending Messages, Files, Keyboards
|
||||
* User Access Control
|
||||
* Inline Queries
|
||||
* Background and Interactive Jobs
|
||||
* [Deveoper Notess](doc/7_develop.md)
|
||||
* Setup your environment
|
||||
* Test, Add, Push changes
|
||||
@ -133,4 +137,4 @@ health status
|
||||
If you feel that there's something missing or if you found a bug, feel free to
|
||||
submit a pull request!
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# description: Start or stop telegram-bash-bot
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
# shellcheck disable=SC2009
|
||||
# shellcheck disable=SC2181
|
||||
|
||||
|
142
bashbot.sh
142
bashbot.sh
@ -12,7 +12,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
#
|
||||
# Exit Codes:
|
||||
# - 0 sucess (hopefully)
|
||||
@ -87,6 +87,7 @@ if [ ! -f "${BOTADMIN}" ]; then
|
||||
echo -e "${ORANGE}TO MAKE FIRST USER TYPING '/start' TO BOTADMIN${NC}"
|
||||
read -r token
|
||||
echo "${token}" > "${BOTADMIN}"
|
||||
[ "${token}" = "" ] && echo '?' > "${BOTADMIN}"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -116,18 +117,6 @@ elif [ ! -w "${COUNTFILE}" ]; then
|
||||
exit 2
|
||||
fi
|
||||
|
||||
COMMANDS="${BASHBOT_ETC:-.}/commands.sh"
|
||||
if [ "$1" != "source" ]; then
|
||||
if [ ! -f "${COMMANDS}" ] || [ ! -r "${COMMANDS}" ]; then
|
||||
${CLEAR}
|
||||
echo -e "${RED}ERROR: ${COMMANDS} does not exist or is not readable!.${NC}"
|
||||
ls -l "${COMMANDS}"
|
||||
exit 3
|
||||
fi
|
||||
# shellcheck source=./commands.sh
|
||||
source "${COMMANDS}" "source"
|
||||
fi
|
||||
|
||||
|
||||
BOTTOKEN="$(cat "${TOKENFILE}")"
|
||||
URL='https://api.telegram.org/bot'$BOTTOKEN
|
||||
@ -146,7 +135,6 @@ LOCATION_URL=$URL'/sendLocation'
|
||||
VENUE_URL=$URL'/sendVenue'
|
||||
ACTION_URL=$URL'/sendChatAction'
|
||||
FORWARD_URL=$URL'/forwardMessage'
|
||||
INLINE_QUERY=$URL'/answerInlineQuery'
|
||||
ME_URL=$URL'/getMe'
|
||||
DELETE_URL=$URL'/deleteMessage'
|
||||
GETMEMBER_URL=$URL'/getChatMember'
|
||||
@ -158,6 +146,18 @@ unset USER
|
||||
declare -A BOTSENT USER MESSAGE URLS CONTACT LOCATION CHAT FORWARD REPLYTO VENUE
|
||||
export BOTSENT USER MESSAGE URLS CONTACT LOCATION CHAT FORWARD REPLYTO VENUE
|
||||
|
||||
COMMANDS="${BASHBOT_ETC:-.}/commands.sh"
|
||||
if [ "$1" != "source" ]; then
|
||||
if [ ! -f "${COMMANDS}" ] || [ ! -r "${COMMANDS}" ]; then
|
||||
${CLEAR}
|
||||
echo -e "${RED}ERROR: ${COMMANDS} does not exist or is not readable!.${NC}"
|
||||
ls -l "${COMMANDS}"
|
||||
exit 3
|
||||
fi
|
||||
# shellcheck source=./commands.sh
|
||||
source "${COMMANDS}" "source"
|
||||
fi
|
||||
|
||||
|
||||
send_normal_message() {
|
||||
local text="${2}"
|
||||
@ -234,76 +234,6 @@ user_is_allowed() {
|
||||
grep -F -xq "${acl}" <"${BOTACL}"
|
||||
}
|
||||
|
||||
answer_inline_query() {
|
||||
local JSON
|
||||
case "${2}" in
|
||||
"article")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","title":"'$3'","message_text":"'$4'"}]'
|
||||
;;
|
||||
"photo")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","photo_url":"'$3'","thumb_url":"'$4'"}]'
|
||||
;;
|
||||
"gif")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","gif_url":"'$3'", "thumb_url":"'$4'"}]'
|
||||
;;
|
||||
"mpeg4_gif")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","mpeg4_url":"'$3'"}]'
|
||||
;;
|
||||
"video")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","video_url":"'$3'","mime_type":"'$4'","thumb_url":"'$5'","title":"'$6'"}]'
|
||||
;;
|
||||
"audio")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","audio_url":"'$3'","title":"'$4'"}]'
|
||||
;;
|
||||
"voice")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","voice_url":"'$3'","title":"'$4'"}]'
|
||||
;;
|
||||
"document")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","title":"'$3'","caption":"'$4'","document_url":"'$5'","mime_type":"'$6'"}]'
|
||||
;;
|
||||
"location")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","latitude":"'$3'","longitude":"'$4'","title":"'$5'"}]'
|
||||
;;
|
||||
"venue")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","latitude":"'$3'","longitude":"'$4'","title":"'$5'","address":"'$6'"}]'
|
||||
;;
|
||||
"contact")
|
||||
JSON='[{"type":"'$2'","id":"'$RANDOM'","phone_number":"'$3'","first_name":"'$4'"}]'
|
||||
;;
|
||||
|
||||
# Cached media stored in Telegram server
|
||||
|
||||
"cached_photo")
|
||||
JSON='[{"type":"photo","id":"'$RANDOM'","photo_file_id":"'$3'"}]'
|
||||
;;
|
||||
"cached_gif")
|
||||
JSON='[{"type":"gif","id":"'$RANDOM'","gif_file_id":"'$3'"}]'
|
||||
;;
|
||||
"cached_mpeg4_gif")
|
||||
JSON='[{"type":"mpeg4_gif","id":"'$RANDOM'","mpeg4_file_id":"'$3'"}]'
|
||||
;;
|
||||
"cached_sticker")
|
||||
JSON='[{"type":"sticker","id":"'$RANDOM'","sticker_file_id":"'$3'"}]'
|
||||
;;
|
||||
"cached_document")
|
||||
JSON='[{"type":"document","id":"'$RANDOM'","title":"'$3'","document_file_id":"'$4'"}]'
|
||||
;;
|
||||
"cached_video")
|
||||
JSON='[{"type":"video","id":"'$RANDOM'","video_file_id":"'$3'","title":"'$4'"}]'
|
||||
;;
|
||||
"cached_voice")
|
||||
JSON='[{"type":"voice","id":"'$RANDOM'","voice_file_id":"'$3'","title":"'$4'"}]'
|
||||
;;
|
||||
"cached_audio")
|
||||
JSON='[{"type":"audio","id":"'$RANDOM'","audio_file_id":"'$3'"}]'
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
sendJson "" '"inline_query_id": '"${1}"', "results": '"${JSON}" "${INLINE_QUERY}"
|
||||
}
|
||||
|
||||
|
||||
old_send_keyboard() {
|
||||
local text='"text":"'"${2}"'"'
|
||||
shift 2
|
||||
@ -350,6 +280,18 @@ sendJson(){
|
||||
[[ "${2}" = *"${ISEMPTY}"* ]] && delete_message "${1}" "${BOTSENT[ID]}"
|
||||
}
|
||||
|
||||
# convert common telegram entities to JSON
|
||||
# title caption description markup inlinekeyboard
|
||||
title2Json(){
|
||||
local title caption desc markup keyboard
|
||||
[ "$1" != "" ] && title=',"title":"'$1'"'
|
||||
[ "$2" != "" ] && caption=',"caption":"'$2'"'
|
||||
[ "$3" != "" ] && desc=',"description":"'$3'"'
|
||||
[ "$4" != "" ] && markup=',"parse_mode":"'$4'"'
|
||||
[ "$5" != "" ] && keyboard=',"reply_markup":"'$5'"'
|
||||
echo "${title}${caption}${desc}${markup}${keyboard}"
|
||||
}
|
||||
|
||||
get_file() {
|
||||
[ "$1" = "" ] && return
|
||||
local JSON='"file_id": '"${1}"
|
||||
@ -439,17 +381,20 @@ _is_function()
|
||||
[ "$(LC_ALL=C type -t "$1")" = "function" ]
|
||||
}
|
||||
process_updates() {
|
||||
MAX_PROCESS_NUMBER=$(echo "$UPDATE" | sed '/\["result",[0-9]*\]/!d' | tail -1 | sed 's/\["result",//g;s/\].*//g')
|
||||
MAX_PROCESS_NUMBER="$(sed <<< "${UPDATE}" '/\["result",[0-9]*\]/!d' | tail -1 | sed 's/\["result",//g;s/\].*//g')"
|
||||
for ((PROCESS_NUMBER=0; PROCESS_NUMBER<=MAX_PROCESS_NUMBER; PROCESS_NUMBER++)); do
|
||||
if [ "$1" = "test" ]; then
|
||||
process_client "$1"
|
||||
else
|
||||
process_client "$1" &
|
||||
fi
|
||||
done
|
||||
}
|
||||
process_client() {
|
||||
process_message "$PROCESS_NUMBER"
|
||||
iQUERY[ID]="$(JsonGetString <<<"${UPDATE}" '"result",'"${PROCESS_NUMBER}"',"inline_query","id"')"
|
||||
if [ "${iQUERY[ID]}" = "" ]; then
|
||||
[[ "$1" = *"debug"* ]] && echo "$UPDATE" >>"MESSAGE.log"
|
||||
process_message "$PROCESS_NUMBER" "$1"
|
||||
else
|
||||
[[ "$1" = *"debug"* ]] && echo "$UPDATE" >>"INLINE.log"
|
||||
[ "$INLINE" != "0" ] && _is_function process_inline && process_inline "$PROCESS_NUMBER" "$1"
|
||||
fi
|
||||
# Tmux
|
||||
copname="$ME"_"${CHAT[ID]}"
|
||||
source commands.sh
|
||||
@ -547,28 +492,29 @@ process_message() {
|
||||
|
||||
# main get updates loop, should never terminate
|
||||
start_bot() {
|
||||
local DEBUG="$1"
|
||||
local OFFSET=0
|
||||
local mysleep="100" # ms
|
||||
local addsleep="100"
|
||||
local maxsleep="$(( ${BASHBOT_SLEEP:-5000} + 100 ))"
|
||||
[[ "${DEBUG}" = *"debug" ]] && exec &>>"DEBUG.log"
|
||||
[ "${DEBUG}" != "" ] && date && echo "Start BASHBOT in Mode \"${DEBUG}\""
|
||||
[[ "${DEBUG}" = "xdebug"* ]] && set -x
|
||||
while true; do {
|
||||
|
||||
UPDATE="$(curl -s "$UPD_URL$OFFSET" | "${JSONSHFILE}")"
|
||||
UPDATE="$(curl -s "$UPD_URL$OFFSET" | "${JSONSHFILE}" -s -b -n)"
|
||||
|
||||
# Offset
|
||||
OFFSET="$(echo "$UPDATE" | grep '\["result",[0-9]*,"update_id"\]' | tail -1 | cut -f 2)"
|
||||
OFFSET="$(grep <<< "${UPDATE}" '\["result",[0-9]*,"update_id"\]' | tail -1 | cut -f 2)"
|
||||
OFFSET=$((OFFSET+1))
|
||||
|
||||
if [ "$OFFSET" != "1" ]; then
|
||||
mysleep="100"
|
||||
if [ "$1" = "test" ]; then
|
||||
process_updates "$1"
|
||||
else
|
||||
process_updates "$1" &
|
||||
fi
|
||||
process_updates "${DEBUG}" &
|
||||
fi
|
||||
# adaptive sleep in ms rounded to next lower second
|
||||
sleep "${mysleep%???}"; mysleep=$((mysleep+addsleep)); [ "${mysleep}" -gt "${maxsleep}" ] && mysleep="${maxsleep}"
|
||||
[ "${mysleep}" -gt "999" ] && sleep "${mysleep%???}"
|
||||
mysleep=$((mysleep+addsleep)); [ "${mysleep}" -gt "${maxsleep}" ] && mysleep="${maxsleep}"
|
||||
}
|
||||
done
|
||||
}
|
||||
|
81
commands.sh
81
commands.sh
@ -5,7 +5,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
#
|
||||
# shellcheck disable=SC2154
|
||||
# shellcheck disable=SC2034
|
||||
@ -19,17 +19,14 @@ export 'LANGUAGE=C.UTF-8'
|
||||
unset IFS
|
||||
# set -f # if you are paranoid use set -f to disable globbing
|
||||
|
||||
|
||||
|
||||
if [ "$1" != "source" ]; then
|
||||
# to change the default info message overwrite bashbot_info in mycommands.sh
|
||||
bashbot_info='This is bashbot, the Telegram bot written entirely in bash.
|
||||
# to change the default info message overwrite bashbot_info in mycommands.sh
|
||||
bashbot_info='This is bashbot, the Telegram bot written entirely in bash.
|
||||
It features background tasks and interactive chats, and can serve as an interface for CLI programs.
|
||||
It currently can send, recieve and forward messages, custom keyboards, photos, audio, voice, documents, locations and video files.
|
||||
'
|
||||
|
||||
# to change the default help messages overwrite in mycommands.sh
|
||||
bashbot_help='*Available commands*:
|
||||
# to change the default help messages overwrite in mycommands.sh
|
||||
bashbot_help='*Available commands*:
|
||||
*• /start*: _Start bot and get this message_.
|
||||
*• /help*: _Get this message_.
|
||||
*• /info*: _Get shorter info message about this bot_.
|
||||
@ -41,27 +38,29 @@ Written by Drew (@topkecleon), Daniil Gentili (@danogentili) and KayM(@gnadelwar
|
||||
Get the code in my [GitHub](http://github.com/topkecleon/telegram-bot-bash)
|
||||
'
|
||||
|
||||
# load modules
|
||||
if [ "${1}" != "source" ]; then
|
||||
# load modules needed for commands.sh only
|
||||
# shellcheck source=./modules/aliases.sh
|
||||
[ -r "${MODULEDIR:-.}/aliases.sh" ] && source "${MODULEDIR:-.}/aliases.sh"
|
||||
# shellcheck source=./modules/background.sh
|
||||
[ -r "${MODULEDIR:-.}/background.sh" ] && source "${MODULEDIR:-.}/background.sh"
|
||||
# ... more modules here ...
|
||||
|
||||
# mycommands is the last "module" to source in
|
||||
# shellcheck source=./commands.sh
|
||||
[ -r "${BASHBOT_ETC:-.}/mycommands.sh" ] && source "${BASHBOT_ETC:-.}/mycommands.sh"
|
||||
else
|
||||
# defaults to no inline and nonsense home dir
|
||||
INLINE="0"
|
||||
FILE_REGEX='/home/user/allowed/.*'
|
||||
|
||||
# load modules needed for bashbot.sh also
|
||||
# shellcheck source=./modules/background.sh
|
||||
[ -r "${MODULEDIR:-.}/inline.sh" ] && source "${MODULEDIR:-.}/inline.sh"
|
||||
fi
|
||||
|
||||
if [ "$1" = "source" ];then
|
||||
# Set INLINE to 1 in order to receive inline queries.
|
||||
# To enable this option in your bot, send the /setinline command to @BotFather.
|
||||
INLINE="0"
|
||||
# Set to .* to allow sending files from all locations
|
||||
FILE_REGEX='/home/user/allowed/.*'
|
||||
else
|
||||
if ! tmux ls | grep -v send | grep -q "$copname"; then
|
||||
# load mycommands
|
||||
# shellcheck source=./commands.sh
|
||||
[ -r "${BASHBOT_ETC:-.}/mycommands.sh" ] && source "${BASHBOT_ETC:-.}/mycommands.sh" "${1}"
|
||||
|
||||
|
||||
if [ "${1}" != "source" ];then
|
||||
if ! tmux ls 2>/dev/null | grep -v send | grep -q "$copname"; then
|
||||
# interactive running?
|
||||
[ ! -z "${URLS[*]}" ] && {
|
||||
curl -s "${URLS[*]}" -o "$NAME"
|
||||
@ -70,33 +69,16 @@ else
|
||||
}
|
||||
[ ! -z "${LOCATION[*]}" ] && send_location "${CHAT[ID]}" "${LOCATION[LATITUDE]}" "${LOCATION[LONGITUDE]}"
|
||||
|
||||
# Inline
|
||||
if [ "$INLINE" = 1 ]; then
|
||||
# inline query data
|
||||
iUSER[FIRST_NAME]="$(echo "$res" | sed 's/^.*\(first_name.*\)/\1/g' | cut -d '"' -f3 | tail -1)"
|
||||
iUSER[LAST_NAME]="$(echo "$res" | sed 's/^.*\(last_name.*\)/\1/g' | cut -d '"' -f3)"
|
||||
iUSER[USERNAME]="$(echo "$res" | sed 's/^.*\(username.*\)/\1/g' | cut -d '"' -f3 | tail -1)"
|
||||
iQUERY_ID="$(echo "$res" | sed 's/^.*\(inline_query.*\)/\1/g' | cut -d '"' -f5 | tail -1)"
|
||||
iQUERY_MSG="$(echo "$res" | sed 's/^.*\(inline_query.*\)/\1/g' | cut -d '"' -f5 | tail -6 | head -1)"
|
||||
|
||||
# Inline examples
|
||||
if [[ "$iQUERY_MSG" = "photo" ]]; then
|
||||
answer_inline_query "$iQUERY_ID" "photo" "http://blog.techhysahil.com/wp-content/uploads/2016/01/Bash_Scripting.jpeg" "http://blog.techhysahil.com/wp-content/uploads/2016/01/Bash_Scripting.jpeg"
|
||||
fi
|
||||
|
||||
if [[ "$iQUERY_MSG" = "sticker" ]]; then
|
||||
answer_inline_query "$iQUERY_ID" "cached_sticker" "BQADBAAD_QEAAiSFLwABWSYyiuj-g4AC"
|
||||
if [ "$INLINE" != "0" ] && [ "${iQUERY[ID]}" != "" ]; then
|
||||
if _is_function process_inline; then
|
||||
# forward iinline query to optional dispatcher
|
||||
_is_function myinlines && myinlines
|
||||
fi
|
||||
else
|
||||
|
||||
if [[ "$iQUERY_MSG" = "gif" ]]; then
|
||||
answer_inline_query "$iQUERY_ID" "cached_gif" "BQADBAADIwYAAmwsDAABlIia56QGP0YC"
|
||||
fi
|
||||
if [[ "$iQUERY_MSG" = "web" ]]; then
|
||||
answer_inline_query "$iQUERY_ID" "article" "GitHub" "http://github.com/topkecleon/telegram-bot-bash"
|
||||
fi
|
||||
fi & # note the & !
|
||||
fi
|
||||
case "$MESSAGE" in
|
||||
case "${MESSAGE}" in
|
||||
################################################
|
||||
# GLOBAL commands start here, edit messages only
|
||||
'/info'*)
|
||||
@ -105,15 +87,15 @@ else
|
||||
'/start'*)
|
||||
send_action "${CHAT[ID]}" "typing"
|
||||
_is_botadmin && _markdown_message "You are *BOTADMIN*."
|
||||
if _is_allowed "start" ; then
|
||||
_markdown_message "${bot_help}"
|
||||
if _is_botadmin || _is_allowed "start" ; then
|
||||
_markdown_message "${bashbot_help}"
|
||||
else
|
||||
_message "You are not allowed to start Bot."
|
||||
fi
|
||||
;;
|
||||
|
||||
'/help'*)
|
||||
_markdown_message "${bot_help}"
|
||||
_markdown_message "${bashbot_help}"
|
||||
;;
|
||||
'/leavechat'*) # bot leave chat if user is admin in chat
|
||||
if _is_admin ; then
|
||||
@ -131,9 +113,10 @@ else
|
||||
checkproc
|
||||
if [ "$res" -eq 0 ] ; then killproc && _message "Command canceled.";else _message "No command is currently running.";fi
|
||||
;;
|
||||
*) # forward other messages to optional dispatcher
|
||||
*) # forward messages to optional dispatcher
|
||||
_is_function startproc && if tmux ls | grep -v send | grep -q "$copname"; then inproc; fi # interactive running
|
||||
_is_function mycommands && mycommands
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# this has to run once atfer git clone
|
||||
# and every time we create new hooks
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# magic to ensure that we're always inside the root of our application,
|
||||
# no matter from which directory we'll run script
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# works together with git pre-push.sh and ADD all changed files since last push
|
||||
|
||||
#### $$VERSION$$ v0.80-dev-3-g9bcab66
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# magic to ensure that we're always inside the root of our application,
|
||||
# no matter from which directory we'll run script
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
############
|
||||
# NOTE: you MUST run install-hooks.sh again when updating this file!
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
############
|
||||
# NOTE: you MUST run install-hooks.sh again when updating this file!
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# this has to run once atfer git clone
|
||||
# and every time we create new hooks
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# magic to ensure that we're always inside the root of our application,
|
||||
# no matter from which directory we'll run script
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# this has to run once atfer git clone
|
||||
# and every time we create new hooks
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# magic to ensure that we're always inside the root of our application,
|
||||
# no matter from which directory we'll run script
|
||||
|
@ -1,3 +1,3 @@
|
||||
# list of additional files to check from shellcheck
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
bashbot.rc
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
# shellcheck disable=SC2016
|
||||
#
|
||||
# Easy Versioning in git:
|
||||
|
@ -63,5 +63,5 @@ The old format is supported for backward compatibility, but may fail for corner
|
||||
|
||||
#### [Next Create Bot](1_firstbot.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -65,5 +65,5 @@ group. This step is up to you actually.
|
||||
#### [Prev Installation](0_install.md)
|
||||
#### [Next Getting started](2_usage.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -4,7 +4,10 @@
|
||||
The Bots standard commands are in ```commands.sh``` file. You must not add your commands to 'commands.sh', instead place them in ```mycommands.sh```, there you also find examples how to process messages and send out text. See [Best practices](5_practice.md) for more information.
|
||||
|
||||
Once you're done with editing 'mycommands.sh' start the Bot with ```./bashbot.sh start```.
|
||||
If some thing doesn't work as it should, debug with ```bash -x bashbot.sh```. To stop the Bot run ```./bashbot.sh kill```
|
||||
To stop the Bot run ```./bashbot.sh kill```
|
||||
|
||||
If some thing doesn't work as it should, you can debug with ```./bashbot.sh startbot DEBUG``` where DEBUG can be 'debug', 'xdebug' or 'xdebugx'.
|
||||
See [Bashbot Development](7_develop.md) for more information.
|
||||
|
||||
To use the functions provided in this script in other scripts simply source bashbot: ```source bashbot.sh```
|
||||
|
||||
@ -37,6 +40,8 @@ To send a broadcast to all of users that ever used the bot run the following com
|
||||
## Recieve data
|
||||
Evertime a Message is recieved, you can read incoming data using the following variables:
|
||||
|
||||
### Regular Messages
|
||||
|
||||
* ```${MESSAGE}```: Current message
|
||||
* ```${MESSAGE[ID]}```: ID of current message
|
||||
* ```$CAPTION```: Captions
|
||||
@ -89,6 +94,16 @@ Evertime a Message is recieved, you can read incoming data using the following v
|
||||
* ```${VENUE[LATITUDE]}```: Latitude
|
||||
* ```${VENUE[FOURSQUARE]}```: Fouresquare ID
|
||||
|
||||
### Inline queries
|
||||
Evertime a Message is recieved, you can read incoming data using the following variables:
|
||||
|
||||
* ```${iQUERY}```: Current inline query
|
||||
* ```$iQUERY```: This array contains the ID, First name, last name, username and user id of the sender of the current inline query.
|
||||
* ```${iQUERY[ID]}```: Inline query ID
|
||||
* ```${iQUERY[USER_ID]}```: User's id
|
||||
* ```${iQUERY[FIRST_NAME]}```: User's first name
|
||||
* ```${iQUERY[LAST_NAME]}```: User's last name
|
||||
|
||||
## Usage of bashbot functions
|
||||
|
||||
#### sending messages
|
||||
@ -167,5 +182,5 @@ send_action "${CHAT[ID]}" "action"
|
||||
#### [Prev Create Bot](1_firstbot.md)
|
||||
#### [Next Advanced Usage](3_advanced.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -133,49 +133,52 @@ If you want to kill all background jobs permantly run:
|
||||
Note: Background Jobs run independent from main bot and continue running until your script exits or you stop if from your Bot. Backgound Jobs will continue running if your Bot is stopeda and must be terminated, e.g. by ```bashbot.sh killback```
|
||||
|
||||
### Inline queries
|
||||
The following commands allows users to interact with your bot via *inline queries*.
|
||||
**Inline queries** allow users to send commands to your bot from every chat without going to a private chat. An inline query is started if the user type the bots name, e.g. @myBot. Everything after @myBot is immediatly send to the bot.
|
||||
|
||||
In order to enable **inline mode**, send `/setinline` command to [@BotFather](https://telegram.me/botfather) and provide the placeholder text that the user will see in the input field after typing your bot’s name.
|
||||
Also, edit line 12 from `commands.sh` putting a "1".
|
||||
Note that you can't modify the first two parameters of the function `answer_inline_query`, only the ones after them.
|
||||
|
||||
The following commands allows you to send ansers to *inline queries*. To enable bashbot to process inline queries set ```INLINE="1"``` in 'mycommands.sh'.
|
||||
|
||||
To send messsages or links through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "article" "Title of the result" "Content of the message to be sent"
|
||||
answer_inline_query "${iQUERY[ID]}" "article" "Title of the result" "Content of the message to be sent"
|
||||
```
|
||||
To send photos in jpeg format and less than 5MB, from a website through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "photo" "A valid URL of the photo" "URL of the thumbnail"
|
||||
answer_inline_query "${iQUERY[ID]}" "photo" "A valid URL of the photo" "URL of the thumbnail"
|
||||
```
|
||||
To send standard gifs from a website (less than 1MB) through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "gif" "gif url"
|
||||
answer_inline_query "${iQUERY[ID]}" "gif" "gif url"
|
||||
```
|
||||
To send mpeg4 gifs from a website (less than 1MB) through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "mpeg4_gif" "mpeg4 gif url"
|
||||
answer_inline_query "${iQUERY[ID]}" "mpeg4_gif" "mpeg4 gif url"
|
||||
```
|
||||
To send videos from a website through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "video" "valid video url" "Select one mime type: text/html or video/mp4" "URL of the thumbnail" "Title for the result"
|
||||
answer_inline_query "${iQUERY[ID]}" "video" "valid video url" "Select one mime type: text/html or video/mp4" "URL of the thumbnail" "Title for the result"
|
||||
```
|
||||
To send photos stored in Telegram servers through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "cached_photo" "identifier for the photo"
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_photo" "identifier for the photo"
|
||||
```
|
||||
To send gifs stored in Telegram servers through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "cached_gif" "identifier for the gif"
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_gif" "identifier for the gif"
|
||||
```
|
||||
To send mpeg4 gifs stored in Telegram servers through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "cached_mpeg4_gif" "identifier for the gif"
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_mpeg4_gif" "identifier for the gif"
|
||||
```
|
||||
To send stickers through an *inline query*:
|
||||
```bash
|
||||
answer_inline_query "$iQUERY_ID" "cached_sticker" "identifier for the sticker"
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_sticker" "identifier for the sticker"
|
||||
```
|
||||
See also [answer_inline_multi, answer_inline_compose](6_reference.md#answer_inline_multi) and [mycommands.sh](../mycommands.sh) for more information.
|
||||
|
||||
#### [Prev Getting started](2_usage.md)
|
||||
#### [Next Expert Use](4_expert.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -104,5 +104,5 @@ An example crontab is provided in ```examples/bashbot.cron```.
|
||||
#### [Prev Expert Use](4_expert.md)
|
||||
#### [Next Best Practice](5_practice.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -153,5 +153,5 @@ The second warning is about an unused variable, this is true because in our exam
|
||||
#### [Prev Best Practice](5_practice.md)
|
||||
#### [Next Functions Reference](6_reference.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -10,6 +10,8 @@
|
||||
|
||||
*"action":* ```typing```, ```upload_photo```, ```record_video```, ```upload_video```, ```record_audio```, ```upload_audio```, ```upload_document```, ```find_location```.
|
||||
|
||||
*alias:* _action "action"
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
send_action "${CHAT[ID]}" "typing"
|
||||
@ -22,6 +24,8 @@ send_action "${CHAT[ID]}" "record_audio"
|
||||
|
||||
*usage:* send_normal_message "${CHAT[ID]}" "message"
|
||||
|
||||
*alias:* _normal_message "message"
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
send_normal_message "${CHAT[ID]}" "this is a text message"
|
||||
@ -34,6 +38,8 @@ Telegram supports a [reduced set of Markdown](https://core.telegram.org/bots/api
|
||||
|
||||
*usage:* send_markdown_message "${CHAT[ID]}" "markdown message"
|
||||
|
||||
*alias:* _markdown "message"
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
send_markdown_message "${CHAT[ID]}" "this is a markdown message, next word is *bold*"
|
||||
@ -46,6 +52,8 @@ Telegram supports a [reduced set of HTML](https://core.telegram.org/bots/api#htm
|
||||
|
||||
*usage:* send_html_message "${CHAT[ID]}" "html message"
|
||||
|
||||
*alias:* _html_message "message"
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
send_normal_message "${CHAT[ID]}" "this is a markdown message, next word is <b>bold</b>"
|
||||
@ -59,6 +67,8 @@ send_normal_message "${CHAT[ID]}" "<b>bold</b> <i>italic><i> <em>italic>/em> <a
|
||||
|
||||
*old call:* forward "${CHAT[ID]}" "$FROMCHAT" "${MESSAGE[ID]}"
|
||||
|
||||
*alias:* _forward "$FROMCHAT" "${MESSAGE[ID]}"
|
||||
|
||||
See also [Text formating options](https://core.telegram.org/bots/api#formatting-options)
|
||||
|
||||
----
|
||||
@ -68,20 +78,12 @@ If your Bot is admin of a Chat he can delete every message, if not he can delete
|
||||
|
||||
*usage:* delete_message "${CHAT[ID]}" "${MESSAGE[ID]}"
|
||||
|
||||
*alias:* _del_message "${MESSAGE[ID]}"
|
||||
|
||||
See also [deleteMessage limitations](https://core.telegram.org/bots/api#deletemessage)
|
||||
|
||||
----
|
||||
|
||||
##### answer_inline_query
|
||||
Inline Queries allows users to interact with your bot directly without sending extra commands.
|
||||
answer_inline_query provide the result to a users Inline Query
|
||||
|
||||
*usage:* answer_inline_query "$iQUERY_ID" "type" "type arg 1" ... "type arg n"
|
||||
|
||||
*example:* - see [Advanced Usage](3_advanced.md#Inline-queries)
|
||||
|
||||
----
|
||||
|
||||
### File, Location, Venue, Keyboard
|
||||
|
||||
|
||||
@ -119,6 +121,8 @@ Note: since version 0.6 send_keyboard was changed to use native "JSON Array" not
|
||||
|
||||
*usage:* send_keyboard "chat-id" "message" "keyboard"
|
||||
|
||||
*alias:* _keyboard "message" "keyboard"
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
send_keyboard "${CHAT[ID]}" "Say yes or no" "[ \\"yes\" , \\"no\" ]""
|
||||
@ -129,6 +133,8 @@ send_keyboard "${CHAT[ID]}" "Enter digit" "[ \\"1\\" , \\"2\\" , \\"3\\" ] , [ \
|
||||
##### remove_keyboard
|
||||
*usage:* remove_keybord "$CHAT[ID]" "message"
|
||||
|
||||
*alias:* _del_keyboard "message"
|
||||
|
||||
*See also: [Keyboard Markup](https://core.telegram.org/bots/api/#replykeyboardmarkup)*
|
||||
|
||||
----
|
||||
@ -165,7 +171,7 @@ send_inline_keyboard "${CHAT[ID]}" "" '[{"text":"b 1", url"":"u 1"}, {"text":"b
|
||||
|
||||
----
|
||||
|
||||
### Manage users
|
||||
### User Access Control
|
||||
|
||||
##### kick_chat_member
|
||||
If your Bot is a chat admin he can kick and ban a user.
|
||||
@ -199,14 +205,12 @@ fi
|
||||
|
||||
----
|
||||
|
||||
### User Access Control
|
||||
|
||||
##### user_is_botadmin
|
||||
Return true (0) if user is admin of bot, user id if botadmin is read from file './botadmin'.
|
||||
|
||||
*usage:* user_is_botadmin "${USER[ID]}"
|
||||
|
||||
*modules/alias:* _is_botadmin
|
||||
*alias:* _is_botadmin
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
@ -218,14 +222,14 @@ Return true (0) if user is creator of given chat or chat is a private chat.
|
||||
|
||||
*usage:* user_is_creator "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
*modules/alias:* _is_creator
|
||||
*alias:* _is_creator
|
||||
|
||||
##### user_is_admin
|
||||
Return true (0) if user is admin or creator of given chat.
|
||||
|
||||
*usage:* user_is_admin "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
*modules/alias:* _is_admin
|
||||
*alias:* _is_admin
|
||||
|
||||
*example:*
|
||||
```bash
|
||||
@ -251,77 +255,80 @@ fi
|
||||
|
||||
----
|
||||
|
||||
### Aliases - shortcuts for often used funtions
|
||||
You must not disable ```source modules/aliases.sh``` in 'commands.sh' to have the following functions availible.
|
||||
### Inline Queries - answer direct queries to bot
|
||||
You must include ```source modules/inline.sh``` in 'commands.sh' to have the following functions availible.
|
||||
|
||||
##### _is_botadmin
|
||||
Inline Queries allows users to interact with your bot directly without sending extra commands.
|
||||
As an answer to an inline query you can send back one or more results to the Telegram client.
|
||||
The Telegram client will then show the results to the user and let him select one.
|
||||
|
||||
*usage:* _is_botadmin
|
||||
##### answer_inline_query
|
||||
answer_inline_query is provided for backward compatibility with older versions of bashbot.
|
||||
It send back only one response to an inline query.
|
||||
|
||||
*alias for:* user_is_botadmin "${USER[ID]}"
|
||||
*usage:* answer_inline_query "$i{QUERY[ID]}" "type" "type arg 1" ... "type arg n"
|
||||
|
||||
##### _is_admin
|
||||
*example:* - see [Advanced Usage](3_advanced.md#Inline-queries)
|
||||
|
||||
*usage:* _is_admin
|
||||
|
||||
*alias for:* user_is_admin "${CHAT[ID]}" "${USER[ID]}"
|
||||
##### answer_inline_multi
|
||||
anser_inline_multi allows you to send back a list of responses. responses must be seperated by ','.
|
||||
|
||||
##### _is_allowed
|
||||
*usage:* answer_inline_multi "${iQUERY[ID]}" "res, res, ... res"
|
||||
|
||||
*usage:* _is_allowed "what"
|
||||
*example:*
|
||||
```bash
|
||||
# note the starting " and ending " !!
|
||||
answer_inline_multi "${iQUERY[ID]}" "
|
||||
$(inline_query_compose "1" "photo" "https://avatars0.githubusercontent.com/u/13046303") ,
|
||||
...
|
||||
$(inline_query_compose "n" "photo" "https://avatars1.githubusercontent.com/u/4593242")
|
||||
"
|
||||
```
|
||||
|
||||
*alias for:* user_is_allowed "${USER[ID]}" "what" "${CHAT[ID]}"
|
||||
#### inline_query_compose
|
||||
inline_query_compose composes one response element to to send back.
|
||||
|
||||
*usage:* inline_query_compose ID type args ....
|
||||
|
||||
```
|
||||
ID = unique ID for this response, 1-64 byte long
|
||||
type = type of answer, e.g. article, photo, video, location ...
|
||||
args = mandatory arguments in the order they are described in telegram documentation
|
||||
```
|
||||
|
||||
Currently the following types and arguments are implemented (optional arguments in parenthesis)
|
||||
```
|
||||
"article"|"message" title message (markup description)
|
||||
|
||||
"photo" photo_URL (thumb_URL title description caption)
|
||||
"gif" photo_URL (thumb_URL title caption)
|
||||
"mpeg4_gif" mpeg_URL (thumb_URL title caption)
|
||||
"video" video_URL mime_type thumb_URL title (caption)
|
||||
"audio" audio_URL title (caption)
|
||||
"voice" voice_URL title (caption)
|
||||
"document" title document_URL mime_type (caption description)
|
||||
|
||||
"location" latitude longitude title
|
||||
"venue" latitude longitude title (adress foursquare)
|
||||
"contact" phone first (last thumb)
|
||||
|
||||
"cached_photo" file (title description caption)
|
||||
"cached_gif" file (title caption)
|
||||
"cached_mpeg4_gif" file (title caption)
|
||||
"cached_sticker" file
|
||||
"cached_document" title file (description caption)
|
||||
"cached_video" file title (description caption)
|
||||
"cached_voice" file title (caption)
|
||||
"cached_audio" file title (caption)
|
||||
```
|
||||
see [InlineQueryResult for more information](https://core.telegram.org/bots/api#inlinequeryresult) about response types and their arguments.
|
||||
|
||||
----
|
||||
|
||||
##### _kick_user
|
||||
|
||||
*usage:* _kick_user "${USER[ID]}"
|
||||
|
||||
*alias for:* kick_chat_member "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
##### _unban
|
||||
|
||||
*usage:* _unban "${USER[ID]}"
|
||||
|
||||
*alias for:* unban_chat_member "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
##### _leave
|
||||
|
||||
*usage:* _leave
|
||||
|
||||
*alias for:* leave_chat "${CHAT[ID]}"
|
||||
|
||||
----
|
||||
|
||||
##### _message
|
||||
|
||||
*usage:* _message "message"
|
||||
|
||||
*alias for:* send_normal_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _normal_message
|
||||
|
||||
*usage:* _normal_message "message"
|
||||
|
||||
*alias for:* send_normal_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _html_message
|
||||
|
||||
*usage:* _html_message "message"
|
||||
|
||||
*alias for:* send_html_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _markdown_message
|
||||
|
||||
*usage:* _markdown_message "message"
|
||||
|
||||
*alias for:* send_markdown_message "${CHAT[ID]}" "message"
|
||||
|
||||
----
|
||||
|
||||
### Interactive and backgound jobs
|
||||
You must not disable ```source modules/background.sh``` in 'commands.sh' to have the following functions availible.
|
||||
### Background and Interactive jobs
|
||||
You must include ```source modules/background.sh``` in 'commands.sh' to have the following functions availible.
|
||||
|
||||
##### startproc
|
||||
```startproc``` starts a script, the output of the script is sent to the user or chat, user input will be sent back to the script. see [Advanced Usage](3_advanced.md#Interactive-Chats)
|
||||
@ -420,6 +427,102 @@ The main use case for send_message is to process the output of interactive chats
|
||||
|
||||
----
|
||||
|
||||
### Aliases - shortcuts for often used funtions
|
||||
You must include ```source modules/aliases.sh``` in 'commands.sh' to have the following functions availible.
|
||||
|
||||
##### _is_botadmin
|
||||
|
||||
*usage:* _is_botadmin
|
||||
|
||||
*alias for:* user_is_botadmin "${USER[ID]}"
|
||||
|
||||
##### _is_admin
|
||||
|
||||
*usage:* _is_admin
|
||||
|
||||
*alias for:* user_is_admin "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
##### _is_allowed
|
||||
|
||||
*usage:* _is_allowed "what"
|
||||
|
||||
*alias for:* user_is_allowed "${USER[ID]}" "what" "${CHAT[ID]}"
|
||||
|
||||
----
|
||||
|
||||
##### _kick_user
|
||||
|
||||
*usage:* _kick_user "${USER[ID]}"
|
||||
|
||||
*alias for:* kick_chat_member "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
##### _unban
|
||||
|
||||
*usage:* _unban "${USER[ID]}"
|
||||
|
||||
*alias for:* unban_chat_member "${CHAT[ID]}" "${USER[ID]}"
|
||||
|
||||
##### _leave
|
||||
|
||||
*usage:* _leave
|
||||
|
||||
*alias for:* leave_chat "${CHAT[ID]}"
|
||||
|
||||
----
|
||||
|
||||
##### _message
|
||||
|
||||
*usage:* _message "message"
|
||||
|
||||
*alias for:* send_normal_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _normal_message
|
||||
|
||||
*usage:* _normal_message "message"
|
||||
|
||||
*alias for:* send_normal_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _html_message
|
||||
|
||||
*usage:* _html_message "message"
|
||||
|
||||
*alias for:* send_html_message "${CHAT[ID]}" "message"
|
||||
|
||||
##### _markdown_message
|
||||
|
||||
*usage:* _markdown_message "message"
|
||||
|
||||
*alias for:* send_markdown_message "${CHAT[ID]}" "message"
|
||||
|
||||
----
|
||||
|
||||
#### _inline_button
|
||||
*usage:* _inline_button "${1}" "${2}"
|
||||
|
||||
*alias for:* send_inline_button "${CHAT[ID]}" "" "${1}" "${2}"
|
||||
|
||||
#### _inline_keyboard
|
||||
*usage:* _inline_keyboard "${1}"
|
||||
|
||||
*alias for:* _inline_keyboard "${CHAT[ID]}" "" "${1}"
|
||||
|
||||
#### _keyboard_numpad
|
||||
*usage:* _keyboard_numpad
|
||||
|
||||
*alias for:* send_keyboard "${CHAT[ID]}" "" '["1","2","3"],["4","5","6"],["7","8","9"],["-","0","."]' "yes"
|
||||
|
||||
#### _keyboard_yesno
|
||||
*usage:* _keyboard_yesno
|
||||
|
||||
*alias for:* send_keyboard '["yes","no"]'
|
||||
|
||||
#### _del_keyboard
|
||||
*usage:* _del_keyboard
|
||||
|
||||
*alias for:* remove_keyboard "${CHAT[ID]}" ""
|
||||
|
||||
|
||||
|
||||
### Helper functions
|
||||
|
||||
##### _is_function
|
||||
@ -489,5 +592,5 @@ Send Input from Telegram to waiting Interactive Chat.
|
||||
#### [Prev Best Practice](5_practice.md)
|
||||
#### [Next Notes for Developers](7_develop.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -4,6 +4,20 @@ This section is about help and best practices for new bashbot developers. The ma
|
||||
|
||||
bashbot development is done on github. If you want to provide fixes or new features [fork bashbot on githup](https://help.github.com/en/articles/fork-a-repo) and provide changes as [pull request on github](https://help.github.com/en/articles/creating-a-pull-request).
|
||||
|
||||
### Debuging Bashbot
|
||||
In normal mode of operation all bashbot output is discarded one more correct sent to TMUX console.
|
||||
To get these messages (and more) you can start bashbot in the current shell ```./bashbot.sh startbot```. Now you can see all output or erros from bashbot.
|
||||
In addition you can change the change the level of verbosity by adding a third argument after startbot.
|
||||
```
|
||||
"debug" redirects all output to "DEBUG.log", in addtion every update is logged in "MESSAGE.LOG" and "INLINE.log"
|
||||
"debugterm" same as debug but output and errors are sent to terminal
|
||||
|
||||
"xdebug" same as debug plus set bash option '-x' to log any executed command
|
||||
"xdebugterm" same as xdebug but output and errors are sent to terminal
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Setup your develop environment
|
||||
|
||||
1. install git, install [shellcheck](5_practice.md#Test-your-Bot-with-shellcheck)
|
||||
@ -117,5 +131,5 @@ fi
|
||||
#### [Prev Function Reference](6_reference.md)
|
||||
#### [Next Bashbot Environment](8_custom.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -117,5 +117,5 @@ for every poll until the maximum of BASHBOT_SLEEP ms.
|
||||
|
||||
#### [Prev Notes for Developers](7_develop.md)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
@ -55,6 +55,6 @@ convert existing bots.
|
||||
|
||||
**external-use** will contain some examples on how to send messages from external scripts to Telegram chats or users.
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -2,7 +2,7 @@
|
||||
# file: run_filename
|
||||
# background job to display content of all new files in WATCHDIR
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -2,7 +2,7 @@
|
||||
# file: run_filename
|
||||
# background job to display all new files in WATCHDIR
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -2,7 +2,7 @@
|
||||
# file. multibot.sh
|
||||
# description: run multiple telegram bots from one installation
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
if [ "${2}" = "" ] || [ "${2}" = "-h" ]; then
|
||||
echo "Usage: $0 botname command"
|
||||
|
@ -7,7 +7,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
|
||||
SHELL=/bin/sh
|
||||
|
@ -5,7 +5,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -5,7 +5,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# adjust your language setting here
|
||||
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment
|
||||
|
@ -1,7 +1,7 @@
|
||||
# file: botacl
|
||||
# a user not listed here, will return false from 'user_is_allowed'
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
# Format:
|
||||
# user:ressource:chat
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
# to show how you can customize bashbot by only editing mycommands.sh
|
||||
# NOTE: this is not tested, simply copied from original source and reworked!
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
#
|
||||
# shellcheck disable=SC2154
|
||||
# shellcheck disable=SC2034
|
||||
@ -43,7 +43,7 @@ mycommands() {
|
||||
local cmd="${arg[0]}"
|
||||
local msg=""
|
||||
|
||||
if user_is_botadmin || user_is_allowed "${USER[ID]}" "systemstatus"; then
|
||||
if user_is_botadmin "${USER[ID]}" || user_is_allowed "${USER[ID]}" "systemstatus"; then
|
||||
case "$cmd" in
|
||||
'/md'*) msg="$(cat /proc/mdstat)";;
|
||||
'/smb'*) msg="$(smbstatus)" ;;
|
||||
|
@ -5,7 +5,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
#
|
||||
# source from commands.sh to use the aliases
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# source from commands.sh if you want ro use interactive or background jobs
|
||||
|
||||
|
@ -5,6 +5,110 @@
|
||||
# This file is public domain in the USA and all free countries.
|
||||
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# source from commands.sh to use the inline functions
|
||||
|
||||
INLINE_QUERY=$URL'/answerInlineQuery'
|
||||
declare -A iQUERY
|
||||
export iQUERY
|
||||
|
||||
process_inline() {
|
||||
local num="${1}"
|
||||
iQUERY[0]="$(JsonDecode "$(JsonGetString <<<"${UPDATE}" '"result",0,"inline_query","query"')")"
|
||||
iQUERY[USER_ID]="$(JsonGetValue <<<"${UPDATE}" '"result",'"${num}"',"inline_query","from","id"')"
|
||||
iQUERY[FIRST_NAME]="$(JsonDecode "$(JsonGetString <<<"${UPDATE}" '"result",'"${num}"',"inline_query","from","first_name"')")"
|
||||
iQUERY[LAST_NAME]="$(JsonDecode "$(JsonGetString <<<"${UPDATE}" '"result",'"${num}"',"inline_query","from","last_name"')")"
|
||||
iQUERY[USERNAME]="$(JsonDecode "$(JsonGetString <<<"${UPDATE}" '"result",'"${num}"',"inline_query","from","username"')")"
|
||||
}
|
||||
|
||||
|
||||
answer_inline_query() {
|
||||
answer_inline_multi "${1}" "$(shift; inline_query_compose "$RANDOM" "$@")"
|
||||
}
|
||||
answer_inline_multi() {
|
||||
sendJson "" '"inline_query_id": '"${1}"', "results": ['"${2}"']' "${INLINE_QUERY}"
|
||||
}
|
||||
|
||||
# $1 unique ID for answer
|
||||
# $2 type of answer
|
||||
# remaining arguments are the "must have" arguments in the order as in telegram doc
|
||||
# followed by the optional arguments: https://core.telegram.org/bots/api#inlinequeryresult
|
||||
inline_query_compose(){
|
||||
local JSON="{}"
|
||||
local ID="${1}"
|
||||
local fours last
|
||||
# title2Json title caption description markup inlinekeyboard
|
||||
case "${2}" in
|
||||
# user provided media
|
||||
"article"|"message") # article ID title message (markup decription)
|
||||
JSON='{"type":"article","id":"'$ID'","input_message_content": {"message_text":"'$4'"} '$(title2Json "$3" "" "$5" "$6")'}'
|
||||
;;
|
||||
"photo") # photo ID photoURL (thumbURL title description caption)
|
||||
[ "$4" = "" ] && tumb="$3"
|
||||
JSON='{"type":"photo","id":"'$ID'","photo_url":"'$3'","thumb_url":"'$4${tumb}'"'$(title2Json "$5" "$7" "$6")'}'
|
||||
;;
|
||||
"gif") # gif ID photoURL (thumbURL title caption)
|
||||
[ "$4" = "" ] && tumb="$3"
|
||||
JSON='{"type":"gif","id":"'$ID'","gif_url":"'$3'", "thumb_url":"'$4${tumb}'"'$(title2Json "$5" "$6")'}'
|
||||
;;
|
||||
"mpeg4_gif") # mpeg4_gif ID mpegURL (thumbURL title caption)
|
||||
[ "$4" != "" ] && tumb='","thumb_url":"'$4'"'
|
||||
JSON='{"type":"mpeg4_gif","id":"'$ID'","mpeg4_url":"'$3'"'${tumb}$(title2Json "$5" "$6")'}'
|
||||
;;
|
||||
"video") # video ID videoURL mime thumbURL title (caption)
|
||||
JSON='{"type":"video","id":"'$ID'","video_url":"'$3'","mime_type":"'$4'","thumb_url":"'$5'"'$(title2Json "$6" "$7")'}'
|
||||
;;
|
||||
"audio") # audio ID audioURL title (caption)
|
||||
JSON='{"type":"audio","id":"'$ID'","audio_url":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
"voice") # voice ID voiceURL title (caption)
|
||||
JSON='{"type":"voice","id":"'$ID'","voice_url":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
"document") # document ID title documentURL mimetype (caption description)
|
||||
JSON='{"type":"document","id":"'$ID'","document_url":"'$4'","mime_type":"'$5'"'$(title2Json "$3" "$6" "$7")'}'
|
||||
;;
|
||||
"location") # location ID lat long title
|
||||
JSON='{"type":"location","id":"'$ID'","latitude":"'$3'","longitude":"'$4'","title":"'$5'"}'
|
||||
;;
|
||||
"venue") # venue ID lat long title (adress forsquare)
|
||||
[ "$6" = "" ] && addr="$5"
|
||||
[ "$7" != "" ] && fours=',"foursquare_id":"'$7'"'
|
||||
JSON='{"type":"venue","id":"'$ID'","latitude":"'$3'","longitude":"'$4'","title":"'$5'","address":"'$6${addr}'"'${fours}'}'
|
||||
;;
|
||||
"contact") # contact ID phone first (last thumb)
|
||||
[ "$5" != "" ] && last=',"last_name":"'$5'"'
|
||||
[ "$6" != "" ] && tumb='","thumb_url":"'$6'"'
|
||||
JSON='{"type":"contact","id":"'$ID'","phone_number":"'$3'","first_name":"'$4'"'${last}'"}'
|
||||
;;
|
||||
# title2Json title caption description markup inlinekeyboard
|
||||
# Cached media stored in Telegram server
|
||||
"cached_photo") # photo ID file (title description caption)
|
||||
JSON='{"type":"photo","id":"'$ID'","photo_file_id":"'$3'"'$(title2Json "$4" "$6" "$5")'}'
|
||||
;;
|
||||
"cached_gif") # gif ID file (title caption)
|
||||
JSON='{"type":"gif","id":"'$ID'","gif_file_id":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
"cached_mpeg4_gif") # mpeg ID file (title caption)
|
||||
JSON='{"type":"mpeg4_gif","id":"'$ID'","mpeg4_file_id":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
"cached_sticker") # sticker ID file
|
||||
JSON='{"type":"sticker","id":"'$ID'","sticker_file_id":"'$3'"}'
|
||||
;;
|
||||
"cached_document") # document ID title file (description caption)
|
||||
JSON='{"type":"document","id":"'$ID'","document_file_id":"'$4'"'$(title2Json "$3" "$6" "$5")'}'
|
||||
;;
|
||||
"cached_video") # video ID file title (description caption)
|
||||
JSON='{"type":"video","id":"'$ID'","video_file_id":"'$3'"'$(title2Json "$4" "$6" "$5")'}'
|
||||
;;
|
||||
"cached_voice") # voice ID file title (caption)
|
||||
JSON='{"type":"voice","id":"'$ID'","voice_file_id":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
"cached_audio") # audio ID file title (caption)
|
||||
JSON='{"type":"audio","id":"'$ID'","audio_file_id":"'$3'"'$(title2Json "$4" "$5")'}'
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${JSON}"
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
# files: mycommands.sh.dist
|
||||
# copy to mycommands.sh and add all your commands and functions here ...
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
#
|
||||
# shellcheck disable=SC2154
|
||||
# shellcheck disable=SC2034
|
||||
@ -14,10 +14,17 @@
|
||||
# bashbot_help='*Available commands*:
|
||||
#'
|
||||
|
||||
if [ "$1" = "source" ];then
|
||||
# Set INLINE to 1 in order to receive inline queries.
|
||||
# To enable this option in your bot, send the /setinline command to @BotFather.
|
||||
INLINE="0"
|
||||
# Set to .* to allow sending files from all locations
|
||||
FILE_REGEX='/home/user/allowed/.*'
|
||||
|
||||
# your additional bahsbot commands
|
||||
# NOTE: command can have @botname attached, you must add * in case tests...
|
||||
mycommands() {
|
||||
else
|
||||
# your additional bahsbot commands
|
||||
# NOTE: command can have @botname attached, you must add * in case tests...
|
||||
mycommands() {
|
||||
|
||||
case "$MESSAGE" in
|
||||
'/echo'*) # example echo command
|
||||
@ -51,6 +58,70 @@ mycommands() {
|
||||
;;
|
||||
|
||||
esac
|
||||
}
|
||||
}
|
||||
|
||||
# place your processing functions here
|
||||
myinlines() {
|
||||
#######################
|
||||
# Inline query examples, do not use them in production (exept image search ;-)
|
||||
# shellcheck disable=SC2128
|
||||
case "${iQUERY}" in
|
||||
"image "*) # search images with yahoo
|
||||
local search="${iQUERY#* }"
|
||||
answer_inline_multi "${iQUERY[ID]}" "$(my_image_search "${search}")"
|
||||
;;
|
||||
|
||||
"0"*) # a single message with title
|
||||
answer_inline_query "${iQUERY[ID]}" "message" "Title of the result" "Content of the message to be sent"
|
||||
;;
|
||||
"1"*) # a single photo
|
||||
answer_inline_query "${iQUERY[ID]}" "photo" "https://avatars.githubusercontent.com/u/13046303" "https://avatars.githubusercontent.com/u/13046303"
|
||||
;;
|
||||
"2"*) # two photos
|
||||
answer_inline_multi "${iQUERY[ID]}" "
|
||||
$(inline_query_compose "$RANDOM" "photo" "https://avatars.githubusercontent.com/u/13046303"),
|
||||
$(inline_query_compose "$RANDOM" "photo" "https://avatars.githubusercontent.com/u/4593242")
|
||||
"
|
||||
;;
|
||||
"3"*) # three photos
|
||||
answer_inline_multi "${iQUERY[ID]}" "
|
||||
$(inline_query_compose "$RANDOM" "photo" "https://avatars.githubusercontent.com/u/13046303"),
|
||||
$(inline_query_compose "$RANDOM" "photo" "https://avatars.githubusercontent.com/u/4593242")
|
||||
$(inline_query_compose "$RANDOM" "photo" "https://avatars.githubusercontent.com/u/102707")
|
||||
"
|
||||
;;
|
||||
|
||||
"4") # four photo from array
|
||||
local sep=""
|
||||
local avatar=("https://avatars.githubusercontent.com/u/13046303" "https://avatars.githubusercontent.com/u/4593242" "https://avatars.githubusercontent.com/u/102707" "https://avatars.githubusercontent.com/u/6460407")
|
||||
answer_inline_multi "${iQUERY[ID]}" "
|
||||
$(for photo in ${avatar[*]} ; do
|
||||
echo "${sep}"; inline_query_compose "$RANDOM" "photo" "${photo}" "${photo}"; sep=","
|
||||
done)
|
||||
"
|
||||
;;
|
||||
|
||||
"sticker") # example chaecd telegram sticker
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_sticker" "BQADBAAD_QEAAiSFLwABWSYyiuj-g4AC"
|
||||
;;
|
||||
"gif") # exmaple chaehed gif
|
||||
answer_inline_query "${iQUERY[ID]}" "cached_gif" "BQADBAADIwYAAmwsDAABlIia56QGP0YC"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# place your processing functions here
|
||||
|
||||
# $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 "9" ] && break
|
||||
image="${image#* src=\'}"; image="${image%%&pid=*}"
|
||||
[[ "${image}" = *"src="* ]] && continue
|
||||
echo "${sep}"; inline_query_compose "$RANDOM" "photo" "${image}"; sep=","
|
||||
count=$(( count + 1 ))
|
||||
done <<<"${result}"
|
||||
}
|
||||
|
||||
fi
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# ADD a new test skeleton to test dir, but does not activate test
|
||||
#
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# magic to ensure that we're always inside the root of our application,
|
||||
# no matter from which directory we'll run script
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# common variables
|
||||
export TESTME DIRME TESTDIR LOGFILE REFDIR TESTNAME
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
../dev/hooks/pre-commit.sh
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
# file: b-example-test.sh
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
42
test/d-process_inline-test.sh
Executable file
42
test/d-process_inline-test.sh
Executable file
@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
source "./ALL-tests.inc.sh"
|
||||
|
||||
set -e
|
||||
|
||||
# source bashbot.sh functionw
|
||||
cd "${TESTDIR}" || exit 1
|
||||
# shellcheck source=./bashbot.sh
|
||||
source "${TESTDIR}/bashbot.sh" source
|
||||
# shellcheck source=./bashbot.sh
|
||||
source "${TESTDIR}/modules/inline.sh" source
|
||||
|
||||
# overwrite get_file for test
|
||||
get_file() {
|
||||
echo "$1"
|
||||
}
|
||||
|
||||
# get telegram input from file
|
||||
export UPDATE
|
||||
UPDATE="$(cat "${INPUTFILE}")"
|
||||
|
||||
# run process_message with and without phyton
|
||||
echo "Check process_inline ..."
|
||||
for i in 1 2
|
||||
do
|
||||
[ "${i}" = "1" ] && ! which python >/dev/null 2>&1 && continue
|
||||
[ "${i}" = "1" ] && echo " ... with JsonDecode Phyton" && unset BASHBOT_DECODE
|
||||
[ "${i}" = "2" ] && echo " ... with JsonDecode Bash" && export BASHBOT_DECODE="yes"
|
||||
set -x
|
||||
{ process_inline "0"; set +x; } >>"${LOGFILE}" 2>&1;
|
||||
|
||||
# output processed input
|
||||
print_array "iQUERY" >"${OUTPUTFILE}"
|
||||
diff -c "${REFFILE}" "${OUTPUTFILE}" || exit 1
|
||||
echo "${SUCCESS}"
|
||||
done
|
||||
|
||||
cd "${DIRME}" || exit 1
|
11
test/d-process_inline-test/d-process_inline-test.input
Normal file
11
test/d-process_inline-test/d-process_inline-test.input
Normal file
@ -0,0 +1,11 @@
|
||||
["ok"] true
|
||||
["result",0,"update_id"]i 1234567890
|
||||
["result",0,"inline_query","id"] "987654321"
|
||||
["result",0,"inline_query","query"] "message"
|
||||
["result",0,"inline_query","from","id"] 123456789
|
||||
["result",0,"inline_query","from","is_bot"] false
|
||||
["result",0,"inline_query","from","first_name"] "Kay"
|
||||
["result",0,"inline_query","from","last_name"] "M"
|
||||
["result",0,"inline_query","from","username"] "Gnadelwartz"
|
||||
["result",0,"inline_query","from","language_code"] "de"
|
||||
|
5
test/d-process_inline-test/d-process_inline-test.result
Normal file
5
test/d-process_inline-test/d-process_inline-test.result
Normal file
@ -0,0 +1,5 @@
|
||||
iQUERY: 0 message
|
||||
iQUERY: FIRST_NAME Kay
|
||||
iQUERY: LAST_NAME M
|
||||
iQUERY: USER_ID 123456789
|
||||
iQUERY: USERNAME Gnadelwartz
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#### $$VERSION$$ v0.70-0-g6243be9
|
||||
#### $$VERSION$$ v0.72-1-g67c47ac
|
||||
|
||||
# include common functions and definitions
|
||||
# shellcheck source=test/ALL-tests.inc.sh
|
||||
|
Loading…
Reference in New Issue
Block a user