A fully customizable modular Telegram bot written in Python using python-telegram-bot to help in Custom Rom support groups in getting info about their Officially Supported Devices.
git clone https://github.com/PrajjuS/CustomRomBot
cd CustomRomBot
pip install -r requirements.txt
mv sample_config.yaml config.yaml
-
bot_token
: The API token for your Telegram bot. -
gh_token
: Your GitHub Personal Access Token. -
rom_name
: The name of the Custom Rom. -
channel_username
: The username of the Rom's Telegram channel (without the @ symbol). -
support_group_username
: The username of the Rom's Telegram support group (without the @ symbol). -
website_url
: The official website URL of the Rom. -
official_devices_repo
: The repository URL containing the list of officially supported devices in the formatusername/repo_name
(withouthttps://github.com
). -
device_json_paths
: A list of file paths where device JSON files are present. -
show_device_infos_of_all_paths
: Boolean (true
/false
) that specifies whether to display information from all JSON paths indevice_json_paths
or not (Use it only if there are multiple paths). -
device_json_structure
: The structure of the Rom's device JSON files. -
message_format
: Template for bot's message using placeholders corresponding to fields in the device JSON that usesmarkdown formatting
(Refer the placeholder and formatting rules below for more info).Placeholder Rules
When creating the
message_format
, you can use placeholders to dynamically populate the bot’s message. Below are the rules for using placeholders:-
Device JSON Placeholders
- These are the placeholders which corresponding to the fields in the device JSON provided in the config and will be replaced by the values extracted from the JSON file. .
- Example: If your JSON contains a field named
device_name
, you can include it in the message format as{device_name}
.
*Device Name:* `{device_name}` *Version:* `{version}` *Maintainer:* `{maintainer}`
-
Bot-Generated Placeholders
- These placeholders are generated by bot dynamically based on pre-defined logic and can be used in your message format and are prefixed by
bot
. - Example: You can use
{bot_placeholder}
in your message format to get the bot generated value. - The following are the placeholders which are currently available:
{bot_codename}
: This placeholder fetches and returns the codename of the device.
*Device Codename:* `{bot_codename}`
- These placeholders are generated by bot dynamically based on pre-defined logic and can be used in your message format and are prefixed by
Formatting Rules
- Bold Text: Wrap text in asterisk
*
(eg:*bold*
). - Italic Text: Wrap text in underscore
_
(eg:_italic_
). - Code: Wrap text in backticks
`
(eg:`code`
). - Code Blocks: Use triple backticks
```
for code blocks (eg:```code block```
). - Lists: Use
-
or*
for unordered lists, and1.
for ordered lists (eg:- List
). - Links: Format links using
[text](URL)
(eg:[Google](https://www.google.com)
). - Buttons: Create buttons using
[[text | URL]]
(eg:[[Google | https://google.com ]]
).-
To add multiple buttons in a single line:
[[Button Text | URL]] [[Another Button | URL]]
-
To add multiple buttons in multiple lines:
[[Button Text | URL]] [[Another Button | URL]]
-
-
NOTE: You can refer the example yaml configs below.
Example config.yaml
bot_token: "123123123:ssfasjhdfajkshdfjaskhsAASDASDfad"
gh_token: "asdjhfgaskjdhfgjkashdgf"
rom_name: "Project-Elixir"
channel_username: "Elixir_Updates"
support_group_username: "Elixir_Discussion"
website_url: "https://projectelixiros.com"
official_devices_repo: "ProjectElixir-Devices/official_devices"
device_json_paths:
- "builds"
show_device_info_of_all_paths: false
device_json_structure: {
"error": ,
"filename": "",
"datetime": ,
"size": ,
"url": "",
"filehash": "",
"version": "",
"id": "",
"tg_username": "",
"device_name": "",
"device": "",
"xda_thread": "",
"is_active":
}
message_template: |
*Project Elixir {version} for {device_name}* *(*`{device}`*)*
*Maintainer:* [{tg_username}](https://t.me/{tg_username})
*Latest Build:* `{filename}`
*Is Active:* `{is_active}`
*Do consider donating if you want to appreciate our work*
*UPI:* `dwarmachine24@oksbi`
[[Paypal | https://www.paypal.me/uglykid24]] [[BMC | https://www.buymeacoffee.com/uglykid]] [[Patreon | https://www.patreon.com/join/uglykid24]]
[[Changelog | https://github.com/ProjectElixir-Devices/official_devices/tree/A14/changelogs/{device}/{filename}.txt]] [[XDA | {xda_thread}]]
[[Download | https://projectelixiros.com/device/{device}]]
bot_token: "112312312:jhasKJDHAKJHajkdhjkahsd"
gh_token: "sdfgasdfasdfsadfsadfasdfasdf "
rom_name: "DroidX-UI"
channel_username: "DroidXUI_announcements"
support_group_username: "DroidXUI_chats"
website_url: "https://zirgomhaidar.github.io/DxWeb"
official_devices_repo: "DroidX-UI-Devices/vendor_droidxOTA"
device_json_paths:
- "builds/gapps"
- "builds/vanilla"
show_device_info_of_all_paths: true
device_json_structure: {
"response": [
{
"maintainer": "",
"oem": "",
"device": "",
"version": "",
"filename": "",
"download": "",
"timestamp": ,
"md5": "",
"sha256": "",
"size": ,
"buildtype": "",
"forum": "",
"telegram": ""
}
]
}
message_template: |
*DroidX-UI {version} for {oem} {device}* *(*`{bot_codename}`*)*
*Maintainer:* [{maintainer}](https://t.me/{maintainer})
*Latest Build:* `{filename}`
*MD5:* `{md5}`
[[Changelog | https://github.com/DroidX-UI-Devices/vendor_droidxOTA/tree/14/changelogs/{filename}.txt]] [[Download | {download}]]
python3 -m RomBot
An example of how this bot works can be seen in Project-Elixir Support, or you can directly check by messaging the bot at Elixie.
For any issues regarding the bot, you can approach for help via the following options:
- Group: You can reach out NoobStuffs
- Direct: You can contact me directly Here