Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

Telepipe

A simple command-line utility to send messages or files to Telegram chat directly from your terminal.

Features

  • Send messages to Telegram channel/chat/group directly from command line
  • File upload support with original filename preservation
  • Video streaming support with optimized playback in Telegram
  • Message formatting support with Markdown and HTML modes
  • Scheduled message delivery with specific time or delay options
  • Interactive shell mode for multi-line messaging
  • Automatically switch between message and file mode based on content length
  • Generate shareable Telegram links
  • Quiet/Silent mode for scripting
  • Easy installation with guided setup
  • Simple configuration

Installation

  1. Clone this repository:
git clone https://github.com/linuxmaster14/telepipe.git
cd telepipe
  1. Run the installation script with an optional topic name:
chmod +x installer.sh
sudo ./installer.sh

During installation, you'll need to provide:

  1. Your Telegram Bot Token (get it from BotFather)
  2. Your Chat ID (can be a group, channel, or user ID)

Usage

# Show help
telepipe --help
# Show version
telepipe --version
# Send a simple messageecho"Hello from my server!"| telepipe
# Send the output of a command
uptime | telepipe
# Send the contents of a file
cat logfile.txt | telepipe
# Send a message without displaying the URL (quiet mode)echo"Notification"| telepipe --quiet
# Start an interactive multi-line messaging session
telepipe --interactive
# Send formatted messages with Markdownecho"*Bold text* and _italic text_"| telepipe --format markdown
# Send formatted messages with HTMLecho"<b>Bold</b> and <i>italic</i>"| telepipe --format html
# Send code snippets with formattingecho'Check this `inline code` example'| telepipe --format markdown
# Send code blocksecho -e "\`\`\`bash\necho 'Hello World'\nls -la\n\`\`\`"| telepipe --format markdown
# Schedule messages for future deliveryecho"Daily backup completed"| telepipe --schedule "2025-05-28 09:00:00"# Send delayed messagesecho"Server maintenance starting"| telepipe --delay 1800 # 30 minutes delay# Upload files with original names
telepipe --file backup.tar.gz
telepipe --file /path/to/document.pdf
telepipe --file archive.zip --quiet
# Upload videos with streaming support
telepipe --video movie.mp4
telepipe --video /path/to/video.avi
# Upload files/videos with captionsecho"Database backup from $(date)"| telepipe --file backup.sql
echo"Movie night! 🎬"| telepipe --video film.mp4
# Use it in your scriptsbackup_db() {
# backup logic hereif [ $?-eq 0 ];thenecho"Database backup completed successfully at $(date)"| telepipe
elseecho"Database backup FAILED at $(date)"| telepipe
fi
}
# Script example with quiet modemonitoring_check() {
if! ping -c 1 server.example.com > /dev/null;thenecho"Server unreachable at $(date)"| telepipe --quiet &&echo"Alert sent"fi
}
# Scheduled maintenance notificationsschedule_maintenance_alerts() {
echo"🔧 Server maintenance starts in 1 hour"| telepipe --delay 3600
echo"⚠️ Server maintenance starts in 15 minutes"| telepipe --delay 5400
echo"🚨 Server maintenance starting NOW"| telepipe --delay 6900
}
# Daily report schedulingschedule_daily_reports() {
echo"📊 Daily system report: $(date)"| telepipe --schedule "$(date -v+1d '+%Y-%m-%d 09:00:00')"
}
# Automated backup with file uploaddaily_backup() {
local backup_file="backup-$(date +%Y%m%d).tar.gz"
tar -czf "$backup_file" /important/data
if [ $?-eq 0 ];thenecho"✅ Backup completed successfully at $(date)"| telepipe --file "$backup_file"elseecho"❌ Backup failed at $(date)"| telepipe
fi
}
# Log file monitoring with uploadcheck_error_logs() {
local error_count=$(grep -c "ERROR" /var/log/app.log)if [ "$error_count"-gt 10 ];thenecho"🚨 High error count detected: $error_count errors"| telepipe --file /var/log/app.log
fi
}

Options

  • -h, --help - Show this help message and exit
  • -i, --interactive - Enter interactive mode for multi-line messaging
  • -q, --quiet - Quiet mode - suppress output (except errors)
  • -v, --version - Show version information and exit
  • --format MODE - Set message formatting mode: markdown, html, or none
  • --schedule TIME - Schedule message for specific time (YYYY-MM-DD HH:MM:SS)
  • --delay SECONDS - Delay message delivery by specified seconds
  • --file PATH - Upload a file to Telegram (preserves original filename)
  • --video PATH - Upload a video with streaming support (auto-detects video metadata)

Message Formatting

Telepipe supports three formatting modes:

Markdown Mode (--format markdown)

Uses Telegram's MarkdownV2 formatting with automatic escaping of special characters:

  • Bold: *bold text*
  • Italic: _italic text_
  • Inline code: `inline code`
  • Code blocks:
    ```language
    code block
    ```
    

Example:

echo"*Important*: Server status is \`ONLINE\`"| telepipe --format markdown

HTML Mode (--format html)

Uses HTML formatting tags:

  • Bold: <b>bold text</b>
  • Italic: <i>italic text</i>
  • Inline code: <code>inline code</code>
  • Code blocks: <pre>code block</pre>

Example:

echo"<b>Alert</b>: Database backup <code>COMPLETED</code>"| telepipe --format html

Plain Text Mode (--format none or default)

Sends messages without any formatting - useful when you want to send literal markdown/HTML characters.

Scheduled Message Delivery

Telepipe supports scheduling messages for future delivery in two ways:

Absolute Time Scheduling (--schedule)

Schedule a message for a specific date and time:

# Schedule a reminder for a specific timeecho"Meeting starts in 15 minutes"| telepipe --schedule "2025-05-28 14:45:00"# Schedule daily reportsecho"Daily backup completed successfully"| telepipe --schedule "2025-05-29 09:00:00"# Works with formattingecho"*Important*: Server maintenance begins now"| telepipe --schedule "2025-05-28 22:00:00" --format markdown

Relative Time Delay (--delay)

Delay message delivery by a specified number of seconds:

# Send reminder in 1 hour (3600 seconds)echo"Backup completed"| telepipe --delay 3600
# Send alert in 30 minutes (1800 seconds)echo"⚠️ Maintenance window starting soon"| telepipe --delay 1800
# Quick 5-minute delayecho"Process finished successfully"| telepipe --delay 300

Notes:

  • Scheduled messages run as background processes
  • The process ID is displayed for tracking (unless using --quiet)
  • Scheduling cannot be combined with --interactive mode
  • Time format for --schedule is: YYYY-MM-DD HH:MM:SS
  • Scheduled time must be in the future

File Upload

Telepipe can upload files directly to Telegram while preserving their original filenames:

Basic File Upload

# Upload a file
telepipe --file backup.tar.gz
telepipe --file /path/to/document.pdf
telepipe --file ~/Downloads/movie.mp4
# Upload with quiet mode (no URL output)
telepipe --file large-backup.zip --quiet

File Upload with Caption

You can add a caption to uploaded files by piping text to telepipe:

# Add caption from command lineecho"Database backup from $(date)"| telepipe --file backup.sql
# Add caption from another command
hostname | telepipe --file system-report.txt
# Multi-line captionecho -e "Weekly Report\nGenerated: $(date)\nSize: $(du -h report.pdf)"| telepipe --file report.pdf

Practical Examples

# Backup with timestamp captionecho"Backup completed at $(date)"| telepipe --file backup-$(date +%Y%m%d).tar.gz
# Log file with contextecho"Error logs from server crash at $(date)"| telepipe --file /var/log/error.log
# Automated script backup
tar -czf backup.tar.gz /important/data &&echo"Backup created: $(du -h backup.tar.gz)"| telepipe --file backup.tar.gz

Notes:

  • Maximum file size: 50MB (Telegram Bot API limit)
  • Supports all file types
  • Original filename is preserved
  • Cannot be combined with --interactive, --schedule, or --delay options
  • Caption text supports the same formatting as regular messages when used with --format

Video Streaming

Telepipe supports optimized video uploads with streaming playback directly in Telegram:

Basic Video Upload

# Upload video with streaming support
telepipe --video movie.mp4
telepipe --video /path/to/video.avi
telepipe --video recording.mov
# Upload with quiet mode
telepipe --video large-video.mp4 --quiet

Video Upload with Caption

# Add caption to videoecho"Movie night! 🎬"| telepipe --video film.mp4
echo"Security footage from $(date)"| telepipe --video camera-feed.mp4
# Formatted captionecho"*Important*: Training video"| telepipe --video training.mp4 --format markdown

Advanced Features

  • Automatic metadata detection: If ffprobe (from FFmpeg) is installed, telepipe automatically detects:

    • Video duration
    • Resolution (width/height)
    • These enhance the streaming experience in Telegram
  • Streaming optimization: Videos are sent using Telegram's sendVideo API with supports_streaming=true, enabling:

    • Inline playback in chat
    • Better video player interface
    • Thumbnail generation
    • Progress bar during playback

Install FFmpeg for Better Support

# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# CentOS/RHEL
sudo yum install ffmpeg

Practical Examples

# Screen recording with timestampecho"Screen recording from $(date)"| telepipe --video screen-capture.mp4
# Security camera uploadecho"Motion detected at front door"| telepipe --video security-$(date +%H%M).mp4
# Meeting recordingecho"📹 Team meeting recording - $(date '+%Y-%m-%d')"| telepipe --video meeting.mp4 --format markdown

Video vs File Upload:

  • Use --video for: MP4, AVI, MOV, MKV, WebM video files
  • Use --file for: Documents, archives, images, audio, or when you want document-style upload

Notes:

  • Maximum video size: 50MB (Telegram Bot API limit)
  • Supports common video formats (MP4, AVI, MOV, MKV, WebM, etc.)
  • Automatic streaming optimization
  • Cannot be combined with --interactive, --schedule, or --delay options
  • Caption text supports formatting when used with --format

Interactive Mode Formatting

In interactive mode, you can change formatting on-the-fly:

telepipe --interactive
# Then use commands like:# /format markdown# /format html# /status

Configuration

The configuration file is located at /etc/telepipe/config and includes the following settings:

  • BOT_TOKEN: Your Telegram bot token from BotFather
  • CHAT_ID: ID of the chat where messages will be sent
  • MAX_LEN: Maximum message length before sending as file (default: 4096)
  • TIMEOUT: API request timeout in seconds (default: 5)
  • DISABLE_LINK_PREVIEW: Whether to disable link previews (default: true)

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

About

A simple command-line utility to send messages to Telegram

Topics

Resources

Stars

97 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages