Telegram-AlwaysON (AutoRead)

Pakai Telethon, perlu install pakai Python
(Linux & Windows)

1️⃣ Install Python dan Pip

Sebelum mulai, pastikan Python 3.8+ sudah terinstall.
Cek versi Python dengan perintah:

1
python3 --version

Kalau belum ada, install dulu:

  • Linux (Ubuntu/Debian/Xubuntu/Lubuntu)
    1
    2
    sudo apt update
    sudo apt install python3 python3-pip
    
  • Windows
    Download Python dari python.org terus install.
    Pastikan opsi "Add Python to PATH" dicentang.

2️⃣ Buat Virtual Environment (Opsional, tapi Disarankan)

Agar tidak mengganggu sistem Python, gunakan virtual environment:

1
2
3
python3 -m venv venv
source venv/bin/activate  # Linux
venv\Scripts\activate     # Windows (CMD)

Kalo aku ga pakai sih

3️⃣ Install Telethon

Telethon itu library Python buat Telegram API.

1
pip install telethon

kalau ga bisa, paksa aja

1
pip install --break-system-packages telethon

4️⃣ Ambil API ID & API Hash dari Telegram

  1. Buka Telegram Developer Portal
  2. Login pakai nomor Telegram kamu.
  3. Klik "Create New Application", terus tinggal isi:
    • App title: Bebas (contoh: AutoReadBot)
    • Short name: Bebas (contoh: autoread)
    • Platform: Desktop
  4. Setelah membuat, kamu akan mendapatkan:
    • API ID
    • API Hash

Simpan kedua informasi ini karena akan kita gunakan.


5️⃣ Buat dan Jalankan Bot Auto-Read

Sekarang buat file auto.py dan tempelkan kode berikut:

from telethon import TelegramClient, events
from telethon.tl.functions.account import UpdateStatusRequest
import asyncio
import random
from datetime import datetime

# Ganti dengan punyamu
API_ID = GANTI_API_ID_KAMU
API_HASH = "GANTI_API_HASH_KAMU"

# Target chats yang akan di-auto-read
TARGET_CHATS = ["username1", "username2", "username3", "username4", "username5"]
TARGET_CHATS_LOWER = {u.lower() for u in TARGET_CHATS}  # Pakai set biar lebih cepat

# Chats yang tidak mau ditampilkan di terminal (tetap auto-read)
SILENT_CHATS = ["username1", "username2"]
SILENT_CHATS_LOWER = {u.lower() for u in SILENT_CHATS}  # Pakai set biar lebih efisien

client = TelegramClient("session_name", API_ID, API_HASH)

async def autoread():
    await client.start()
    me = await client.get_me()
    print(f"Login sebagai: {me.username or me.first_name}")

    async def stay_online():
        while True:
            try:
                await client(UpdateStatusRequest(offline=False))
                await asyncio.sleep(60)
            except Exception as e:
                print("Error update status online:", e)

    @client.on(events.NewMessage())
    async def handler(event):
        try:
            chat = await event.get_chat()
            username = getattr(chat, 'username', None)  # Bisa None
            title = getattr(chat, 'title', None)  # Untuk grup/channel
            name_display = title or username or 'Private Chat'

            username_lower = username.lower() if username else None
            title_lower = title.lower() if title else None

            # Jika chat masuk daftar auto-read
            if username_lower in TARGET_CHATS_LOWER or title_lower in TARGET_CHATS_LOWER:
                # Delay acak sebelum auto-read (0.5 - 0.8 detik)
                await asyncio.sleep(random.uniform(0.5, 0.8))
                await client.send_read_acknowledge(event.chat_id)

                # Jika chat ada di SILENT_CHATS, jangan tampilkan di terminal
                if username_lower in SILENT_CHATS_LOWER or title_lower in SILENT_CHATS_LOWER:
                    return  

                timestamp = datetime.now().strftime("[AUTO %d %B %Y : %H:%M:%S]")
                print(f"{timestamp} ✅ Auto-read pesan dari {name_display}")

            # Chat lain tetap ditampilkan
            else:
                timestamp = datetime.now().strftime("[%d %B %Y : %H:%M:%S]")
                print(f"{timestamp} 🔔 Pesan baru dari {name_display}")
                print(f"   Isi: {event.message.text[:100]}{'...' if len(event.message.text) > 100 else ''}")

        except Exception as e:
            print("Error handle pesan:", e)

    print("[Aldi Was Here] - Bot berjalan... (Tekan CTRL+C untuk berhenti) - @aldirobot")

    await asyncio.gather(
        stay_online(),
        client.run_until_disconnected()
    )

if __name__ == "__main__":
    asyncio.run(autoread())

6️⃣ Jalankan Bot

Buka terminal atau command prompt, lalu jalankan:

1
python3 auto.py

Kalau ini pertama kali, biasanya dimintai Login pakai nomor Telegram dan kode OTP.
Setelah login, bot akan otomatis membaca pesan di channel/grup/forum yang kamu tentukan.
TENANG, Script ini aman kok soalnya pakai API Telegram Resmi.


7️⃣ Menambahkan Channel/Grup/Forum

  • Jika ingin membaca dari channel atau grup lain, tambahkan ke TARGET_CHATS dalam kode:
    1
    TARGET_CHATS = ["username1", "username2", "username3", "username4", "username5"]
    
  • Untuk mendapatkan username channel/grup, cek di Telegram:
    • Channel publik: Bisa pakai @username
    • Grup publik: Bisa pakai @username_grup
    • Grup/channel private: Pakai ID (-1001234567890)

INI SCRIPTNYA YA! Sama kok kayak yg diatas, takut kelewat aja :)

Ini Versi 1, AutoRead Chat Tertentu:

from telethon import TelegramClient, events
from telethon.tl.functions.account import UpdateStatusRequest
import asyncio
import random
from datetime import datetime

# Ganti dengan punyamu
API_ID = GANTI_API_ID_KAMU
API_HASH = "GANTI_API_HASH_KAMU"

# Target chats yang akan di-auto-read
TARGET_CHATS = ["username1", "username2", "username3", "username4", "username5"]
TARGET_CHATS_LOWER = {u.lower() for u in TARGET_CHATS}  # Pakai set biar lebih cepat

# Chats yang tidak mau ditampilkan di terminal (tetap auto-read)
SILENT_CHATS = ["username1", "username2"]
SILENT_CHATS_LOWER = {u.lower() for u in SILENT_CHATS}  # Pakai set biar lebih efisien

client = TelegramClient("session_name", API_ID, API_HASH)

async def autoread():
    await client.start()
    me = await client.get_me()
    print(f"Login sebagai: {me.username or me.first_name}")

    async def stay_online():
        while True:
            try:
                await client(UpdateStatusRequest(offline=False))
                await asyncio.sleep(60)
            except Exception as e:
                print("Error update status online:", e)

    @client.on(events.NewMessage())
    async def handler(event):
        try:
            chat = await event.get_chat()
            username = getattr(chat, 'username', None)  # Bisa None
            title = getattr(chat, 'title', None)  # Untuk grup/channel
            name_display = title or username or 'Private Chat'

            username_lower = username.lower() if username else None
            title_lower = title.lower() if title else None

            # Jika chat masuk daftar auto-read
            if username_lower in TARGET_CHATS_LOWER or title_lower in TARGET_CHATS_LOWER:
                # Delay acak sebelum auto-read (0.5 - 0.8 detik)
                await asyncio.sleep(random.uniform(0.5, 0.8))
                await client.send_read_acknowledge(event.chat_id)

                # Jika chat ada di SILENT_CHATS, jangan tampilkan di terminal
                if username_lower in SILENT_CHATS_LOWER or title_lower in SILENT_CHATS_LOWER:
                    return  

                timestamp = datetime.now().strftime("[AUTO %d %B %Y : %H:%M:%S]")
                print(f"{timestamp} ✅ Auto-read pesan dari {name_display}")

            # Chat lain tetap ditampilkan
            else:
                timestamp = datetime.now().strftime("[%d %B %Y : %H:%M:%S]")
                print(f"{timestamp} 🔔 Pesan baru dari {name_display}")
                print(f"   Isi: {event.message.text[:100]}{'...' if len(event.message.text) > 100 else ''}")

        except Exception as e:
            print("Error handle pesan:", e)

    print("[Aldi Was Here] - Bot berjalan... (Tekan CTRL+C untuk berhenti) - @aldirobot")

    await asyncio.gather(
        stay_online(),
        client.run_until_disconnected()
    )

if __name__ == "__main__":
    asyncio.run(autoread())

Ini Versi 2, AutoRead semua chat Kecuali yang tercantum:

from telethon import TelegramClient, events
from telethon.tl.functions.account import UpdateStatusRequest
import asyncio
import random
from datetime import datetime

# Ganti dengan API ID dan API HASH kamu
API_ID = "GANTI_API_ID_KAMU"
API_HASH = "GANTI_API_HASH_KAMU"

# Daftar username yang **tidak** ingin di-auto-read
EXCLUDED_CHATS = {
    "username1", "username2", "username3", "username4", "masukinajasebanyaknya"
}

# Daftar chat yang **auto-read tapi tidak muncul di terminal**
SILENT_CHATS = {
    "username1", "username2"
}

client = TelegramClient("session_name", API_ID, API_HASH)

async def autoread():
    async with client:
        me = await client.get_me()
        print(f"Login sebagai: {me.username or me.first_name}")

        @client.on(events.NewMessage())
        async def handler(event):
            chat = await event.get_chat()
            username = getattr(chat, 'username', None)
            username_check = username.lower() if username else None

            # Paksa status online
            await client(UpdateStatusRequest(offline=False))

            # Delay sebelum auto-read (acak antara 0.5 - 0.8 detik)
            delay = random.uniform(0.5, 0.8)
            await asyncio.sleep(delay)

            # Dapatkan timestamp
            timestamp = datetime.now().strftime("[AUTO %d %B %Y : %H:%M:%S]")

            if username_check in EXCLUDED_CHATS:
                print(f"{timestamp} 🚫 Pesan dari @{username} dilewati (Excluded).")
            else:
                await client.send_read_acknowledge(event.chat_id)

                # Jika ada di daftar silent, jangan tampilkan di terminal
                if username_check in SILENT_CHATS:
                    return  

                print(f"{timestamp} ✅ Auto-read pesan dari {getattr(chat, 'title', username or 'Private Chat')}")

        print("[Aldi Was Here] - Bot berjalan... (Tekan CTRL+C untuk berhenti) @aldirobot")
        await client.run_until_disconnected()

if __name__ == "__main__":
    asyncio.run(autoread())

Aldi was Here