Programming language: Go
License: MIT License
Tags: Bot     Telegram     Utility     Text Processing    
Latest version: v1.8

shell2telegram alternatives and similar packages

Based on the "Utility" category.
Alternatively, view shell2telegram alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of shell2telegram or a related project?

Add another 'Utility' Package



Build Status Coverage Status Docker Pulls Homebrew formula exists Snap Status Report Card

Create Telegram bot from command-line



brew tap msoap/tools
brew install shell2telegram
# update:
brew upgrade shell2telegram

Or download binaries from: releases (OS X/Linux/Windows/RaspberryPi)

Or build from source:

# install Go
# set $GOPATH if needed
go get -u github.com/msoap/shell2telegram
ln -s $GOPATH/bin/shell2telegram ~/bin/shell2telegram # or add $GOPATH/bin to $PATH

Or build image and run with Docker. Example of test-bot.Dockerfile for bot who say current date:

FROM msoap/shell2telegram
# may be install some alpine packages:
# RUN apk add --no-cache ...
ENV TB_TOKEN=*******
CMD ["/date", "date"]

And build and run:

docker build -f test-bot.Dockerfile -t test-bot .
docker run --rm test-bot
# or run with set token from command line
docker run -e TB_TOKEN=******* --rm test-bot

Mirror docker repository: quay.io/msoap/shell2telegram:latest

Using snap (Ubuntu or any Linux distribution with snap):

# install stable version:
sudo snap install shell2telegram

# install the latest version:
sudo snap install --edge shell2telegram

# update
sudo snap refresh shell2telegram


Get token from BotFather bot, and set TB_TOKEN var in shell

export TB_TOKEN=*******
shell2telegram [options] /chat_command 'shell command' /chat_command2 'shell command2'
    -allow-users=<NAMES> : telegram users who are allowed to chat with the bot ("user1,user2")
    -root-users=<NAMES>  : telegram users, who confirms new users in their private chat ("user1,user2")
    -allow-all           : allow all users (DANGEROUS!)
    -add-exit            : adding "/shell2telegram exit" command for terminate bot (for roots only)
    -log-commands        : logging all commands
    -tb-token=<TOKEN>    : setting bot token (or set TB_TOKEN variable)
    -timeout=N           : setting timeout for bot (default 60 sec)
    -description=<TITLE> : setting description of bot
    -bind-addr=<ADDRESS> : address to listen incoming webhook requests
    -webhook=<URL>       : url for registering a webhook
    -persistent-users    : load/save users from file (default ~/.config/shell2telegram.json)
    -users-db=<FILENAME> : file for store users
    -cache=N             : caching command out for N seconds
    -one-thread          : run each shell command in one thread
    -public              : bot is public (don't add /auth* commands)
    -sh-timeout=N        : set timeout for execute shell command (in seconds)
    -shell="shell"       : shell for execute command, "" - without shell (default "sh")

If not define -allow-users/-root-users options - authorize users via secret code from console or via chat with exists root users.

All text after /chat_command will be sent to STDIN of shell command.

Special chat commands

for private chats only:

  • /:plain_text - get user message without any /command.


  • /:image - for get image from user. Example: /:image 'cat > file.jpg; echo ok'
  • /:file - for get file from user
  • /:location - for get geo-location from user

Possible long-running shell processes (for example alarm/timer bot).

Autodetect images (png/jpg/gif/bmp) out from shell command, for example: /get_image 'cat file.png'

Setting environment variables for shell commands:

  • S2T_LOGIN - telegram @login (may be empty)
  • S2T_USERID - telegram user ID
  • S2T_USERNAME - telegram user name
  • S2T_CHATID - chat ID

Modificators for bot commands

  • :desc - setting the description of command, /cmd:desc="Command name" 'shell cmd'
  • :vars - to create environment variables instead of text output to STDIN, /cmd:vars=VAR1,VAR2 'echo $VAR1 / $VAR2'
  • :md - to send message as markdown text, /cmd:md 'echo "*bold* and _italic_"'


  • /cmd:cron=3600 — periodic exec command, /cmd:on args - on, /cmd:off - off

Predefined bot commands

  • /help - list available commands
  • /auth - begin authorize new user
  • /auth <CODE> - authorize with code from console or from exists root user
  • /authroot - same for new root user
  • /authroot <CODE> - same for new root user

for root users only:

  • /shell2telegram stat - show users statistics
  • /shell2telegram search <query> - search users by name/id
  • /shell2telegram ban <user_id|@username> - ban user
  • /shell2telegram exit - terminate bot (for run with -add-exit)
  • /shell2telegram desc <description> - set bot description
  • /shell2telegram rm </command> - delete command
  • /shell2telegram broadcast_to_root <message> - send message to all root users in private chat
  • /shell2telegram message_to_user <user_id|@username> <message> - send message to user in private chat
  • /shell2telegram version - show version


# system information
shell2telegram /top:desc="System information" 'top -l 1 | head -10' /date 'date' /ps 'ps aux -m | head -20'

# sort any input
shell2telegram /:plain_text sort

# alarm bot:
# /alarm time_in_seconds message
shell2telegram /alarm:vars=SLEEP,MSG 'sleep $SLEEP; echo Hello $S2T_USERNAME; echo Alarm: $MSG'

# sound volume control via telegram (Mac OS)
shell2telegram /get  'osascript -e "output volume of (get volume settings)"' \
               /up   'osascript -e "set volume output volume (($(osascript -e "output volume of (get volume settings)")+10))"' \
               /down 'osascript -e "set volume output volume (($(osascript -e "output volume of (get volume settings)")-10))"'

# using with webhook instead of poll
shell2telegram -bind-addr= -webhook=https://bot.example.com/path/to/bot \
               /date /date