Telegram channels are goldmines for real-time data: job leads, market signals, community updates. The Bot API is limited — it can't read channels the bot isn't admin of. Telethon (Python User API client) can read anything the user account has access to.
from telethon import TelegramClient, events
api_id = 12345678
api_hash = "your_api_hash"
session_name = "monitor"
client = TelegramClient(session_name, api_id, api_hash)
@client.on(events.NewMessage(chats=[1857569644])) # Channel ID
async def handler(event):
message = event.message
text = message.text or ""
# Filter for relevant keywords
keywords = ["python", "data science", "react native", "mobile"]
if any(kw in text.lower() for kw in keywords):
# Forward or process the lead
await process_lead(text, message.date, message.id)
client.start()
client.run_until_disconnected()
# macOS: launchd plist
# ~/Library/LaunchAgents/com.telegram-monitor.plist
<plist>
<dict>
<key>Label</key>
<string>com.telegram-monitor</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python3</string>
<string>/path/to/monitor.py</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
# Linux: systemd service
# /etc/systemd/system/telegram-monitor.service
CHANNELS = {
1857569644: {"name": "Leads Galera", "keywords": ["python", "react"]},
1234567890: {"name": "Freelance Jobs", "keywords": ["remote", "contract"]},
}
@client.on(events.NewMessage(chats=list(CHANNELS.keys())))
async def handler(event):
config = CHANNELS[event.chat_id]
text = (event.message.text or "").lower()
if any(kw in text for kw in config["keywords"]):
await notify(
channel=config["name"],
text=event.message.text,
url=f"https://t.me/c/{event.chat_id}/{event.message.id}"
)