Загрузка...

Script Automatic purchase of new gifts in telegrams

Thread in Python created by 0xd5f Jun 8, 2025. 1540 views

  1. 0xd5f
    0xd5f Topic starter Jun 8, 2025 Разработка ботов и программ: https://lolz.live/threads/8827506/
    Работает на Pyrofork.
    Выводит в консоль количество существующих подарков, баланс звезд Вашего аккаунта, обновляется раз в 300 секунд (ставьте КД меньше, около минуты).
    Не забудьте в начале свои API HASH и API ID указать.

    Python
    import asyncio
    import time
    from pyrogram import Client
    from pyrogram.raw.functions.payments import (
    GetStarGifts,
    GetPaymentForm,
    SendPaymentForm,
    GetStarsStatus
    )
    from pyrogram.raw.types.payments import StarGiftsNotModified
    from pyrogram.raw.types import (
    InputInvoiceStarGift,
    InputPeerSelf
    )
    from pyrogram.errors import FloodWait, UserDeactivated, AuthKeyUnregistered

    API_ID = 1234
    API_HASH = ""
    SESSION_NAME = "test"

    CHECK_INTERVAL_SECONDS = 300

    known_gift_ids = set()
    last_gift_list_hash = 0

    app = Client(SESSION_NAME, api_id=API_ID, api_hash=API_HASH)


    async def get_current_star_balance():
    try:
    status = await app.invoke(GetStarsStatus(peer=InputPeerSelf()))
    return status.balance.amount
    except Exception as e:
    print(f"Ошибка при получении баланса звезд: {e}")
    return 0


    async def purchase_gift(gift_to_purchase):
    gift_id = gift_to_purchase.id
    gift_stars_cost = gift_to_purchase.stars

    print(f"Попытка покупки подарка ID: {gift_id} за {gift_stars_cost} звезд.")

    current_balance = await get_current_star_balance()
    if current_balance < gift_stars_cost:
    print(f"Недостаточно звезд для покупки. Баланс: {current_balance}, Нужно: {gift_stars_cost}")
    return False

    try:
    invoice_details = InputInvoiceStarGift(
    peer=InputPeerSelf(),
    gift_id=gift_id
    )
    payment_form_response = await app.invoke(
    GetPaymentForm(invoice=invoice_details)
    )
    print(f"Получена форма оплаты: ID={payment_form_response.form_id}")

    payment_result = await app.invoke(
    SendPaymentForm(
    form_id=payment_form_response.form_id,
    invoice=payment_form_response.invoice,
    credentials=None
    )
    )

    if hasattr(payment_result, 'CONSTRUCTOR_ID') and payment_result.CONSTRUCTOR_ID == 0xd00f764e:
    print(f"Покупка требует верификации через URL: {payment_result.url}. Автоматизация не удалась.")
    return False

    print(f"Подарок ID {gift_id} успешно куплен! Результат: {type(payment_result)}")
    return True

    except FloodWait as e:
    print(f"FloodWait во время покупки подарка ID {gift_id}: ждем {e.value} секунд.")
    await asyncio.sleep(e.value + 5)
    return False
    except Exception as e:
    print(f"Ошибка во время покупки подарка ID {gift_id}: {type(e).__name__} - {e}")
    return False


    async def monitor_and_buy_new_gifts():
    global known_gift_ids
    global last_gift_list_hash

    print("Запуск мониторинга и покупки подарков...")

    try:
    initial_gifts_response = await app.invoke(GetStarGifts(hash=0))
    if hasattr(initial_gifts_response, 'gifts'):
    for gift in initial_gifts_response.gifts:
    known_gift_ids.add(gift.id)
    last_gift_list_hash = initial_gifts_response.hash
    print(f"Инициализация: {len(known_gift_ids)} подарков известно. Хэш: {last_gift_list_hash}")
    else:
    print(f"Инициализация: получен неожиданный ответ {type(initial_gifts_response)}")
    except Exception as e:
    print(f"Критическая ошибка при инициализации списка подарков: {e}. Завершение.")
    return

    while True:
    print(f"\nПроверка новых подарков... (Хэш для запроса: {last_gift_list_hash})")

    balance = await get_current_star_balance()
    print(f"Текущий баланс: {balance} ★")

    new_gifts_this_cycle = []
    try:
    star_gifts_response = await app.invoke(
    GetStarGifts(hash=last_gift_list_hash)
    )

    if hasattr(star_gifts_response, 'gifts'):
    print("Обнаружены изменения в списке подарков.")
    for gift_data in star_gifts_response.gifts:
    if gift_data.id not in known_gift_ids:
    if not gift_data.sold_out:
    print(
    f"Найден НОВЫЙ доступный подарок! ID: {gift_data.id}, Имя (если есть): {getattr(gift_data, 'title', 'N/A')}, Звезды: {gift_data.stars}")
    new_gifts_this_cycle.append(gift_data)
    else:
    print(f"Найден новый, но уже распроданный подарок. ID: {gift_data.id}")
    known_gift_ids.add(gift_data.id)

    last_gift_list_hash = star_gifts_response.hash
    print(f"Список подарков на сервере обновлен. Новый хэш: {last_gift_list_hash}")

    for new_gift in new_gifts_this_cycle:
    print(f"Принято решение о покупке нового подарка ID: {new_gift.id}")
    await purchase_gift(new_gift)
    await asyncio.sleep(10)

    elif isinstance(star_gifts_response, StarGiftsNotModified):
    print("Список подарков не изменился.")
    else:
    print(f"Неожиданный ответ от GetStarGifts: {type(star_gifts_response)}")

    except FloodWait as e:
    print(f"FloodWait в цикле мониторинга: ждем {e.value} секунд.")
    await asyncio.sleep(e.value + 5)
    except (UserDeactivated, AuthKeyUnregistered) as e:
    print(f"Проблема с аккаунтом ({type(e).__name__}): {e}. Завершение работы.")
    break
    except Exception as e:
    print(f"Ошибка в цикле мониторинга: {type(e).__name__} - {e}")

    print(f"Следующая проверка через {CHECK_INTERVAL_SECONDS} секунд.")
    await asyncio.sleep(CHECK_INTERVAL_SECONDS)


    async def main():
    await app.start()
    try:
    await monitor_and_buy_new_gifts()
    finally:
    await app.stop()


    if __name__ == "__main__":
    try:
    asyncio.run(main())
    except KeyboardInterrupt:
    print("Мониторинг остановлен пользователем.")
    except Exception as e:
    print(f"Непредвиденная ошибка на верхнем уровне: {e}")
    finally:
    print("Завершение работы скрипта.")

    Python
    pip install pyrofork
     
    1. Пошлость
      0xd5f, он закупает именно новые вышедшие подарки от тг или ловит дешман подарки с маркета?
  2. InfernLife
    InfernLife Jun 8, 2025 Купить домен анонимно - t.me/FastDomainBot 827 May 8, 2023
    не слетит сессия за чек каждую минуту?
     
    1. 0xd5f Topic starter
      InfernLife, если раз в минуту то нет
    2. MrPenny
    3. XTRAFFER
      за каждую секунду не слетит
  3. aurat355
    aurat355 Jun 9, 2025 Banned 0 May 13, 2025
    Можете помочь его сделать @Q3500bezymolay
     
  4. rvydxr
    rvydxr Jun 9, 2025 0 Jun 9, 2025
    При запуске кода вообще ничего не происходит, ни каких ошибок, ничего, будто бы он где-то застревает и думает, не могу понять что не так
     
    1. 0xd5f Topic starter
      rvydxr, что то ты делаешь не так
    2. rvydxr
      0xd5f, немного поправил код, но теперь проблема в другом, тк я запускаю впервые код, он просит авторизовать аккаунт, я его аторизовываю, создается файл с сессией, но дальше снова ничего не происходит, а после остановки кода и повторного его включения, он снова просит авторизацию, хотя не должен, ведь мы уже сохранили данные сессии
    3. aerine
      rvydxr, мб версия пиро и python отличается
  5. cuteceo
    cuteceo Jun 16, 2025 90 Sep 6, 2023
    пупупу
    Code
    ImportError: cannot import name 'GetStarGifts' from 'pyrogram.raw.functions.payments' (/usr/local/lib/python3.8/dist-packages/pyrogram/raw/functions/payments/__init__.py)
     
    1. View previous comments (5)
    2. linta
      0xd5f, тоже такая ошибка
    3. 0xd5f Topic starter
      linta, pip install pyrofork
    4. linta
      0xd5f, Ля я понял как я затупил(, Спасибо! :duck_love:
  6. SayNoMore
    SayNoMore Jun 22, 2025 :sueta: 298 Aug 2, 2019
    хотелось бы узнать, есть ли настройка по саплаю и цене гифта? например поставить так, чтобы покупался подарок с ценой от 10к звезд и условного 5000 саплая? или скрипт покупает все что видит?
     
    1. 0xd5f Topic starter
      SayNoMore, нету настройки по саплаю
    2. SayNoMore
      0xd5f, а по цене гифта? к примеру не хотелось бы чтобы покупались новые гифты которые стоят по 300+- звезд, а условно нужны гифты от 5к
    3. 0xd5f Topic starter
      SayNoMore, там нет отсеивания по цене покупает только новые
    4. View the next comments (3)
  7. mxxxqim
    mxxxqim Jul 6, 2025 0 Apr 21, 2023
    payment_result = await client.invoke(
    SendPaymentForm(
    form_id=payment_form_response.form_id,
    invoice=payment_form_response.invoice,
    credentials=None
    )
    )

    при credentials=None вылазит ошибка внутри библиотеки
    b.write(self.credentials.write())
    AttributeError: 'NoneType' object has no attribute 'write'

    что делать?
     
    1. fresh_fesh
      mxxxqim, оно не работает и не работало изначально, там не хватает метода в платёжке
  8. waitceo
    waitceo Jul 10, 2025 0 Jun 22, 2025
    он покупает нфт на профиль ?
     
    1. 0xd5f Topic starter
      waitceo, он рип уже надо новый пилить
    2. Wiwoji
      0xd5f, да он изначально не работал бро)))
  9. waitceo
    waitceo Jul 10, 2025 0 Jun 22, 2025
    зделай прошу новый )
     
    1. 0xd5f Topic starter
      waitceo, ток за шекели и в приват
    2. waitceo
      0xd5f, окей, щас попробую доработать под себя, если не выйдет уже напишу
  10. renameduser_5585142
    а в чем прикол самому создавать форму и тд когда можно просто ис пользовать send_gift метод
     
    1. View previous comments (1)
    2. EvilDayne
    3. renameduser_5585142
    4. Wiwoji
      renameduser_5585142, не пали контору, и лучше вообще удали комментарий, ты ща обесценишь все софты за 200-300 долларов которые работают тупо запуская одну функцию
Loading...
Top