Автоматизация Телеграм (нейрокомментинг/граббер постов)

Доброго времени дня всем. Проблема такая: написал 2 программы с помощью библиотеки pyrogram, которые должны автоматически комментировать посты в выбранных пабликах, а так же репостить посты из нужного паблика в паблик прокладку, откуда уже с помощью команды можно сделать репост из паблика 1, через прокладку 2, в паблик 3.

Все отлично работает для пабликов с маленьким количеством подписчиков (меньше 100), а вот на паблики с большим количеством подписчиков - программы не реагируют никак. В коде я обращаюсь к id-сообщению, если паблик в телеграме маленький, то id сообщения небольшое значение имеет (например: 10, 15, 56), а вот у больших пабликов - видимо либо слишком большие значения id.

Код программы для нейрокомментинга:

from time import sleep

from pyrogram import Client, idle, filters
from pyrogram.types import Message
from datetime import datetime as DT
from pyrogram.handlers import MessageHandler
from keys import *
from gpt_comm import get_neuro_comment
import asyncio

target_channels = [#id пабликов (в формате -1001844702414)]

# print(f'Приложение стартовало{DT.now()}')
client = Client('new_session_ft', api_id_fh, api_hash_ft)


async def my_handler(client: Client, message: Message):
    try:
        if message.chat.id in target_channels:
            print(f'{message.id}')
            print(f'{DT.now().strftime("%d.%m %H:%M:%S")} Новый пост в паблике "{message.chat.title}"')
            await asyncio.sleep(5)

            last_message = await client.get_discussion_message(message.chat.id, message.id)

            if last_message:
                print(f'Получено сообщение: {last_message.text or last_message.caption}')
            else:
                print('Сообщение не получено')

            text_content = last_message.text if last_message.text else last_message.caption

            if text_content:
                comment_to_post = await get_neuro_comment(text_content.replace('\n', ''))
            else:
                comment_to_post = "Прикольное)"

            await last_message.reply(comment_to_post)

            print(
                f'{DT.now().strftime("%d.%m %H:%M:%S")} Комментарий в паблике "{message.chat.title}" оставлен: {comment_to_post}')

    except Exception as e:
        print(f'Ошибка при обработке сообщения: {e}')


for channel_id in target_channels:
    client.add_handler(MessageHandler(my_handler, filters.chat(channel_id)))
client.start()
idle()

Для создания комментариев используется отдельный код для генерации ответа, на основании самого поста (from gpt_comm import get_neuro_comment)

Код для автоматического репоста:

from pyrogram import Client, filters
import shelve
from keys import *

db = shelve.open('data.db', writeback=True)

priv_publ = 'public1' #тестовый 1, паблик для управления ботом
public_public = 'public2' #тестовый 3, сюда выкладываю
source_public = [''] #отсюда беру паблики

app = Client('session', api_id, api_hash)

@app.on_message(filters.chat(source_public))
def new_channel_post(client, message):
    post_id = add_post_to_db(message)

    message.forward(priv_publ)

    client.send_message(priv_publ, post_id)

def add_post_to_db(message):
    try:
        new_id = max(int(k) for k in db.keys()
                     if k.isdigit()) + 1
    except:
        new_id = 1

    db[str(new_id)] = {
        'username': message.chat.username,
        'message_id': message.id,
    }
    return new_id


@app.on_message(filters.chat(priv_publ) & filters.regex(r'\d+\+'))
def post_request(client, message):
    post_id = str(message.text).strip('+')
    post = db.get(post_id)
    if post is None:
        client.send_message(priv_publ, 'error no post in db')
        return

    try:
        msg = client.get_messages(post['username'], post['message_id'])
        msg.copy(public_public)
        client.send_message(priv_publ, 'success')
    except Exception as e:
        client.send_message(priv_publ, f'error {e}')


if __name__ == '__main__':
    print('its run')
    app.run()

Проблема в том, что эти 2 кода полностью и нормально работают на паблики с небольшим количеством пабликов (и нейрокомментинг и автоматический репост), но если у паблика много подписчиков - код не реагирует никак. Это проблема в библиотеке pyrogram? Или это как-то сам Telegram на уровне API блокирует такие действия для больших пабликов? И можно ли реализовать подобные идеи с помощью других библиотек aiogram/telethon?


Ответы (0 шт):