diff --git a/bashbot.rc b/bashbot.rc index 693880e..c27fb1b 100755 --- a/bashbot.rc +++ b/bashbot.rc @@ -1,12 +1,11 @@ #!/bin/sh # description: Start or stop telegram-bash-bot # -# example service script to run bashbot in background -# may or may not work on your system +# example service script to run bashbot in background as specified user # -# tested on: ubuntu, opensuse +# tested on: ubuntu, opensuse, debian # -#### $$VERSION$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 # shellcheck disable=SC2009 # shellcheck disable=SC2181 diff --git a/bashbot.sh b/bashbot.sh index dd7ea9c..d17b5b9 100755 --- a/bashbot.sh +++ b/bashbot.sh @@ -11,7 +11,7 @@ # This file is public domain in the USA and all free countries. # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # -#### $$VERSION$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 # # Exit Codes: # - 0 success (hopefully) @@ -607,7 +607,15 @@ title2Json(){ # get bot name getBotName() { - getJson "$ME_URL" | "${JSONSHFILE}" -b -n 2>/dev/null | JsonGetString '"result","username"' + local response + declare -A BOTARRAY + response="$(getJson "$ME_URL" | "${JSONSHFILE}" -b -n 2>/dev/null)" + Json2Array 'BOTARRAY' <<<"${response}" + [[ -z "${response}" || -z "${BOTARRAY["result","username"]}" ]] && return 1 + # save botname and id + setConfigKey "botname" "${BOTARRAY["result","username"]}" + setConfigKey "botid" "${BOTARRAY["result","id"]}" + echo "${BOTARRAY["result","username"]}" } # pure bash implementation, done by KayM (@gnadelwartz) diff --git a/dev/hooks/pre-commit.sh b/dev/hooks/pre-commit.sh index e1bf28f..fb8d8a9 100755 --- a/dev/hooks/pre-commit.sh +++ b/dev/hooks/pre-commit.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -#### $$VERSION$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 ############ # NOTE: you MUST run install-hooks.sh again when updating this file! @@ -30,7 +30,7 @@ fi # run shellcheck before commit set +f -FILES="$(find ./* -name '*.sh' | grep -v 'DIST\/' | grep -v 'STANDALONE\/')" +FILES="$(find ./* -name '*.sh' | grep -v -e 'DIST\/' -e 'STANDALONE\/' -e 'JSON.sh')" set -f FILES="${FILES} $(sed '/^#/d' <"dev/shellcheck.files")" if [ "$FILES" != "" ]; then diff --git a/doc/6_reference.md b/doc/6_reference.md index 3947dcc..1717c76 100644 --- a/doc/6_reference.md +++ b/doc/6_reference.md @@ -244,6 +244,19 @@ fi The following functions are bashbot only and not part of the Telegram API. +##### bot_is_admin +Return true (0) if bot is admin or creator of given chat. + +*usage:* bot_is_admin "${CHAT[ID]}" + + +*example:* +```bash +if bot_is_admin "${CHAT[ID]}"; then + send_markdown_message "${CHAT[ID]}" "*I'm admin...*" +fi +``` + ##### user_is_botadmin Return true (0) if user is admin of bot, user id if botadmin is read from file './botadmin'. @@ -253,7 +266,7 @@ Return true (0) if user is admin of bot, user id if botadmin is read from file ' *example:* ```bash - _is_botadmin && send_markdown_message "${CHAT[ID]}" "You are *BOTADMIN*." +user_is_botadmin "${CHAT[ID]}" && send_markdown_message "${CHAT[ID]}" "You are *BOTADMIN*." ``` ##### user_is_creator @@ -272,7 +285,7 @@ Return true (0) if user is admin or creator of given chat. *example:* ```bash -if _is_admin ; then +if user_is_admin "${CHAT[ID]}" ; then send_markdown_message "${CHAT[ID]}" "*LEAVING CHAT...*" leave_chat "${CHAT[ID]}" fi @@ -1049,5 +1062,5 @@ The name of your bot is available as bash variable "$ME", there is no need to ca #### [Prev Best Practice](5_practice.md) #### [Next Notes for Developers](7_develop.md) -#### $$VERSION$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 diff --git a/modules/chatMember.sh b/modules/chatMember.sh index 85a7e4c..06a6306 100644 --- a/modules/chatMember.sh +++ b/modules/chatMember.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$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 # will be automatically sourced from bashbot @@ -18,6 +18,7 @@ UNBAN_URL=$URL'/unbanChatMember' GETMEMBER_URL=$URL'/getChatMember' # usage: status="$(get_chat_member_status "chat" "user")" +# $1 chat # $2 user get_chat_member_status() { sendJson "$1" '"user_id":'"$2"'' "$GETMEMBER_URL" # shellcheck disable=SC2154 @@ -42,6 +43,13 @@ user_is_creator() { return 1 } +# $1 chat +bot_is_admin() { + [ "${2:-+}" ] && return 0 + user_is_admin "$2" "$(getConfigKey "botid")" +} + +# $1 chat # $2 user user_is_admin() { [ "${1:--}" == "${2:-+}" ] && return 0 user_is_botadmin "$2" && return 0 @@ -50,6 +58,7 @@ user_is_admin() { return 1 } +# $1 user user_is_botadmin() { local admin; admin="$(getConfigKey "botadmin")"; [ -z "${admin}" ] && return 1 [[ "${admin}" == "${1}" || "${admin}" == "${2}" ]] && return 0 @@ -58,6 +67,7 @@ user_is_botadmin() { return 1 } +# $1 user # $2 key # $3 chat user_is_allowed() { [ -z "$1" ] && return 1 # user can do everything diff --git a/mycommands.sh b/mycommands.sh index 7112314..236e717 100644 --- a/mycommands.sh +++ b/mycommands.sh @@ -9,7 +9,7 @@ # #### mycommands.clean # # shellcheck disable=SC1117 -#### $$VERSION$$ v1.2-0-gc50499c +#### $$VERSION$$ v1.2-1-gd30a700 # # uncomment the following lines to overwrite info and help messages @@ -149,7 +149,7 @@ else MESSAGE="${MESSAGE#/* }" ;; '/_new_chat_member'*) - if [[ -n "${WELCOME_NEWMEMBER}" && "${NEWMEMBER[ISBOT]}" != "true" ]]; then + if [[ -n "${WELCOME_NEWMEMBER}" && "${NEWMEMBER[ISBOT]}" != "true" ]] && bot_is_admin "${CHAT[ID]}"; then send_normal_message "${CHAT[ID]}"\ "${WELCOME_MSG} ${NEWMEMBER[FIRST_NAME]} ${NEWMEMBER[LAST_NAME]} (@${NEWMEMBER[USERNAME]})" MYSENTID="${BOTSENT[ID]}"