sudo apt-get update
sudo apt-get install python3-requests
#!/usr/bin/env python3
import sys
import dbus
import requests
import subprocess
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
class SMSMonitor:
def __init__(self):
# Initialize D-Bus
DBusGMainLoop(set_as_default=True)
self.bus = dbus.SystemBus()
# Set up monitoring paths
self.sms_path = '/org/freedesktop/ModemManager1/SMS'
# Telegram settings
self.token = "YOUR_BOT_TOKEN" # Replace with your bot token
self.chat_id = "YOUR_CHAT_ID" # Replace with your chat ID
self.last_update_id = 0
# Monitor for new messages
self.bus.add_signal_receiver(
handler_function=self.on_message_added,
signal_name='Added',
dbus_interface='org.freedesktop.ModemManager1.Modem.Messaging',
path='/org/freedesktop/ModemManager1/Modem/0'
)
# Add periodic check for Telegram messages
GLib.timeout_add_seconds(2, self.check_telegram_messages)
print("SMS Monitor started. Waiting for messages...")
def on_message_added(self, path, received):
try:
if self.sms_path in path:
# Get the SMS object
sms_obj = self.bus.get_object('org.freedesktop.ModemManager1', path)
props = sms_obj.GetAll('org.freedesktop.ModemManager1.Sms',
dbus_interface='org.freedesktop.DBus.Properties')
# Format and display message
if 'Text' in props and 'Number' in props:
# Console output
print("\n=== New SMS Message ===")
print(f"From: {props['Number']}")
print(f"Message: {props['Text']}")
if 'Timestamp' in props:
print(f"Time: {props['Timestamp']}")
print("=====================")
sys.stdout.flush()
# Send to Telegram
message = f"=== New SMS Message ===\n"
message += f"From: {props['Number']}\n"
message += f"Message: {props['Text']}"
if 'Timestamp' in props:
message += f"\nTime: {props['Timestamp']}"
message += "\n====================="
self.send_telegram_message(message)
except Exception as e:
print(f"Error processing message: {str(e)}", file=sys.stderr)
sys.stderr.flush()
def check_telegram_messages(self):
try:
url = f"https://api.telegram.org/bot{self.token}/getUpdates"
params = {'offset': self.last_update_id + 1, 'timeout': 1}
response = requests.get(url, params=params).json()
if response.get('ok'):
for update in response['result']:
self.last_update_id = update['update_id']
if 'message' in update and 'text' in update['message']:
text = update['message']['text'].lower()
if text.startswith('send sms to '):
parts = text[12:].split(' ', 1)
if len(parts) == 2:
number, message = parts
result = subprocess.run(['sudo', 'sms', number, message],
capture_output=True, text=True)
if result.returncode == 0 and "OK" in result.stdout:
self.send_telegram_message(f"✅ SMS sent to {number}")
else:
self.send_telegram_message(f"❌ Failed to send SMS to {number}")
else:
self.send_telegram_message("❌ Invalid format. Use: send sms to NUMBER MESSAGE")
except Exception as e:
print(f"Error checking Telegram messages: {str(e)}")
return True
def send_telegram_message(self, message):
url = f"https://api.telegram.org/bot{self.token}/sendMessage"
data = {'chat_id': self.chat_id, 'text': message}
try:
requests.post(url, data=data)
except Exception as e:
print(f"Error sending to Telegram: {str(e)}")
def run(self):
try:
loop = GLib.MainLoop()
loop.run()
except KeyboardInterrupt:
print("\nMonitoring stopped")
sys.exit(0)
if __name__ == '__main__':
monitor = SMSMonitor()
monitor.run()
chmod +x sms-telegram.py
./sms-telegram.py
send sms to NUMBER MESSAGE
Example:
send sms to +36707397959 Hello from Telegram
sudo nano /etc/systemd/system/sms-telegram.service
[Unit]
Description=SMS-Telegram Integration
After=network.target ModemManager.service
[Service]
ExecStart=/full/path/to/sms-telegram.py
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
sudo systemctl enable sms-telegram
sudo systemctl start sms-telegram
sudo sms NUMBER "test"
ps aux | grep sms-telegram
journalctl -u sms-telegram -f