Загрузка...

Рабочий аналог Lolzteam Alert

Тема в разделе Дополнения создана пользователем august 2 июл 2024. (поднята 13 сен 2024) 561 просмотр

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

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

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

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

    Код

    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
     
    2 июл 2024 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. sparrow
      august, перенеси в дополнения и напиши функционал бота
    3. WTF
      august,
      будет обнова?
    4. august Автор темы
      WTF, скорее всего нет, т.к все время уходит в приват бота
  2. Ximono
    Ximono 2 июл 2024 :love2: TRX&ENERGY(FROM 100₽/66.000) - lzt.lol/trxx :love2: 1254 16 мар 2021
    *9,10 и 11
     
  3. Симпатия
    Годно! тоже замечал что уведы с запозданием
     
  4. Night
    Night 2 июл 2024 9304 8 янв 2018
    действительно, часто Alert работал не так, как надо(именно поэтому я его выключил).
    Респект за старания
     
    2 июл 2024 Изменено
  5. Shadman
    Shadman 2 июл 2024 ХОЧУ ФУТДЖОБ; Ало ножки? Да да футджоб 5414 4 окт 2021
    А 1% это сколько?
     
    1. Посмотреть предыдущие комментарии (3)
    2. Shadman
      august, просто я сдавал ЕГЭ по инфе и там питона много нужно, а код открыл мало чего понял
    3. august Автор темы
      Shadman, поэтому и сделал спойлер :cat_smile:
      если работает - не трогай :smile_hookah:
      2 июл 2024 Изменено
  6. КуниДорого
    КуниДорого test 2 июл 2024 :cryingcat: Меня оскорбили в интернете…
    Это пиздец какой-то, в коде насрал, логика хуйни
     
    1. august Автор темы
      КуниДорого,

      :owohmm:
  7. scarly
    scarly 2 июл 2024 Стань частью киберспорта CS3 https://lolz.live/threads/8635210/ 27 391 21 май 2018
    Заебатая тема
     
  8. Whitley
    а так и надо!
     
Top