Загрузка...

Автоматизация Бот Обновлен | Автоподнятие тем в телеграмм боте + Исходный код

Тема в разделе Дополнения создана пользователем Киана 12 июл 2024. (поднята 26 июл 2025 в 21:15) 9795 просмотров

  1. Киана
    Киана Автор темы 12 июл 2024 Реклама от Кианы - lolz.live/threads/7756293/
    [IMG]
    Привет. Я Киана, Киндред. Зовите как хотите.
    Кароче, представляю вам телеграмм бота автоматического поднятия тем на форуме.
    - Добавление тем в список для поднятия.
    - Удаление тем из списка.
    - Просмотр списка тем.
    - Ручное поднятие всех тем в списке / автоподнятие.
    - Автоматическое поднятие всех тем каждые n часов. Указываете в боте время для своей группы.
    [IMG]
    Запуск бота - /start
    После запуска представляется панель с кнопками для работы в боте.
    - API_TOKEN: токен вашего Telegram бота
    - AUTH_TOKEN: токен авторизации lolz.guru

    [IMG]

    Там еще и картинка. Она красивая.​
    Ну типо гитхаб - https://github.com/qiyanaitsme/AutoPumpLOLZ/
    Установка - качаете, в cmd прописываете cd путь до скрипта и pip install -r requirements.txt
    Настраиваете токен бота, токен лолза суете и запускаете.​
    -Внедрена полностью асинхронная архитектура с использованием aiohttp и aiosqlite
    -Добавлен отдельный конфигурационный файл (config.json) для управления настройками
    -Реализована модульная структура с отдельными классами для работы с базой данных, API и логикой бота
    -Улучшено получение информации о темах, включая их заголовки через API
    -Улучшена обработка ошибок и логирование во всех основных функциях
     
    12 июл 2024 Изменено
    1. Посмотреть предыдущие комментарии (7)
    2. NingaGo
      30 июл 2024 Изменено
    3. Kandaa
      Киана, киана киндред а ты правда анимешка-девочка или нет
    4. Киана Автор темы
  2. 101
    еба ты кодер, удобная штука
     
  3. БРЕДИШЬ
    БРЕДИШЬ 12 июл 2024 ... 10 589 1 июл 2020
    А вот это годно, еще и красиво :+rep:
     
  4. OLEGator
    OLEGator 12 июл 2024 Поздняков. Подписаться 15 181 14 авг 2019
    Ну это намного удобнее чем расширение на тамперманки.
     
  5. Bentley
    Bentley 12 июл 2024 13 846 22 май 2018
    Годно
     
  6. kingofchocopie
    kingofchocopie 12 июл 2024 :life: 3704 13 мар 2023
    Дизайн красивый
     
  7. SUFA
    Это новый уровень :cat_ayo:
     
  8. PowerDevil
    PowerDevil 12 июл 2024 12 833 27 авг 2022
    Хорошая задумка
    Но без loguru и почему в 1 файле?
    --- Сообщение объединено с предыдущим 12 июл 2024
    Python
    from loguru import logger
    import asyncio
    import requests
    import sqlite3
    from aiogram import Bot, Dispatcher, types
    from aiogram.contrib.middlewares.logging import LoggingMiddleware
    from aiogram.types import ParseMode, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
    from aiogram.utils import executor
    import re

    API_TOKEN = ''
    IMG_URL = 'https://wallpapers-clan.com/wp-content/uploads/2024/04/dark-anime-girl-with-red-eyes-desktop-wallpaper-preview.jpg'
    AUTH_TOKEN = ''
    AUTHOR_URL = 'https://lolz.live/qiyanalol/'

    logger.add("file_{time}.log", rotation="1 day")
    bot = Bot(token=API_TOKEN)
    dp = Dispatcher(bot)
    dp.middleware.setup(LoggingMiddleware())

    conn = sqlite3.connect('threads.db')
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS threads (id INTEGER PRIMARY KEY, thread_id TEXT UNIQUE)''')
    conn.commit()

    def bump_thread(thread_id):
    url = f"https://api.zelenka.guru/threads/{thread_id}/bump"

    headers = {
    "accept": "application/json",
    "authorization": f"Bearer {AUTH_TOKEN}"
    }

    response = requests.post(url, headers=headers)
    response_data = response.json()

    if response.status_code == 200:
    try:
    error_message = response_data["errors"][0]

    time_match = re.search(r'(\d+)\s+часов\s+(\d+)\с+минут\s+(\d+)\с+секунд', error_message)
    if time_match:
    hours, minutes, seconds = map(int, time_match.groups())
    return f"Вы не можете поднять тему. Вам осталось ждать - {hours} часов, {minutes} минут, {seconds} секунд."
    except (IndexError, KeyError):
    pass
    return "Вы подняли тему."
    else:
    return f"Ошибка при поднятии темы {thread_id}: {response.status_code}"

    def get_all_threads():
    cursor.execute("SELECT thread_id FROM threads")
    return cursor.fetchall()

    def add_thread_to_db(thread_id):
    try:
    cursor.execute("INSERT INTO threads (thread_id) VALUES (?)", (thread_id,))
    conn.commit()
    return True
    except sqlite3.IntegrityError:
    return False

    def delete_thread_from_db(thread_id):
    cursor.execute("DELETE FROM threads WHERE thread_id = ?", (thread_id,))
    conn.commit()

    @dp.callback_query_handler(lambda c: c.data == 'add_thread')
    async def process_add_callback(callback_query: CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id,
    "Введите ID тем через запятую для добавления:")

    @dp.message_handler(lambda message: ',' in message.text)
    async def add_threads(message: types.Message):
    thread_ids = message.text.split(',')
    added_threads = []
    for thread_id in thread_ids:
    thread_id = thread_id.strip()
    if thread_id.isdigit():
    if add_thread_to_db(thread_id):
    added_threads.append(thread_id)
    logger.info(f"Thread ID {thread_id} added.")
    else:
    await message.reply(f"Тема с ID {thread_id} уже есть в списке.")
    logger.warning(f"Thread ID {thread_id} already exists.")
    if added_threads:
    await message.reply(f"Добавлены темы с ID: {', '.join(added_threads)}")
    else:
    await message.reply("Не удалось добавить темы. Убедитесь, что вы ввели корректные ID через запятую.")
    await send_welcome(message)

    @dp.callback_query_handler(lambda c: c.data == 'delete_thread')
    async def process_delete_callback(callback_query: CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    threads = get_all_threads()
    if not threads:
    await bot.send_message(callback_query.from_user.id, "Список тем пуст.")
    logger.info("Thread list is empty.")
    return

    keyboard = InlineKeyboardMarkup()
    for thread in threads:
    keyboard.add(InlineKeyboardButton(thread[0], callback_data=f'delete_{thread[0]}'))
    await bot.send_message(callback_query.from_user.id, "Выберите тему для удаления:", reply_markup=keyboard)

    @dp.callback_query_handler(lambda c: c.data.startswith('delete_'))
    async def process_delete_thread_callback(callback_query: CallbackQuery):
    thread_id = callback_query.data.split('_')[1]
    delete_thread_from_db(thread_id)
    await bot.answer_callback_query(callback_query.id, text=f"Тема {thread_id} удалена.")
    logger.info(f"Thread ID {thread_id} deleted.")

    threads = get_all_threads()
    if threads:
    await process_delete_callback(callback_query)
    else:
    await send_welcome(callback_query.message)

    @dp.callback_query_handler(lambda c: c.data == 'list_threads')
    async def process_list_callback(callback_query: CallbackQuery):
    threads = get_all_threads()
    if threads:
    await bot.send_message(callback_query.from_user.id,
    "Список тем:\n" + "\n".join([thread[0] for thread in threads]))
    logger.info("Thread list sent to user.")
    else:
    await bot.send_message(callback_query.from_user.id, "Список тем пуст.")
    logger.info("Thread list is empty.")
    await send_welcome(callback_query.message)

    @dp.callback_query_handler(lambda c: c.data == 'bump_threads')
    async def process_bump_callback(callback_query: CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bump_all_threads(callback_query.from_user.id)
    await send_welcome(callback_query.message)

    @dp.message_handler(commands=['start', 'help'])
    async def send_welcome(message: types.Message):
    keyboard = InlineKeyboardMarkup(row_width=3).add(
    InlineKeyboardButton("Список тем для апа", callback_data='list_threads'),
    InlineKeyboardButton("Добавить тему", callback_data='add_thread'),
    InlineKeyboardButton("Удалить тему", callback_data='delete_thread'),
    InlineKeyboardButton("Поднять темы", callback_data='bump_threads'),
    InlineKeyboardButton("Автор", url=AUTHOR_URL)
    )
    await message.reply_photo(IMG_URL,
    caption="Привет! Я бот для поднятия тем. Выбери действие:",
    reply_markup=keyboard)

    async def scheduled_bump():
    while True:
    await asyncio.sleep(12 * 3600)
    await bump_all_threads()

    async def bump_all_threads(user_id=None):
    threads = get_all_threads()
    if not threads:
    if user_id:
    await bot.send_message(user_id, "Список тем пуст.")
    logger.info("Thread list is empty.")
    return

    for thread in threads:
    thread_id = thread[0]
    result = bump_thread(thread_id)
    if user_id:
    await bot.send_message(user_id, result)
    logger.info(result)
    await asyncio.sleep(5)

    if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(scheduled_bump())
    executor.start_polling(dp, skip_updates=True)
     
    12 июл 2024 Изменено
    1. Киана Автор темы
      PowerDevil, потому что код писал на работе и там нельзя вообще за питоном сидеть. Сидел кодил в блокноте
  9. Удаленный пользователь 6039403
    Это как я понял создаешь своего бота и он каждые 12 часов(для моей группы) будет апать темы которые я укажу ?и ещё нужно ли где-то хостить этот бот на дедике там напрмиер или где?
     
    1. Киана Автор темы
      @КесаревоСечение, да. разницы нет. хоть термукс
    2. Удаленный пользователь 6039403
    3. Киана Автор темы
  10. NeverGrafov
    NeverGrafov 24 июл 2024 :doomer: Товары на маркете | В закрепе вся инфа 5920 25 авг 2023
    о, в заметки
     
  11. ItsNeverLight
    ItsNeverLight 13 сен 2024 пишите мне кто-нибудь 136 7 фев 2019
    это вообще легально нахуй?
     
    1. Киана Автор темы
  12. God_likeGL
    God_likeGL Layer 1 6 окт 2024 Сyицид — это не выход, это наш святой обряд. :duck_knife2: 31 078 30 окт 2018

     
    1. Посмотреть предыдущие комментарии (9)
    2. Киана Автор темы
    3. God_likeGL Layer 1

    4. Киана Автор темы
      God_likeGL, да. я почти все скрипты пишу с таким уклоном, чтобы можно было и на телефоне развернуть
      6 окт 2024 Изменено
  13. БИЛЛИНОГАМИ
    БИЛЛИНОГАМИ 6 дек 2024 Банки|Турция|Верификации|Биржи - lzt.lol/TUR :zerotwo:
    :omg: сочно смотрится, щя закину себе на дедик буду тестировать , спасибо!
     
    1. Посмотреть предыдущие комментарии (1)
    2. БИЛЛИНОГАМИ
      krutyshkin, да я чет прикола не понял у меня не вышло я и забил , позже попробую
    3. Киана Автор темы
  14. L33T_ADMXDS
    L33T_ADMXDS 25 мар 2025 Заблокирован(а) 400 5 июн 2024
    Всё отлично)
    Спасибо за ворк Киана
    [IMG]
     
  15. LifeFounder
    LifeFounder 23 апр 2025 //// 20 143 25 сен 2018
    Вопрос на лям, указано что поднятие раз в 12 часов, но на следующий день вижу что темы не поднимаются сами, тут нужно каждый раз самостоятельно тыкать что-ли?
     
    1. Киана Автор темы
      LifeFounder, 1-2 раза надо поднять и потом само подниматься будет
  16. пикми
    пикми 12 июл 2025 гость, купи звёзды 1.29р - lolz.live/threads/4643304/ :pog:
     
    1. Киана Автор темы
  17. пикми
    пикми 14 июл 2025 гость, купи звёзды 1.29р - lolz.live/threads/4643304/ :pog:
    вахуи, уже 3 раза руками поднял, как долго такое будет продолжаться?
     
    1. Киана Автор темы
      пикми, выключи бота. Запусти снова и тыкни поднять, потом ещё раз через срок свой. Обычно такое случается, если сеть пропадает и бот теряет Коннект.
    2. Киана Автор темы
      пикми, двух раз для бесконечности хватает обычно.
Загрузка...
Top