Загрузка...

Working analogue of Lolzteam Alert

Thread in Extentions created by august Jul 2, 2024. (bumped Sep 13, 2024) 623 views

  1. august
    august Topic starter Jul 2, 2024 голые альтушки - https://lolz.live/threads/8317967/ 8746 Dec 8, 2021
    Приветствую всех! Думаю, многие сталкивались с проблемой запоздалых уведомлений от Lolzteam Alert (бота уведомлений от lolz). Я в том числе. Поэтому решил написать похожего бота и поделиться им с вами.
    Функционал бота:
    Получение всех уведомлений
    Получение вашего баланса/холда

    (в планах: действия с новой темой(ответ), сортировка уведомлений(все, маркет)

    Python 3.11.0 - скачать тут

    user_id в TG - тут
    API Token вашего бота - тут
    API Token Lolz(со всеми правами) - тут либо гайд
    В cmd:

    Code

    pip install aiogram==2.25.1 beautifulsoup4 asyncio aiohttp


    1. Создайте файл main.py в удобном для вас месте.
    2. Вставьте код из спойлера снизу в main.py.
    3. Заполните данные в 9, 10 и 11 строках.
    4. Сохраните и запустите файл.
    Python

    from aiogram import Bot, Dispatcher, types
    from aiogram.types import BotCommand, ReplyKeyboardMarkup, KeyboardButton, ParseMode
    from aiogram.utils import executor
    from aiohttp import ClientSession
    import html
    import asyncio
    from bs4 import BeautifulSoup

    TOKEN = '' # токен вашего бота тг
    token_lolz = '' # токен lolz
    user_id = 0 # ваш user_id TG, получить можно в этом боте @getmyid_bot

    bot = Bot(token=TOKEN, parse_mode=ParseMode.MARKDOWN)
    dp = Dispatcher(bot)
    notify_id = []
    notify_status = False

    #########

    @dp.message_handler(text="Профиль", state="*")
    async def handle_profile(message: types.Message):
    await profile_command(message)

    #########

    @dp.message_handler(commands=['start'])
    async def start_command(message: types.Message):
    if message.from_user.id == user_id:
    keyboard_re = await keyboard()
    await bot.send_message(user_id, f"Главное меню", parse_mode=ParseMode.MARKDOWN, reply_markup=keyboard_re)

    @dp.message_handler(commands=['profile'])
    async def profile_command(message: types.Message):
    if message.from_user.id == user_id:
    response = await lzt_profile()
    keyboard_re = await keyboard()
    await bot.send_message(message.from_user.id, f"[{response['username']}](https://lolz.live/members/{response['user_id']}/)\nБаланс: {response['balance']} {response['currency']}\nХолд: {response['hold']} {response['currency']}", parse_mode=ParseMode.MARKDOWN, reply_markup=keyboard_re)

    @dp.message_handler(lambda message: message.text in ["Уведомления: включены", "Уведомления: выключены"] or "/notify" in message.text.lower())
    async def notify_command(message: types.Message):
    global notify_status
    if message.from_user.id == user_id:
    notify_status = not notify_status
    status = "включены" if notify_status else "выключены"
    keyboard_re = await keyboard()
    await bot.send_message(message.from_user.id, f'Уведомления {status}', parse_mode=ParseMode.MARKDOWN, reply_markup=keyboard_re)

    async def lzt_alert():
    global notify_status
    url = "https://api.zelenka.guru/notifications"
    headers = {
    "accept": "application/json",
    "authorization": f"Bearer {token_lolz}"
    }
    async with ClientSession() as session:
    while True:
    if not notify_status:
    await asyncio.sleep(1)
    continue
    try:
    async with session.get(url, headers=headers) as response:
    if response.status != 429:
    data = await response.json()
    for notification in data['notifications']:
    if 'notification_id' in notification and notification['notification_id'] not in notify_id:
    notify_id.append(notification['notification_id'])
    text = html_text_link(notification.get('notification_html', ''))
    await bot.send_message(user_id, text)
    except Exception as e:
    print(e)
    await asyncio.sleep(10)

    async def lzt_profile():
    url = "https://api.lzt.market/me"
    headers = {
    "accept": "application/json",
    "authorization": f"Bearer {token_lolz}"
    }
    async with ClientSession() as session:
    while True:
    try:
    async with session.get(url, headers=headers) as response:
    if response.status != 429:
    data = await response.json()
    currency = await find_currency(data['user']['currency'])
    profile_data = {
    'username': data['user']['username'],
    'user_id': data['user']['user_id'],
    'balance': data['user']['balance'],
    'currency': currency,
    'hold': data['user']['hold']
    }
    return profile_data
    except Exception as e:
    print(e)
    await asyncio.sleep(4)

    async def find_currency(currency_code):
    currency_symbols = {
    "uah": "₴",
    "rub": "₽",
    "usd": "$",
    "eur": "€",
    "kzt": "₸",
    "thb": "฿",
    "byn": "BYN"
    }
    if currency_code.lower() in currency_symbols:
    return currency_symbols[currency_code.lower()]
    else:
    return None

    def html_text_link(content):
    decoded_html = html.unescape(content)
    soup = BeautifulSoup(decoded_html, 'html.parser')
    for a in soup.find_all('a'):
    a_text = a.get_text()
    a_href = a['href']
    a.replace_with(f'[{a_text}]({a_href})')
    clean_text = soup.get_text()
    return clean_text

    async def keyboard():
    global notify_status
    profile = await lzt_profile()
    keyboard = ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
    profile_button = KeyboardButton("Профиль")
    balance_button = KeyboardButton(f"Баланс: {profile['balance']} {profile['currency']}")
    hold_button = KeyboardButton(f"Холд: {profile['hold']} {profile['currency']}")
    notify_button = KeyboardButton("Уведомления: включены" if notify_status else "Уведомления: выключены")
    keyboard.add(profile_button, balance_button)
    keyboard.add(notify_button, hold_button)
    return keyboard

    async def set_commands(bot: Bot):
    commands = [
    BotCommand(command="/start", description="Главное меню"),
    BotCommand(command="/profile", description="Ваш профиль"),
    BotCommand(command="/notify", description="Включить/выключить уведомления"),
    ]
    await bot.set_my_commands(commands)

    async def on_startup(dp):
    await set_commands(bot)
    asyncio.create_task(lzt_alert())

    if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True, on_startup=on_startup)
    питонщики не бейте палками, писал бота с 1% знанием питона + гпт4
     
    1. View previous comments (2)
    2. sparrow
      august, перенеси в дополнения и напиши функционал бота
    3. WTF
      august,
      будет обнова?
    4. august Topic starter
      WTF, скорее всего нет, т.к все время уходит в приват бота
  2. Ximono
    Ximono Jul 2, 2024 продам рекламу в профиле | обнулён+всёруками:ehh: 1434 Mar 16, 2021
    *9,10 и 11
     
    1. august Topic starter
  3. Симпатия
    Годно! тоже замечал что уведы с запозданием
     
    1. бамблби
  4. Night
    Night Jul 2, 2024 10,141 Jan 8, 2018
    действительно, часто Alert работал не так, как надо(именно поэтому я его выключил).
    Респект за старания
     
  5. Shadman
    Shadman Jul 2, 2024 Футфетиш чатик: https://t.me/feetjoblov 5689 Oct 4, 2021
    А 1% это сколько?
     
    1. View previous comments (3)
    2. бамблби
      Shadman, это на пол шишечки
    3. Shadman
      august, просто я сдавал ЕГЭ по инфе и там питона много нужно, а код открыл мало чего понял
    4. august Topic starter
      Shadman, поэтому и сделал спойлер :cat_smile:
      если работает - не трогай :smile_hookah:
  6. КуниДорого
    КуниДорого test Jul 2, 2024 :cryingcat: Меня оскорбили в интернете…
    Это пиздец какой-то, в коде насрал, логика хуйни
     
    1. august Topic starter
      КуниДорого,

      :owohmm:
  7. scarly
    scarly Jul 2, 2024 28,650 May 21, 2018
    Заебатая тема
     
  8. Whitley
    а так и надо!
     
  9. Кастория
    Кастория Jul 23, 2025 at 12:55 AM Буст вашего аккаунта HSR - https://lolz.live/threads/8984483/ 3695 Oct 9, 2020
    1. View previous comments (2)
    2. august Topic starter
      Кастория, та и лолз бот уже работает давно норм, так что смысла от моего скрипта нету толком
Loading...
Top