Modular Telegram bot designed for being run on a Raspberry Pi as a swiss-army server.
RaspOne provides a list of modules, described below, along with the ability to define and implement your own ones.
Default modules are stored in the modules/
directory.
Personal modules and configuration can be stored in the personal_modules/
directory.
Please, consider RaspOne as an english word and not an italian one... 😊
- Invoke RaspOne's module commands from Telegram, with the help of contextualized keyboards:
- Receive alerts from your modules when an event occurs, like a new SSH connection:
- Explore all default modules present in RaspOne:
- Asana: Run Asana scripts.
/asana assign
(see this gist)
- Bot: Control the RaspOne instance.
/bot resart
(restart the bot, loading new modules)/bot request <request id>
(get error info about a network request)
- Echo: Echo messages from server (an example for the Alert/IPC mechanism)
- IP: Get public IP address of the server.
/ip get
/ip get ipv6
/ip list
(Get list of previous logged IP addresses)
- Pomodoro: Focus with your Pomodoro Timer.
/pomodoro start
(default 20 min)/pomodoro start 15
(every 15 min)/pomodoro start TIMER
(every 20 min withTIMER
as message)/pomodoro start 15 TIMER
/pomodoro stop
/pomodoro status
- S3: Save and manage objects on an AWS S3 bucket.
/s3 status
(show if the command is available)/s3 list
(list objects on S3 bucket)/s3 save
(save file sent in the chat on S3 bucket)/s3 delete
(delete object from S3 bucket)
- SSH: Shows SSH info and get alerts on every SSH activity.
/ssh status
/ssh port
(show running port)/ssh fingerprint
(return ECDSA and ED25519 keys fingerprints for verification)
- System: Manage the system.
/system reboot
(reboot the server)
- Torrent: Start and manage torrents on Transmission.
/torrent status
/torrent list
(list torrents)/torrent add
(add a torrent from amagnet:
URL or a.torrent
file sent in the chat)/torrent remove
(remove a torrent, keeping local data if completed)/torrent pause
(pause or resume a torrent)
- VPN: Shows VPN info and get alerts on every VPN activity.
/vpn status
/vpn client
(return.ovpn
profile file, defaultUserOne.ovpn
)/vpn client <profile>
cd /home/pi/Documents/
git clone https://www.github.com/lorenzodifuccia/RaspOne
cd RaspOne
virtualenv venv # pip3 install virtualenv
source venv/bin/activate
pip3 install -r requirements.txt
# Optional
mkdir personal_modules
cp rasp_conf.ini personal_modules/
cd personal_modules/
# IMPORTANT: modify the configuration file, add BotToken, ChatId of the user, etc.
nano rasp_conf.ini
sudo ln -s /home/pi/Documents/RaspOne/rasp-one.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start rasp-one.service
sudo systemctl enable rasp-one.service
echo "enjoy :)"
Some modules provided by RaspOne use some scripts executed by services like sshd
or openvpn
to receive alerts on a so-called "IPC" server listener.
Other modules requires permissions to be granted.
Every module that require a different configuration, drops a script in the utils/
directory, created after RaspOne is started.
List of modules that require a configuration on rasp_conf.ini
or in utils/
:
- Asana: add token on
rasp_conf.ini
. - Bot: see
utils/rasp_cron_check.sh
. - S3: see
rasp_conf.ini
andmodules/s3.py
. - SSH: see
utils/rasp_ssh_alert.sh
. - System: see
utils/rasp_one_system.conf
. - Torrent: modify download directory on
rasp_conf.ini
, specify also the RPC URL if different from the default one. - VPN: see
utils/rasp_vpn_alert.sh
, modify profiles directory path onrasp_conf.ini
(seepivpn
).
from modules import RaspOneBaseModule
class ModuleExample(RaspOneBaseModule):
NAME = "example"
DESCRIPTION = "Is this an example?"
USAGE = {
"yes": "Yeeeeeeeeeeeeeeeeeeeess"
}
def __init__(self, core):
super().__init__(core)
async def command(self, update, context):
if context.args[0] == "yes":
await update.effective_message.reply_text("No 😒")
For Alert, Updater and MessageHandler see respectively ssh
, pomodoro
and torrent
modules.
- Update to
python-telegram-bot v20.0
- Test new code for
python-telegram-bot v20.0
- Add wiki for
/s3
module - Handle systemctl stop signal
- Logging, everything...
- ASCII decode issue: log UTF-8
- Write decent README and wiki.
Made with <3 from Lorenzo Di Fuccia