Spaces:
Running
Running
# Copyright (C) 2019-2025 TeamKillerX <https://github.com/TeamKillerX> | |
# | |
# This file is part of TeamKillerX project, | |
# and licensed under GNU Affero General Public License v3. | |
# See the GNU Affero General Public License for more details. | |
# | |
# All rights reserved. See COPYING, AUTHORS. | |
# | |
import io | |
import os | |
import sys | |
import traceback | |
import re | |
import httpx | |
import asyncio | |
import logging | |
from pyrogram import * | |
from pyrogram.enums import MessageEntityType, ChatMemberStatus | |
from pyrogram.errors import ChannelPrivate, ImageProcessFailed | |
from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton | |
from config import * | |
from database import db | |
from helper_regex import * | |
logging.basicConfig( | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", | |
level=logging.INFO, | |
datefmt="%Y-%m-%d %H:%M:%S", | |
) | |
logging.getLogger("pyrogram").setLevel(logging.WARNING) | |
eval_regex = r"^(\.e(?:val)?|\.exec|\.sh|\.term|\.python|\.ex|\.bash|\.ls)(\s|$)" | |
bot = Client( | |
"antibot", | |
api_id=API_ID, | |
api_hash=API_HASH, | |
bot_token=BOT_TOKEN, | |
) | |
def has_code_entity(message): | |
if not message.entities: | |
return False | |
for entity in message.entities: | |
if entity.type == MessageEntityType.PRE: | |
return True | |
return False | |
async def deletepastecb(client, cb): | |
paste_id = cb.matches[0].group(1) | |
user_id = cb.from_user.id | |
if user_id != 6477856957: | |
return await cb.answer("β Hanya developer", show_alert=True) | |
await delete_paste(paste_id) | |
await cb.message.edit_text(f"β Paste ID telah dihapus.") | |
async def unwarn_button(client, callback_query): | |
user_id = int(callback_query.matches[0].group(1)) | |
chat_id = int(callback_query.matches[0].group(2)) | |
from_user = callback_query.from_user | |
try: | |
member = await client.get_chat_member(chat_id, from_user.id) | |
if member.status not in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
await callback_query.answer("β Hanya admin yang bisa menghapus peringatan!", show_alert=True) | |
return | |
except Exception: | |
await callback_query.answer("β οΈ Gagal memverifikasi status admin.", show_alert=True) | |
return | |
warn_data = await db.warns.find_one({"chat_id": chat_id, "user_id": user_id}) | |
if not warn_data: | |
await callback_query.answer("β οΈ Tidak ada peringatan untuk user ini.", show_alert=True) | |
await callback_query.message.delete() | |
return | |
await db.warns.delete_one({"chat_id": chat_id, "user_id": user_id}) | |
await callback_query.message.edit_text(f"β Peringatan untuk <code>[{user_id}]</code> telah dihapus.") | |
async def warn_button(client, callback_query): | |
user_id = int(callback_query.matches[0].group(1)) | |
chat_id = int(callback_query.matches[0].group(2)) | |
from_user = callback_query.from_user | |
try: | |
member = await client.get_chat_member(chat_id, from_user.id) | |
if member.status not in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
await callback_query.answer("β Hanya admin yang bisa memberikan peringatan!", show_alert=True) | |
return | |
except Exception: | |
await callback_query.answer("β οΈ Gagal memverifikasi status admin.", show_alert=True) | |
return | |
warn_data = await db.warns.find_one({"chat_id": chat_id, "user_id": user_id}) | |
warn_count = 1 | |
if warn_data: | |
warn_count = warn_data.get("count", 0) + 1 | |
await db.warns.update_one( | |
{"chat_id": chat_id, "user_id": user_id}, | |
{"$set": {"count": warn_count}}, | |
upsert=True | |
) | |
else: | |
await db.warns.insert_one({ | |
"chat_id": chat_id, | |
"user_id": user_id, | |
"count": warn_count | |
}) | |
if warn_count >= 3: | |
try: | |
await client.ban_chat_member(chat_id, user_id) | |
await callback_query.message.reply_text( | |
f"π« User <code>{user_id}</code> telah dihapus setelah 3 kali peringatan.", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unban", callback_data=f"unban_{user_id}_{chat_id}" | |
) | |
] | |
] | |
) | |
) | |
await db.warns.delete_one({"chat_id": chat_id, "user_id": user_id}) | |
except Exception as e: | |
await callback_query.message.reply_text(f"Gagal menghapus user: {e}") | |
else: | |
await callback_query.answer(f"β οΈ Peringatan ke {warn_count} diberikan.", show_alert=True) | |
async def unban_button(client, callback_query): | |
user_id = int(callback_query.matches[0].group(1)) | |
chat_id = int(callback_query.matches[0].group(2)) | |
from_user = callback_query.from_user | |
try: | |
member = await client.get_chat_member(chat_id, from_user.id) | |
if member.status not in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
await callback_query.answer("β Hanya admin yang bisa menghapus larangan!", show_alert=True) | |
return | |
except Exception: | |
await callback_query.answer("β οΈ Gagal memverifikasi status admin.", show_alert=True) | |
return | |
try: | |
await client.unban_chat_member(chat_id, user_id) | |
await callback_query.message.reply_text( | |
f"β User <code>{user_id}</code> telah dihapus dari larangan." | |
) | |
except Exception as e: | |
await callback_query.message.reply_text(f"Gagal menghapus larangan: {e}") | |
async def warn(client, message): | |
member = await client.get_chat_member(message.chat.id, message.from_user.id) | |
if member.status not in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return await message.reply_text("β Hanya admin yang bisa memberikan peringatan!") | |
user_id = None | |
if message.reply_to_message and message.reply_to_message.from_user: | |
user_id = message.reply_to_message.from_user.id | |
elif len(message.command) == 2: | |
try: | |
user_id = int(message.command[1]) | |
except ValueError: | |
return await message.reply_text("GAK ADA USER ID NYA? GIMANA NARIK BOT KE GRUP LU?") | |
else: | |
return await message.reply_text("β Format salah. Balas pesan atau kirim /warn [user_id]") | |
if user_id == client.me.id: | |
return await message.reply_text("GAK BISA WARN BOT SENDIRI! GIMANA NARIK BOT KE GRUP LU?") | |
try: | |
get_user = await client.get_users(user_id) | |
except Exception: | |
return await message.reply_text("β User tidak ditemukan.") | |
get_data = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_data and user_id in get_data.get("whitelist_user", []): | |
return await message.reply_text("GAK BISA WARN USER YANG SUDAH DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
member_admin = await client.get_chat_member(message.chat.id, get_user.id) | |
if member_admin.status == ChatMemberStatus.BANNED: | |
return await message.reply_text("GAK BISA WARN USER YANG SUDAH DI BANNED! GIMANA NARIK BOT KE GRUP LU?") | |
if member_admin.status in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return await message.reply_text("GAK BISA WARN ADMIN! GIMANA NARIK BOT KE GRUP LU?") | |
try: | |
warn_data = await db.warns.find_one({"chat_id": message.chat.id, "user_id": user_id}) | |
warn_count = 1 | |
if warn_data: | |
warn_count = warn_data.get("count", 0) + 1 | |
await db.warns.update_one( | |
{"chat_id": message.chat.id, "user_id": user_id}, | |
{"$set": {"count": warn_count}}, | |
upsert=True | |
) | |
else: | |
await db.warns.insert_one({ | |
"chat_id": message.chat.id, | |
"user_id": user_id, | |
"count": warn_count | |
}) | |
if warn_count >= 3: | |
await client.ban_chat_member(message.chat.id, user_id) | |
await message.reply_text( | |
f"π« User <code>[{user_id}]</code> telah dihapus setelah 3 kali peringatan.", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unban", callback_data=f"unban_{user_id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
await db.warns.delete_one({"chat_id": message.chat.id, "user_id": user_id}) | |
return | |
else: | |
await message.reply_text( | |
f"β οΈ Peringatan {warn_count}/3 untuk <code>[{user_id}]</code>\n\n" | |
f"Alasan: <code>SPAMMER</code>", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unwarn", callback_data=f"unwarn_{user_id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
return | |
except Exception as e: | |
logging.error(f"Error adding warning: {e}") | |
await message.reply_text( | |
"GAGAL MEMBERIKAN PERINGATAN! CEK LAGI USER ID NYA!" | |
) | |
async def delwarn(client, message): | |
member = await client.get_chat_member(message.chat.id, message.from_user.id) | |
if member.status not in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return await message.reply_text("β Hanya admin yang bisa menghapus peringatan!") | |
user_id = None | |
if message.reply_to_message and message.reply_to_message.from_user: | |
user_id = message.reply_to_message.from_user.id | |
elif len(message.command) == 2: | |
try: | |
user_id = int(message.command[1]) | |
except ValueError: | |
return await message.reply_text("β USER ID tidak valid.") | |
else: | |
return await message.reply_text("β Format salah. Balas pesan atau kirim /delwarn [user_id]") | |
if user_id == client.me.id: | |
return await message.reply_text("GAK BISA HAPUS PERINGATAN BOT SENDIRI! GIMANA NARIK BOT KE GRUP LU?") | |
get_data = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_data and user_id in get_data.get("whitelist_user", []): | |
return await message.reply_text("GAK BISA HAPUS PERINGATAN USER YANG SUDAH DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
try: | |
get_user = await client.get_users(user_id) | |
except Exception: | |
return await message.reply_text("β User tidak ditemukan.") | |
member_admin = await client.get_chat_member(message.chat.id, get_user.id) | |
if member_admin.status == ChatMemberStatus.BANNED: | |
return await message.reply_text("β GAK BISA HAPUS PERINGATAN USER YANG SUDAH DI BANNED!") | |
if member_admin.status in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return await message.reply_text("β GAK BISA HAPUS PERINGATAN ADMIN!") | |
try: | |
warn_data = await db.warns.find_one({"chat_id": message.chat.id, "user_id": user_id}) | |
if not warn_data: | |
return await message.reply_text("β οΈ Tidak ada peringatan untuk user ini.") | |
await db.warns.delete_one({"chat_id": message.chat.id, "user_id": user_id}) | |
await message.reply_text("β Berhasil menghapus semua peringatan.") | |
except Exception as e: | |
logging.error(f"Error removing all warnings: {e}") | |
await message.reply_text("β Gagal menghapus peringatan. Cek lagi user ID-nya.") | |
async def broadcasts(client, message): | |
DEVS = [1191668125] | |
data = await db.antieval.find_one({"bot_id": client.me.id}) | |
if not data or not data.get("user_id"): | |
return await message.reply("Data tidak ditemukan atau kosong.") | |
if not message.reply_to_message: | |
return await message.reply("Silakan balas ke pesan yang ingin disebarkan.") | |
msg = message.reply_to_message | |
done = 0 | |
error = 0 | |
private_users = set() | |
for user in data["user_id"]: | |
if user in DEVS: | |
continue | |
try: | |
await msg.forward(user) | |
done += 1 | |
except Exception: | |
private_users.add(user) | |
error += 1 | |
if private_users: | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$pull": {"user_id": {"$in": list(private_users)}}}, | |
) | |
await message.reply_text( | |
f"β Berhasil dikirim ke `{done}` user.\n" | |
f"β Gagal ke `{error}` user:\n`{list(private_users)}`" | |
) | |
async def start_command(client, message): | |
reply_markup = InlineKeyboardMarkup( # type: ignore | |
[ | |
[ | |
InlineKeyboardButton( # type: ignore | |
"Add to Your Group", url=f"https://t.me/{client.me.username}?startgroup=true&admin=manage_chat+change_info+post_messages+edit_messages+delete_messages+invite_users+restrict_members+pin_messages+promote_members+manage_video_chats+anonymous=false" | |
) | |
] | |
] | |
) | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$addToSet": {"user_id": message.from_user.id}}, | |
upsert=True, | |
) | |
await client.send_message( | |
-1001589752824, | |
"Anti Eval Bot (Start) Logs\n\n" | |
f"First Name: {message.from_user.mention}\n" | |
f"UserID: `{message.from_user.id}`\n" | |
f"Username: `{message.from_user.username if message.from_user else None}`\n", | |
reply_markup=InlineKeyboardMarkup([[ | |
InlineKeyboardButton("π View User", url=f"tg://openmessage?user_id={message.from_user.id}") | |
]]) | |
) | |
await message.reply_text( | |
f""" | |
π **Welcome to Anti Eval Guard!** | |
π« Bot ini dibuat khusus untuk **melindungi grup Telegram dari eval code, promosi gelap, dan kata kasar.** Cocok buat komunitas developer, server publik, atau grup pribadi yang ingin bersih dari spam! | |
π‘οΈ **FITUR UTAMA:** | |
β’ Deteksi & hapus otomatis kode berbahaya (Python, JS, SH, PHP, DLL) | |
β’ Blokir teks promosi seperti "jasa hack", "jual akun", dll | |
β’ Filter kata kasar, toxic, dan rasis (Indo) | |
β’ Inline, forward, bahkan markdown tak bisa lolos | |
β’ Support AI powered moderation (v2) | |
π₯ **Note:** Pastikan bot jadi **admin** dan punya izin `Delete`, `Ban`, `Restrict` agar fitur bekerja maksimal! | |
π Powered by Ryzenth API β sistem AI moderasi canggih & cepat. | |
""", | |
reply_markup=reply_markup | |
) | |
async def addwhitelist(client, message): | |
if message.from_user.id not in [6477856957]: | |
return await message.reply_text("LU SIAPA? GAK ADA IZIN GUE!") | |
if len(message.command) != 2: | |
return await message.reply_text("GAK ADA USER ID NYA? GIMANA NARIK BOT KE GRUP LU?") | |
user_id = int(message.command[1]) | |
try: | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_user and user_id in get_user.get("whitelist_user", []): | |
return await message.reply_text("USER ID NYA SUDAH ADA DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$addToSet": {"whitelist_user": user_id}}, | |
upsert=True, | |
) | |
await message.reply_text( | |
"berhasil menambahkan user ke whitelist" | |
) | |
return | |
except Exception as e: | |
logging.error(f"Error adding user to whitelist: {e}") | |
await message.reply_text( | |
"GAGAL MENAMBAHKAN USER KE WHITELIST! CEK LAGI USER ID NYA!" | |
) | |
async def delwhitelist(client, message): | |
if message.from_user.id not in [6477856957]: | |
return await message.reply_text("LU SIAPA? GAK ADA IZIN GUE!") | |
if len(message.command) != 2: | |
return await message.reply_text("GAK ADA USER ID NYA? GIMANA NARIK BOT KE GRUP LU?") | |
user_id = int(message.command[1]) | |
try: | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if not get_user or user_id not in get_user.get("whitelist_user", []): | |
return await message.reply_text("GAK ADA USER ID NYA DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$pull": {"whitelist_user": user_id}}, | |
upsert=True, | |
) | |
await message.reply_text( | |
"berhasil menghapus user dari whitelist" | |
) | |
return | |
except Exception as e: | |
logging.error(f"Error removing user from whitelist: {e}") | |
await message.reply_text( | |
"GAGAL MENGHAPUS USER DARI WHITELIST! CEK LAGI USER ID NYA!" | |
) | |
async def addwhitelistbot(client, message): | |
if message.from_user.id not in [6477856957]: | |
return await message.reply_text("LU SIAPA? GAK ADA IZIN GUE!") | |
if len(message.command) != 2: | |
return await message.reply_text("GAK ADA USER ID NYA? GIMANA NARIK BOT KE GRUP LU?") | |
user_id = int(message.command[1]) | |
try: | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_user and user_id in get_user.get("whitelist_bot", []): | |
return await message.reply_text("USER ID NYA SUDAH ADA DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$addToSet": {"whitelist_bot": user_id}}, | |
upsert=True, | |
) | |
await message.reply_text( | |
"berhasil menambahkan bot ke whitelist" | |
) | |
return | |
except Exception as e: | |
logging.error(f"Error adding bot to whitelist: {e}") | |
await message.reply_text( | |
"GAGAL MENAMBAHKAN BOT KE WHITELIST! CEK LAGI USER ID NYA!" | |
) | |
async def delwhitelistbot(client, message): | |
if message.from_user.id not in [6477856957]: | |
return await message.reply_text("LU SIAPA? GAK ADA IZIN GUE!") | |
if len(message.command) != 2: | |
return await message.reply_text("GAK ADA USER ID NYA? GIMANA NARIK BOT KE GRUP LU?") | |
user_id = int(message.command[1]) | |
try: | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if not get_user or user_id not in get_user.get("whitelist_bot", []): | |
return await message.reply_text("GAK ADA USER ID NYA DI WHITELIST! GIMANA NARIK BOT KE GRUP LU?") | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$pull": {"whitelist_bot": user_id}}, | |
upsert=True, | |
) | |
await message.reply_text( | |
"berhasil menghapus bot dari whitelist" | |
) | |
return | |
except Exception as e: | |
logging.error(f"Error removing bot from whitelist: {e}") | |
await message.reply_text( | |
"GAGAL MENGHAPUS BOT DARI WHITELIST! CEK LAGI USER ID NYA!" | |
) | |
async def group_join(client, message): | |
try: | |
if message.new_chat_member and message.new_chat_member.user.id == client.me.id: | |
if message.chat.id in LEAVE_GROUP_LIST: | |
await client.leave_chat(message.chat.id) | |
await message.reply_text( | |
"GUA KELUAR DULU YA! LU TARIK BOT KE GRUP DEVELOPER YANG SUDAH DIBLACKLIST! π₯\n" | |
"GAK MALU APA TARIK BOT TAPI GAK TAU ATURAN?\n" | |
"INI BUKAN BOT PAJANGAN, INI BOT ANTI EVAL! π«π§ " | |
) | |
return | |
privileges = message.new_chat_member.privileges | |
if not privileges or not privileges.can_restrict_members or not privileges.can_delete_messages: | |
await client.send_message( | |
message.chat.id, | |
"GUA KELUAR DULU YA! LU NARIK BOT TAPI GAK KASIH IZIN BANNED! π₯\n" | |
"BIKIN BOT BUAT APA KALO CUMA JADI PAJANGAN?" | |
) | |
await client.leave_chat(message.chat.id) | |
logging.info(f"Left group: {message.chat.title} ({message.chat.id})") | |
return | |
await db.antieval.update_one( | |
{"bot_id": client.me.id}, | |
{"$addToSet": {"chat_id": message.chat.id}}, | |
upsert=True, | |
) | |
logging.info(f"Added to group: {message.chat.title} ({message.chat.id})") | |
except ChannelPrivate: | |
pass | |
async def block_inline_via_bot(client, message): | |
if message.via_bot: | |
check = (await client.get_chat_member(message.chat.id, client.me.id)).privileges | |
if not check or not check.can_restrict_members or not check.can_delete_messages: | |
await message.reply_text( | |
"GUA KELUAR DULU YA! LU NARIK BOT TAPI GAK KASIH IZIN BANNED! π₯\n" | |
"BIKIN BOT BUAT APA KALO CUMA JADI PAJANGAN?" | |
) | |
await client.leave_chat(message.chat.id) | |
logging.info(f"Left group: {message.chat.title} ({message.chat.id})") | |
return | |
get_user_bot = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_user_bot and message.via_bot.id in get_user_bot.get("whitelist_bot", []): | |
return | |
username = message.via_bot.username.lower() | |
if any(ok in username for ok in BLOCKED_INLINE_BOTS): | |
logging.info(f"Blocked inline via bot message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
if message.via_bot and "eval" in message.via_bot.username.lower(): | |
logging.info(f"Blocked inline via bot message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
if contains_stylish_with_whitelist(message.text): | |
logging.info(f"contains_stylish_with_whitelist: Blocked inline message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
if has_code_entity(message): | |
logging.info(f"has_code_entity: Blocked inline message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
try: | |
if is_blocked_markdown_code(message.text.markdown or ""): | |
logging.info(f"is_blocked_markdown_code: Blocked message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
except AttributeError: | |
pass | |
DISABLED_COMMANDS = [ | |
"delmodbot", | |
"addmodbot", | |
"delmoduser", | |
"addmoduser", | |
"start", | |
"delwarn", | |
] | |
async def markdown_code(client, message): | |
check = (await client.get_chat_member(message.chat.id, client.me.id)).privileges | |
if not check or not check.can_restrict_members or not check.can_delete_messages: | |
try: | |
await message.reply_text( | |
"GUA KELUAR DULU YA! LU NARIK BOT TAPI GAK KASIH IZIN BANNED! π₯\n" | |
"BIKIN BOT BUAT APA KALO CUMA JADI PAJANGAN?" | |
) | |
await client.leave_chat(message.chat.id) | |
logging.info(f"Left group: {message.chat.title} ({message.chat.id})") | |
return | |
except ChannelPrivate: | |
pass | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_user and message.from_user.id in get_user.get("whitelist_user", []): | |
return | |
if message.chat.id == -1001589752824: | |
return | |
if contains_stylish_with_whitelist(message.text): | |
logging.info(f"contains_stylish_with_whitelist: Blocked message from {message.from_user.first_name} in {message.chat.title}") | |
return await message.delete() | |
if has_code_entity(message): | |
member_admin = await client.get_chat_member(message.chat.id, message.from_user.id) | |
if member_admin.status in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return | |
logging.info(f"has_code_entity: Blocked message from {message.from_user.first_name} in {message.chat.title}") | |
warn = await db.warns.find_one({"chat_id": message.chat.id, "user_id": message.from_user.id}) | |
warn_count = 1 | |
if warn: | |
warn_count = warn.get("count", 0) + 1 | |
await db.warns.update_one( | |
{"chat_id": message.chat.id, "user_id": message.from_user.id}, | |
{"$set": {"count": warn_count}}, | |
upsert=True | |
) | |
else: | |
await db.warns.insert_one({ | |
"chat_id": message.chat.id, | |
"user_id": message.from_user.id, | |
"count": warn_count | |
}) | |
if warn_count >= 3: | |
await client.ban_chat_member(message.chat.id, message.from_user.id) | |
await message.reply_text( | |
f"π« User <code>[{message.from_user.id}]</code> telah dihapus setelah 3 kali peringatan.", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unban", callback_data=f"unban_{message.from_user.id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
await db.warns.delete_one({"chat_id": message.chat.id, "user_id": message.from_user.id}) | |
return | |
else: | |
await message.reply_text( | |
f"β οΈ Peringatan {warn_count}/3 untuk <code>[{message.from_user.id}]</code>\n\n" | |
f"Alasan: <code>SPAMMER</code>", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unwarn", callback_data=f"unwarn_{message.from_user.id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
await message.delete() | |
return | |
try: | |
if is_blocked_markdown_code(message.text.markdown or ""): | |
member_admin = await client.get_chat_member(message.chat.id, message.from_user.id) | |
if member_admin.status in {ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER}: | |
return | |
logging.info(f"is_blocked_markdown_code: Blocked message from {message.from_user.first_name} in {message.chat.title}") | |
warn = await db.warns.find_one({"chat_id": message.chat.id, "user_id": message.from_user.id}) | |
warn_count = 1 | |
if warn: | |
warn_count = warn.get("count", 0) + 1 | |
await db.warns.update_one( | |
{"chat_id": message.chat.id, "user_id": message.from_user.id}, | |
{"$set": {"count": warn_count}}, | |
upsert=True | |
) | |
else: | |
await db.warns.insert_one({ | |
"chat_id": message.chat.id, | |
"user_id": message.from_user.id, | |
"count": warn_count | |
}) | |
if warn_count >= 3: | |
await client.ban_chat_member(message.chat.id, message.from_user.id) | |
await message.reply_text( | |
f"π« User <code>[{message.from_user.id}]</code> telah dihapus setelah 3 kali peringatan.", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unban", callback_data=f"unban_{message.from_user.id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
await db.warns.delete_one({"chat_id": message.chat.id, "user_id": message.from_user.id}) | |
return | |
else: | |
await message.reply_text( | |
f"β οΈ Peringatan {warn_count}/3 untuk <code>[{message.from_user.id}]</code>\n\n" | |
f"Alasan: <code>SPAMMER</code>", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Unwarn", callback_data=f"unwarn_{message.from_user.id}_{message.chat.id}" | |
) | |
] | |
] | |
) | |
) | |
await message.delete() | |
return | |
except AttributeError: | |
pass | |
is_moderator, reason = check_anti_word_by_ryzenth(message.text) | |
if is_moderator: | |
logging.info(f"check_anti_word_by_ryzenth: Blocked message from {message.from_user.first_name} in {message.chat.title}") | |
full_reason = f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})" + reason | |
await message.reply_text(full_reason) | |
return await message.delete() | |
async def block_userbot_eval(client, message): | |
check = (await client.get_chat_member(message.chat.id, client.me.id)).privileges | |
if not check or not check.can_restrict_members or not check.can_delete_messages: | |
await message.reply_text( | |
"GUA KELUAR DULU YA! LU NARIK BOT TAPI GAK KASIH IZIN BANNED! π₯\n" | |
"BIKIN BOT BUAT APA KALO CUMA JADI PAJANGAN?" | |
) | |
await client.leave_chat(message.chat.id) | |
logging.info(f"Left group: {message.chat.title} ({message.chat.id})") | |
return | |
get_user = await db.antieval.find_one( | |
{"bot_id": client.me.id} | |
) | |
if get_user and message.from_user.id in get_user.get("whitelist_user", []): | |
return | |
logging.info(f"Blocked userbot message from {message.from_user.first_name} in {message.chat.title}") | |
await message.delete() | |
async def paste_text(text: str) -> str: | |
async with httpx.AsyncClient() as client: | |
response = await client.post("https://paste.rs/", content=text) | |
if response.status_code in (201, 206): | |
return response.text.strip() | |
else: | |
raise Exception(f"Paste failed: {response.status_code} - {response.text}") | |
async def delete_paste(paste_id: str) -> bool: | |
async with httpx.AsyncClient() as client: | |
response = await client.delete(f"https://paste.rs/{paste_id}") | |
return response.status_code == 200 | |
async def evaluation_cmd(client, message): | |
status_message = await message.reply("__Processing eval pyrogram...__") | |
try: | |
cmd = message.text.split(" ", maxsplit=1)[1] | |
except IndexError: | |
return await status_message.edit("__No evaluate message!__") | |
old_stderr = sys.stderr | |
old_stdout = sys.stdout | |
redirected_output = sys.stdout = io.StringIO() | |
redirected_error = sys.stderr = io.StringIO() | |
stdout, stderr, exc = None, None, None | |
try: | |
await aexec(cmd, client, message) | |
except ImageProcessFailed: # type: ignore | |
return await status_message.edit("Error ImageProcessFailed") | |
except Exception: | |
exc = traceback.format_exc() | |
stdout = redirected_output.getvalue() | |
stderr = redirected_error.getvalue() | |
sys.stdout = old_stdout | |
sys.stderr = old_stderr | |
evaluation = "" | |
if exc: | |
evaluation = exc | |
elif stderr: | |
evaluation = stderr | |
elif stdout: | |
evaluation = stdout | |
else: | |
evaluation = "Success" | |
final_output = f"**OUTPUT**:\n<pre language=''>{evaluation.strip()}</pre>" | |
if len(final_output) > 4096: | |
urls_paste = await paste_text(evaluation.strip()) | |
with open("eval.txt", "w+", encoding="utf8") as out_file: | |
out_file.write(final_output) | |
await status_message.reply_document( | |
document="eval.txt", | |
caption=f"<code>{cmd[: 4096 // 4 - 1]}</code>", | |
reply_markup=InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
"Pastebin", url=f"{urls_paste}" | |
), | |
InlineKeyboardButton( | |
"Delete Pastebin", callback_data=f"deletepaste_{urls_paste.split('/')[3]}" | |
), | |
] | |
] | |
), | |
disable_notification=True, | |
) | |
os.remove("eval.txt") | |
await status_message.delete() | |
else: | |
await status_message.edit_text(final_output) | |
async def aexec(code, client, message): | |
exec( | |
( | |
"async def __aexec(client, message):\n" | |
+ " import os\n" | |
+ " from database import db\n" | |
+ " randydev = message\n" | |
+ " message = event = randydev\n" | |
+ " r = reply = message.reply_to_message\n" | |
+ " chat = message.chat.id\n" | |
+ " c = client\n" | |
+ " to_photo = message.reply_photo\n" | |
+ " to_video = message.reply_video\n" | |
+ " p = print\n" | |
) | |
+ "".join(f"\n {l}" for l in code.split("\n")) | |
) | |
return await locals()["__aexec"](client, message) | |
async def main(): | |
await db.connect() | |
await bot.start() | |
me_user = await bot.get_me() | |
me_user = me_user.first_name | |
logging.info(f"Info Bot: user {me_user} started!") | |
await idle() | |
if __name__ == "__main__": | |
loop = asyncio.get_event_loop() | |
loop.run_until_complete(main()) |