mirror of
https://github.com/octoleo/telegram-bot-bash.git
synced 2024-10-31 23:52:30 +00:00
377 lines
15 KiB
Markdown
377 lines
15 KiB
Markdown
#### [Home](../README.md)
|
|
## Getting Started
|
|
|
|
The Bots default commands are in `commands.sh`. Do not edit this file! Instead copy `mycommands.sh.clean` to `mycommands.sh` and place you commands there.
|
|
Have a look at `mycommands.sh.dist` for examples on how to write commands or overwrite existing ones. See [Best practices](5_practice.md) for more information.
|
|
|
|
Once you're done with editing run the Bot with `./bashbot.sh start`. To stop running the Bot use `./bashbot.sh stop`
|
|
|
|
If something doesn't work as expected, 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 source`. see [Expert Use](8_expert.md#Expert-use)
|
|
|
|
Have FUN!
|
|
|
|
----
|
|
|
|
### Files
|
|
```
|
|
.
|
|
├── mycommands.sh # THIS is your bot, place logic and commands here!
|
|
├── mycommands.conf # place your bot config and bot messages here!
|
|
│
|
|
├── mycommands.conf.dist # copy to "mycommands.conf" if not exist
|
|
├── mycommands.sh.clean # copy to "mycommands.sh" to start developing a new bot
|
|
├── mycommands.sh.dist # example bot, also used for testing bashbot internally
|
|
│
|
|
├── count.jssh # count bashbot usage in jssh key-value store
|
|
├── blocked.jssh # list of blocked USER[ID] in jssh key-value store
|
|
│
|
|
├── bashbot.sh # main bashbot script - DO NOT EDIT!
|
|
├── commands.sh # command dispatcher - DO NOT EDIT!
|
|
├── JSON.sh # bashbots JSON parser, see https://github.com/dominictarr/JSON.sh
|
|
│
|
|
├── bin # ready to use scripts, use `scriptname --help` for help
|
|
│ ├── bashbot_stats.sh # does what it says ...
|
|
│ ├── send_broadcast.sh # send message to all known chats
|
|
│ ├── send_message.sh # send message to given chat
|
|
│ ├── edit_message.sh # replace given message id in given chat
|
|
│ ├── send_file.sh # send file to given chat
|
|
│ ├── delete_message.sh # delete given message id in given chat
|
|
│ ├── send_buttons.sh # send message with attached button
|
|
│ ├── edit_buttons.sh # attach/edit message buttons
|
|
│ ├── kickban_user.sh # kick/unban user from given chat
|
|
│ ├── promote_user.sh # promote/dente user rights in given chat
|
|
│ │
|
|
│ └── bashbot_env.inc.sh # sourced from scripts, adapt locations if needed
|
|
│ └── bashbot_init.inc.sh # sourced from bashbot.sh init
|
|
│
|
|
├── scripts # place your bashbot interactive and background scripts here
|
|
│ └── interactive.sh.clean # interactive script template for new scripts
|
|
│
|
|
├── logs # here you'll find BASHBOT, ERROR, DEBUG and MESSAGE.log
|
|
│
|
|
├── modules # optional functions, sourced by commands.sh
|
|
│ ├── aliases.sh # to disable modules rename them xxx.sh.off
|
|
│ ├── answerInline.sh
|
|
│ ├── jsshDB.sh # read and store JSON.sh style JSON, mandatory
|
|
│ ├── background.sh # interactive and background functions
|
|
│ ├── chatMember.sh
|
|
│ └── sendMessage.sh # main send message functions, mandatory
|
|
│
|
|
├── addons # optional addons, disabled by default
|
|
│ ├── example.sh # to enable addons change their XXX_ENABLE to true
|
|
│ ├── antiFlood.sh # simple addon taking actions based on # files and text sent to chat
|
|
│ └── xxxxxage.sh
|
|
│
|
|
├── bashbot.rc # start/stop script if you run bashbot as service
|
|
│
|
|
├── examples # example scripts and configs for bashbot
|
|
│ ├── README.md # description of files and examples
|
|
│ ├── bash2env.sh # script to convert shebang to /usr/bin/env, see [Security Considerations](../README.md#Security-Considerations)
|
|
│ └── bashbot.cron # example crontab
|
|
│
|
|
├── doc # Documentation and License
|
|
├── html
|
|
├── LICENSE
|
|
├── README.html
|
|
├── README.md
|
|
└── README.txt
|
|
|
|
```
|
|
|
|
----
|
|
|
|
## Managing your Bot
|
|
#### Note: running bashbot as root is highly danger and not recommended. See Expert use.
|
|
|
|
### Start / Stop
|
|
Start or Stop your Bot use the following commands:
|
|
```bash
|
|
./bashbot.sh start
|
|
```
|
|
```bash
|
|
./bashbot.sh stop
|
|
```
|
|
|
|
### Scripts in bin/
|
|
Use `script.sh -h` or `script --help` to get short/long help for script.
|
|
|
|
To count the total number of users and messages run the following command:
|
|
|
|
```bash
|
|
bin/bashbot_stats.sh
|
|
```
|
|
|
|
To send a broadcast to all of users that ever used the bot run the following command:
|
|
|
|
```bash
|
|
bin/send_broadcast.sh "Hey, I just wanted to let you know that the bot's been updated!"
|
|
|
|
Sending broadcast message to all users of Deal_O_Mat_bot
|
|
DRY RUN! use --doit as first argument to execute broadcast...
|
|
...
|
|
Message "Hey, ..." sent to xxx users.
|
|
```
|
|
|
|
To send a message to one user or chat run the following command:
|
|
|
|
```bash
|
|
bin/send_message.sh "CHAT[ID]" "Hey, I just wanted to let you know that the bot's been updated!"
|
|
|
|
["OK"] "true"
|
|
["ID"] "12345"
|
|
```
|
|
|
|
To replace a message already sent to one user or chat run the following command:
|
|
|
|
```bash
|
|
bin/send_edit_message.sh "CHAT[ID]" "12345" "Done!"
|
|
|
|
["OK"] "true"
|
|
["ID"] "12345"
|
|
```
|
|
|
|
To send a file to one user or chat run the following command:
|
|
|
|
```bash
|
|
bin/send_file.sh "CHAT[ID]" "funny-pic.jpg" "enjoy this picture"
|
|
|
|
["OK"] "true"
|
|
["ID"] "12346"
|
|
```
|
|
|
|
Note: to get help about a script in bin/ run `scriptname.sh --help`
|
|
|
|
----
|
|
|
|
## Receive data
|
|
Evertime a Telegram update is received, you can read incoming data using the following variables:
|
|
In case you need other update values, the array `UPD` contains complete Telegram response.
|
|
|
|
### Regular Messages
|
|
|
|
These Variables are always present in regular messages:
|
|
|
|
* `${MESSAGE}`: Current message text
|
|
* `${MESSAGE[ID]}`: ID of current message
|
|
* `$USER`: This array contains the First name, last name, username and user id of the sender of the current message.
|
|
* `${USER[ID]}`: User id
|
|
* `${USER[FIRST_NAME]}`: User's first name
|
|
* `${USER[LAST_NAME]}`: User's last name
|
|
* `${USER[USERNAME]}`: Username
|
|
* `$CHAT`: This array contains the First name, last name, username, title and user id of the chat of the current message.
|
|
* `${CHAT[ID]}`: Chat id
|
|
* `${CHAT[FIRST_NAME]}`: Chat's first name
|
|
* `${CHAT[LAST_NAME]}`: Chat's last name
|
|
* `${CHAT[USERNAME]}`: Username
|
|
* `${CHAT[TITLE]}`: Title
|
|
* `${CHAT[TYPE]}`: Type
|
|
* `${CHAT[ALL_MEMBERS_ARE_ADMINISTRATORS]}`: All members are administrators (true if true)
|
|
|
|
The following variables are set if the message contains optional parts:
|
|
|
|
* `$REPLYTO`: Original message which was replied to
|
|
* `$REPLYTO`: This array contains the First name, last name, username and user id of the ORIGINAL sender of the message REPLIED to.
|
|
* `${REPLYTO[ID]}`: ID of message which was replied to
|
|
* `${REPLYTO[UID]}`: Original user's id
|
|
* `${REPLYTO[FIRST_NAME]}`: Original user's first name
|
|
* `${REPLYTO[LAST_NAME]}`: Original user's' last name
|
|
* `${REPLYTO[USERNAME]}`: Original user's username
|
|
* `$FORWARD`: This array contains the First name, last name, username and user id of the ORIGINAL sender of the FORWARDED message.
|
|
* `${FORWARD[ID]}`: Same as MESSAGE[ID] if message is forwarded
|
|
* `${FORWARD[UID]}`: Original user's id
|
|
* `${FORWARD[FIRST_NAME]}`: Original user's first name
|
|
* `${FORWARD[LAST_NAME]}`: Original user's' last name
|
|
* `${FORWARD[USERNAME]}`: Original user's username
|
|
* `$CAPTION`: Picture, Audio, Video, File Captions
|
|
* `$URLS`: This array contains documents, audio files, voice recordings and stickers as URL.
|
|
* `${URLS[AUDIO]}`: Audio files
|
|
* `${URLS[VIDEO]}`: Videos
|
|
* `${URLS[PHOTO]}`: Photos (maximum quality)
|
|
* `${URLS[VOICE]}`: Voice recordings
|
|
* `${URLS[STICKER]}`: Stickers
|
|
* `${URLS[DOCUMENT]}`: Any other file
|
|
* `$CONTACT`: This array contains info about contacts sent in a chat.
|
|
* `${CONTACT[ID]}`: User id
|
|
* `${CONTACT[NUMBER]}`: Phone number
|
|
* `${CONTACT[FIRST_NAME]}`: First name
|
|
* `${CONTACT[LAST_NAME]}`: Last name
|
|
* `${CONTACT[VCARD]}`: User's complete Vcard
|
|
* `$LOCATION`: This array contains info about locations sent in a chat.
|
|
* `${LOCATION[LONGITUDE]}`: Longitude
|
|
* `${LOCATION[LATITUDE]}`: Latitude
|
|
* `$VENUE`: This array contains info about venue (a place) sent in a chat.
|
|
* `${VENUE[TITLE]}`: Name of the place
|
|
* `${VENUE[ADDRESS]}`: Address of the place
|
|
* `${VENUE[LONGITUDE]}`: Longitude
|
|
* `${VENUE[LATITUDE]}`: Latitude
|
|
* `${VENUE[FOURSQUARE]}`: Fouresquare ID
|
|
|
|
|
|
### Service Messages
|
|
|
|
Service Messages are regular messages not itended for end users, instead they signal special events to the
|
|
client, e.g. new users.
|
|
|
|
If a service message is received bashbot sets MESSAGE to the service message type as a command,
|
|
e.g. if a new user joins a chat MESSAGE is set to "/_new_chat_user".
|
|
|
|
* `$SERVICE`: This array contains info about received service messages.
|
|
* `${SERVICE}`: "yes" if service message is received
|
|
* `${SERVICE[NEWMEMBER]}}`: New user's id
|
|
* `${MESSAGE}`: /_new_chat_member ID NAME
|
|
* `${NEWMEMBER[ID]}`: New user's id
|
|
* `${NEWMEMBER[FIRST_NAME]}`: New user's first name
|
|
* `${NEWMEMBER[LAST_NAME]}`: New user's last name
|
|
* `${NEWMEMBER[USERNAME]}`: New user's username
|
|
* `${NEWMEMBER[ISBOT]}`: New user is a bot
|
|
* `${SERVICE[LEFTMEMBER]}`: Id of user left
|
|
* `${MESSAGE}`: /_left_chat_member ID NAME
|
|
* `${LEFTMEMBER[ID]}`: Left user's id
|
|
* `${LEFTMEMBER[FIRST_NAME]}`: Left user's first name
|
|
* `${LEFTMEMBER[LAST_NAME]}`: Left user's last name
|
|
* `${LEFTMEMBER[USERNAME]}`: Left user's username
|
|
* `${LEFTMEMBER[ISBOT]}`: Left user is a bot
|
|
* `${SERVICE[NEWTITLE]}`: Text of new title
|
|
* `${MESSAGE}`: /_new_chat_title SENDER TEXT
|
|
* `${SERVICE[NEWPHOTO]}`: New Chat Picture
|
|
* `${MESSAGE}`: /_new_chat_picture SENDER URL
|
|
* `${SERVICE[PINNED]}`: Pinned MESSAGE ID
|
|
* `${MESSAGE}`: /_new_pinned_message SENDER ID
|
|
* `${PINNED[ID]}`: Id of pinned message
|
|
* `${PINNED[MESSAGE]}`: Message text of pinned message
|
|
* `${SERVICE[MIGRATE]}`: Old and new group id
|
|
* `${MESSAGE}`: /_migrate_group MIGRATE_FROM MIGRATE_TO
|
|
* `${MIGRATE[FROM]}`: Old group id
|
|
* `${MIGRATE[TO]}`: New group id
|
|
|
|
|
|
|
|
### Inline query messages
|
|
Inline query messages are special messages used for interaction with the user,
|
|
they contain the following variables only:
|
|
|
|
* `${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
|
|
|
|
|
|
### Callback button messages
|
|
Callback button messages special messages swedn from callback buttons,
|
|
they contain the following variables only:
|
|
|
|
* `$iBUTTON`: This array contains the ID, First name, last name, username and user id of the user clicked on the button
|
|
* `${iBUTTON[ID]}`: Callback query ID
|
|
* `${iBUTTON[DATA]`: Data attached to button, hopefully unique
|
|
* `${iBUTTON[CHAT_ID]`: Chat where button was pressed
|
|
* `${iBUTTON[MESSAGE_ID]`: Message to which button is attached
|
|
* `${iBUTTON[MESSAGE]`: Text of message
|
|
* `${iBUTTON[USER_ID]}`: User's id
|
|
* `${iBUTTON[FIRST_NAME]}`: User's first name
|
|
* `${iBUTTON[LAST_NAME]}`: User's last name
|
|
* `${iBUTTON[USERNAME]}`: User's @username
|
|
|
|
|
|
## Send data / get response
|
|
|
|
After every `send_xxx` `get_xxx` call the array BOTSENT contains the most important values from Telegram response.
|
|
In case you need other response values , the array `UPD` contains complete Telegram response.
|
|
|
|
### BOTSENT array
|
|
|
|
* `$BOTSENT`: This array contains the parsed results from the last transmission to telegram.
|
|
* `${BOTSENT[OK]}`: contains the string `true`: after a successful transmission
|
|
* `${BOTSENT[ID]}`: Message ID of sent message, image, file etc., if OK is true
|
|
* `${BOTSENT[FILE_ID]}`: unique identifier returned for an uploaded file or URL
|
|
* `${BOTSENT[FILE_TYPE]}`: file type: photo, audio, video, sticker, voice, document
|
|
|
|
|
|
|
|
## Usage of bashbot functions
|
|
|
|
#### sending messages
|
|
To send messages use the `send_xxx_message`functions.
|
|
To insert line brakes in a message place `\n` in the text.
|
|
|
|
To send regular text without any markdown use:
|
|
```bash
|
|
send_normal_message "${CHAT[ID]}" "lol"
|
|
```
|
|
To send text with markdown:
|
|
```bash
|
|
send_markdown_message "${CHAT[ID]}" "lol *bold*"
|
|
```
|
|
To send text with html:
|
|
```bash
|
|
send_html_message "${CHAT[ID]}" "lol <b>bold</b>"
|
|
```
|
|
|
|
To forward messages use the `forward`function:
|
|
```bash
|
|
forward "${CHAT[ID]}" "from_chat_id" "message_id"
|
|
```
|
|
|
|
If your Bot is Admin in a Chat you can delete every message, if not you can delete only your messages.
|
|
To delete a message with a known ${MESSAGE[ID]} you can simple use:
|
|
```bash
|
|
delete_message "${CHAT[ID]}" "${MESSAGE[ID]}"
|
|
```
|
|
|
|
#### send_message
|
|
In addition there is a universal send_massage function which can output any type of message.
|
|
This function is used to process output from external scrips like interactive chats or background jobs.
|
|
**For safety and performance reasons I recommend to use send_xxxx_message functions above for sending messages**
|
|
```bash
|
|
send_message "${CHAT[ID]}" "lol"
|
|
```
|
|
To send html or markdown put the following strings before the text, depending on the parsing mode you want to enable:
|
|
```bash
|
|
send_message "${CHAT[ID]}" "markdown_parse_mode lol *bold*"
|
|
```
|
|
```bash
|
|
send_message "${CHAT[ID]}" "html_parse_mode lol <b>bold</b>"
|
|
```
|
|
This function also allows a third parameter that disables additional function parsing (for safety use this when reprinting user input):
|
|
```bash
|
|
send_message "${CHAT[ID]}" "lol" "safe"
|
|
```
|
|
**See also [Interactive chats](3_advanced.md#Interactive-Chats)**
|
|
|
|
|
|
#### Send files, locations, keyboards.
|
|
To send local files or URL's (photo, video, voice, sticker, documents) use the `send_file` function.
|
|
```bash
|
|
send_file "${CHAT[ID]}" "/home/user/dog.jpg" "Lool" "photo"
|
|
send_file "${CHAT[ID]}" "https://images-na.ssl-images-amazon.com/images/I/81DQ0FpoSNL._AC_SL1500_.jpg"
|
|
```
|
|
To send custom keyboards use the `send_keyboard`function:
|
|
```bash
|
|
send_keyboard "${CHAT[ID]}" "Text that will appear in chat?" '[ "Yep" , "No" ]' # note the single quotes!
|
|
send_keyboard "${CHAT[ID]}" "Text that will appear in chat?" "[ \\"Yep\\" , \\"No\\" ]" # within double quotes you must escape the inside double quots
|
|
```
|
|
To send locations use the `send_location`function:
|
|
```bash
|
|
send_location "${CHAT[ID]}" "Latitude" "Longitude"
|
|
```
|
|
To send venues use the `send_venue`function:
|
|
```bash
|
|
send_venue "${CHAT[ID]}" "Latitude" "Longitude" "Title" "Address" "optional foursquare id"
|
|
```
|
|
To send a chat action use the `send_action`function.
|
|
Allowed values: typing for text messages, upload_photo for photos, record_video or upload_video for videos, record_audio or upload_audio for audio files, upload_document for general files, find_location for locations.
|
|
```bash
|
|
send_action "${CHAT[ID]}" "action"
|
|
```
|
|
**See also [Bashbot function reference](6_reference.md#Interactive_Chats)**
|
|
|
|
#### [Prev Create Bot](1_firstbot.md)
|
|
#### [Next Advanced Usage](3_advanced.md)
|
|
|
|
#### $$VERSION$$ v1.35-dev-31-ga3eec98
|
|
|