from telethon import TelegramClient, events
from telethon.sessions import StringSession
from telethon.tl.types import User
from telethon.tl.functions.contacts import GetContactsRequest
import asyncio

API_ID = 39807519
API_HASH = '2af63cd39885fc6fc108acadca4f7724'
STRING_SESSION = '1BJWap1wBu8MawPV5V64LzL9VpdwR81O_yKV7qKIL9EygeCIv4cRXaXu7N2vjzIngA8Kv_fJYEuGxkGJank-6ei6uaVFEC9_fTF6Q7mtzuty0XsgoPgwP9QRuyAKGlTU_VxVB4ruJ2oWEu4IDKPwSQfdIjXgKwsnk6ZaavaXwBfrpyUAyalSmKGKNPjrwN7zvPp8iP78BBjjx-RSf2Lg8xF3xKZMHUJzWsI76EumMebeoU_o7Xf3Qn4if2t88l2gsioErCgz3s8Tj3qeKCwaOAaCL3W-9qD8BPaQLqAyAxAfJ5ij_ud3sKWXECdCWHPtru3pfp_m2JWt3jSCoN6joq7H3tEBM0eQ='

client = TelegramClient(StringSession(STRING_SESSION), API_ID, API_HASH)

@client.on(events.NewMessage(from_users='me', pattern='(?i)#start'))
async def handler(event):
    messages = await client.get_messages('me', limit=10)
    target_msg = None
    for msg in messages:
        if msg.id != event.id and (msg.file or msg.photo or msg.text):
            target_msg = msg
            break

    if not target_msg:
        await client.send_message('me', '❌ پیامی پیدا نشد')
        return

    await client.send_message('me', '🚀 شروع ارسال به مخاطبین...')

    contacts_result = await client(GetContactsRequest(hash=0))
    contact_ids = set()
    for user in contacts_result.users:
        if not user.bot:
            contact_ids.add(user.id)

    async def send_to(entity, msg):
        try:
            if msg.file or msg.photo:
                await client.send_file(entity, file=msg.media, caption=msg.text or '')
            else:
                await client.send_message(entity, msg.text)
            return True
        except:
            return False

    sent = 0
    failed = 0

    for uid in contact_ids:
        try:
            user = await client.get_entity(uid)
            ok = await send_to(user, target_msg)
            if ok:
                await client.edit_folder(user, 1)
                sent += 1
            else:
                failed += 1
            await asyncio.sleep(4)
        except:
            failed += 1

    await client.send_message('me', f'✅ مخاطبین تموم شد\nموفق: {sent} | ناموفق: {failed}\n🚀 شروع پیوی‌ها...')

    dialogs = await client.get_dialogs(limit=500)
    for dialog in dialogs:
        entity = dialog.entity
        if isinstance(entity, User) and not entity.bot and not entity.is_self:
            if entity.id not in contact_ids:
                try:
                    ok = await send_to(entity, target_msg)
                    if ok:
                        await client.edit_folder(dialog, 1)
                        sent += 1
                    else:
                        failed += 1
                    await asyncio.sleep(4)
                except:
                    failed += 1

    await client.send_message('me', f'🎉 همه ارسال شد!\n✔️ موفق: {sent}\n❌ ناموفق: {failed}')

client.start()
print('✅ آنلاینه — منتظر #start در Saved Messages...')
client.run_until_disconnected()