Telegram TagAll
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:
Kalau belum ada, install dulu:
- Linux (Ubuntu/Debian/Xubuntu/Lubuntu)
- 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:
Kalo aku ga pakai sih
3️⃣ Install Telethon
Telethon itu library Python buat Telegram API.
kalau ga bisa, paksa aja
4️⃣ Ambil API ID & API Hash dari Telegram
- Buka Telegram Developer Portal
- Login pakai nomor Telegram kamu.
- Klik "Create New Application", terus tinggal isi:
- App title: Bebas (contoh: AutoReadBot)
- Short name: Bebas (contoh: autoread)
- Platform: Desktop
- 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 tag.py
dan tempelkan kode berikut:
MENUJU KODE
6️⃣ Jalankan Bot
Buka terminal atau command prompt, lalu jalankan:
Kalau ini pertama kali, biasanya dimintai Login pakai kode OTP.
Setelah login, bot akan Aktif.
TENANG, Script ini aman kok soalnya pakai API Telegram Resmi.
codespace
INI SCRIPTNYA YA!
TagAll
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | import asyncio
from telethon import TelegramClient, events, Button
from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl.types import ChannelParticipantsSearch, PeerChannel
from datetime import datetime
import pytz
api_id = pakai_api_id_kamu
api_hash = 'pakai_api_hash_kamu'
phone_number = '+62xxxx'
AKUN_KU = "username_kamu_ya"
client = TelegramClient('session_name', api_id, api_hash)
async def get_all_groups():
dialogs = await client.get_dialogs()
return [d for d in dialogs if d.is_group]
async def get_all_usernames(group):
users = []
offset = 0
limit = 100
while True:
result = await client(GetParticipantsRequest(
channel=group,
filter=ChannelParticipantsSearch(''),
offset=offset,
limit=limit,
hash=0
))
if not result.users:
break
for user in result.users:
if user.username and user.username != AKUN_KU:
users.append(user.username)
offset += len(result.users)
return users
def split_text(text, max_len=4096):
return [text[i:i + max_len] for i in range(0, len(text), max_len)]
def get_waktu_wib():
wib = pytz.timezone('Asia/Jakarta')
now = datetime.now(wib)
hari = now.strftime('%A')
hari_map = {
'Monday': 'Senin', 'Tuesday': 'Selasa', 'Wednesday': 'Rabu',
'Thursday': 'Kamis', 'Friday': 'Jumat', 'Saturday': 'Sabtu', 'Sunday': 'Minggu'
}
hari_indo = hari_map.get(hari, hari)
return f"🕒 {hari_indo}, {now.strftime('%d-%m-%Y %H:%M:%S')} WIB"
@client.on(events.NewMessage(incoming=True, pattern=r'^@all(?:\s.*)?$'))
@client.on(events.NewMessage(outgoing=True, pattern=r'^@all(?:\s.*)?$'))
async def handle_all_command(event):
sender = await event.get_sender()
chat = await event.get_chat()
if not event.is_group:
await event.reply("❌ Perintah ini hanya bisa digunakan di grup.")
return
is_admin = False
try:
perms = await client.get_permissions(chat, sender.id)
is_admin = perms.is_admin or perms.is_creator
except:
is_admin = False
me = await client.get_me()
# Kalau yang kirim bukan bot dan dia bukan admin, tolak
if sender.id != me.id:
if not is_admin:
await event.reply(f"Hey @{sender.username or sender.first_name}, kamu bukan admin, gak boleh pakai tagall")
return
isi_pengumuman = event.raw_text[5:].strip()
usernames = await get_all_usernames(chat)
mention_lines = [f"- @{u}" for u in usernames]
mention_text = "\n".join(mention_lines)
sender_username = f"@{sender.username}" if sender.username else sender.first_name
# Cek permission bot di grup itu
try:
my_perms = await client.get_permissions(chat, me.id)
can_delete = my_perms.is_admin and my_perms.delete_messages
except:
can_delete = False
if isi_pengumuman:
# Kirim format pengumuman lengkap
full_text = (
"📢 **PENGUMUMAN!**\n"
"./Tagall\n\n"
f"📝 Isi Pengumuman:\n{isi_pengumuman}\n\n"
"👥 Memanggil Semua Anggota:\n"
f"{mention_text}\n\n"
f"📣 Admin yang memanggil:\n{sender_username}\n"
f"{get_waktu_wib()}"
)
if sender.id != me.id and not can_delete:
full_text += (
"\n\n**ℹ Aku bukan admin, jadi pesan admin tetap ada. "
"Aku bisa otomatis hapus pesan admin dan menggantikannya dengan tagall, "
"tapi aku perlu izin admin terlebih dahulu. "
"Kalau aku sudah jadi admin, mungkin izin \"delete message\" dimatikan untukku, "
"silahkan aktifkan terlebih dahulu.**"
)
pesan_terbagi = split_text(full_text)
pesan_utama = await client.send_message(
chat,
pesan_terbagi[0],
buttons=[Button.inline("↩ Balas Pengumuman", b"reply_pengumuman")]
)
for part in pesan_terbagi[1:]:
await asyncio.sleep(2.5)
await client.send_message(chat, part, reply_to=pesan_utama.id)
else:
# Kirim tagall aja tanpa embel-embel
tagall_aja = mention_text or "⚠️ Gak ada username yang bisa disebut."
await client.send_message(chat, tagall_aja)
print(f"✅ Tagall dikirim oleh {sender_username}")
await event.delete()
@client.on(events.NewMessage(pattern='/listgroups', outgoing=True))
async def list_groups(event):
groups = await get_all_groups()
if not groups:
await event.respond("❌ Gak ada grup yang ditemukan.")
return
text = "**Daftar Grup Kamu:**\n"
for g in groups:
text += f"- {g.name}\n"
await event.respond(text)
@client.on(events.CallbackQuery(data=b'reply_pengumuman'))
async def reply_button(event):
await event.answer("Silakan balas pengumuman ini langsung.", alert=False)
client.start(phone=phone_number)
print("🟢 [Aldi Was Here] - Bot berjalan... siap jalankan perintah! (Tekan CTRL+C untuk berhenti) @aldirobot")
client.run_until_disconnected()
|