Загрузка...

Automation Utility Bot
Automatic raising of topics in telegram bot + Source code | AIOGRAM 3

Thread in Extentions created by DrewDew Jul 12, 2024. (bumped Oct 19, 2025) 12,981 view

  1. DrewDew
    DrewDew Topic starter Jul 12, 2024 Ваш личный почтовик - lolz.live/threads/9315955/
    [IMG]
    Привет. Я Киана, Киндред. Зовите как хотите.
    Кароче, представляю вам телеграмм бота автоматического поднятия тем на форуме.
    - Добавление тем в список для поднятия
    - Удаление тем из списка
    - Просмотр списка тем
    - Ручное поднятие всех тем в списке
    - Автоматическое поднятие всех тем каждые N часов
    - Валидация тем через API
    - Логирование всех операций​
    [IMG][IMG][IMG]
    Запуск бота - /start
    После запуска представляется панель с кнопками для работы в боте.
    [IMG]
    Ну типо гитхаб - https://github.com/qiyanaitsme/QIYANASAutoPumpLOLZ
    Установка - качаете, в cmd прописываете cd путь до скрипта и pip install -r requirements.txt
    Настраиваете токен бота, токен лолза суете и запускаете.​
    Переписал всю эту хрень на AIOGRAM 3.4.1 (О ДА, ДОВОЛЬСТВУЙТЕСЬ)​
     
    This article was useful for you?
    You can thank the author of the topic by transferring funds to your balance
    Thank the author
    1. View previous comments (6)
    2. NingaGo
    3. Kandaa
      avatarDrewDew , киана киндред а ты правда анимешка-девочка или нет
    4. DrewDew Topic starter
  2. BreakMySoul
    у кого скрипт не встает или траблы какие-то то вот что вам нужно

    3.11.9 питон
    Аюграм 2.25.1

    и да именно 3.11.9, не надо ласт :catwait:
     
    1. DrewDew Topic starter
  3. БРЕДИШЬ
    А вот это годно, еще и красиво :+rep:
     
  4. OAuth
    еба ты кодер, удобная штука
     
  5. OLEGator
    OLEGator Jul 12, 2024 лил миньончик хайп 19,241 Aug 14, 2019
    Ну это намного удобнее чем расширение на тамперманки.
     
  6. Bentley
    Bentley Jul 12, 2024 16,857 May 22, 2018
    Годно
     
  7. kingofchocopie
    kingofchocopie Jul 12, 2024 :life: 3,747 Mar 13, 2023
    Дизайн красивый
     
  8. SUFA
    SUFA Jul 12, 2024
    Telegram: View @a69tut
    переходи в :tg:
    16,853 Oct 27, 2022
    Это новый уровень :cat_ayo:
     
  9. PowerDevil
    PowerDevil Jul 12, 2024 пишите лс форума 16,164 Aug 27, 2022
    Хорошая задумка
    Но без loguru и почему в 1 файле?
    The post was merged to previous Jul 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)
     
    1. DrewDew Topic starter
      avatarPowerDevil, потому что код писал на работе и там нельзя вообще за питоном сидеть. Сидел кодил в блокноте
  10. Удаленный пользователь 6039403
    Это как я понял создаешь своего бота и он каждые 12 часов(для моей группы) будет апать темы которые я укажу ?и ещё нужно ли где-то хостить этот бот на дедике там напрмиер или где?
     
    1. DrewDew Topic starter
      @КесаревоСечение, да. разницы нет. хоть термукс
    2. Удаленный пользователь 6039403
    3. DrewDew Topic starter
  11. NeverGrafov
    о, в заметки
     
  12. ItsNeverLight
    ItsNeverLight Sep 13, 2024 пишите мне кто-нибудь 137 Feb 7, 2019
    это вообще легально нахуй?
     
    1. DrewDew Topic starter
  13. God_likeGL
    God_likeGL Layer 1 Oct 6, 2024 Лучшие сервера: lolz.live/threads/5071761/ :+rep: 35,783 Oct 30, 2018

     
    1. View previous comments (9)
    2. DrewDew Topic starter
    3. God_likeGL Layer 1

    4. DrewDew Topic starter
      avatarGod_likeGL Layer 1 , да. я почти все скрипты пишу с таким уклоном, чтобы можно было и на телефоне развернуть
      Oct 6, 2024 Edited
  14. БИЛЛИНОГАМИ
    :omg: сочно смотрится, щя закину себе на дедик буду тестировать , спасибо!
     
    1. БИЛЛИНОГАМИ
      avatar0x01, да я чет прикола не понял у меня не вышло я и забил , позже попробую
    2. View the next comments (1)
  15. L33T_ADMXDS
    L33T_ADMXDS Mar 25, 2025 Banned 400 Jun 5, 2024
    Всё отлично)
    Спасибо за ворк avatarDrewDew
    [IMG]
     
    1. DrewDew Topic starter
  16. LifeFounder
    LifeFounder Apr 23, 2025 Торгую сахаром 21,577 Sep 25, 2018
    Вопрос на лям, указано что поднятие раз в 12 часов, но на следующий день вижу что темы не поднимаются сами, тут нужно каждый раз самостоятельно тыкать что-ли?
     
    1. DrewDew Topic starter
      avatarLifeFounder , 1-2 раза надо поднять и потом само подниматься будет
  17. пикми
    пикми Jul 12, 2025 донат в игры и стим тут!!! lolz.live/threads/9100644/
     
    1. DrewDew Topic starter
  18. пикми
    пикми Jul 14, 2025 донат в игры и стим тут!!! lolz.live/threads/9100644/
    вахуи, уже 3 раза руками поднял, как долго такое будет продолжаться?
     
    1. View previous comments (2)
    2. mori
  19. otaku
    otaku Aug 2, 2025 скоро прыгну 593 Jun 4, 2021
    1. View previous comments (1)
    2. otaku
    3. DrewDew Topic starter
      avatarotaku , если еще надо - напиши в тг. глянем
  20. ОТЕЦ
    ОТЕЦ Sep 24, 2025 ЛУЧШАЯ СКУПКА КУКОВ VK COM: https://lolz.live/threads/9191236/
    Лютая имба. Установка в пару кликов.
     
Loading...