@Artur18
Новичок

Ошибка в боте, который отправляет комментарии.Что делать?

Код:
from pyrogram import Client  # телеграм клиент
import shelve  # запись информации в файл
import random  # для выбора случайного элеменита из списка
import time  # для выбора случайного элеменита из списка


# Данные приложения телеграм (можно создать на my.telegram.org)
api_id = 183162
api_hash = "d89672a589c14e14129a713a01c86d0c"
phone_number = '+........'  # телефонный номер аккаунта в телеграме
PUBLIC = 'tupogram'  # паблик
# Варианты текстов сообщений
TEXTS = [
    'Круто !',
    'тоже так хочу ',
    '5 баллов ',
]
COMMENT_EVERY_N = 1  # комментируем каждое N собщение
                     # если равно 1, комментируем каждое сообщение
                     # если равно 3, комментируем каждое третье
                     # если равно 5, комментируем каждое пятое ... итд

# список обработанных сообщений
processed_messages = shelve.open('processed_messages.db',  # имя файла, куда писать
                                 writeback=True)

# создаем клиент телеграма
app = Client("python_cyberpunk", api_id, api_hash,
             phone_number=phone_number)

with app:
    public = app.get_chat(PUBLIC)  # ищем паблик по нику
    chat = public.linked_chat  # связанный чат обсуждений паблика
    
    while True:
        for msg in app.get_chat_history(chat.id, limit=100):
            # фильтруем только авторепосты из паблика
            if (msg.from_user is None  # если сообщение не имеет автора
                    # и это репост из паблика (проверка по id)
                    and msg.sender_chat.id == public.id):
                if msg.forward_from_message_id % COMMENT_EVERY_N != 0:
                    print(f'Пропускаем message_id={msg.message_id},'
                        f' так как комментируе каждое {COMMENT_EVERY_N}')
                    continue
                # проверяем, есть ли в списке обработанных сообщений этот айди
                # чтобы не комментировать по несколько раз один пост
                if str(msg.forward_from_message_id) in processed_messages:
                    print(f'Пропускаем уже обработанное message_id={msg.message_id}')
                    continue
                # пишем в список обработанных айди этого сообщения
                processed_messages[str(msg.forward_from_message_id)] = True

                print(f'Обработка message_id={msg.message_id}')

                text = random.choice(TEXTS)  # выбираем случайный текст из списка
                app.send_message(chat.id, text,  # отправляем текст в чат
                                reply_to_message_id=msg.message_id)  # как ответ на сообщение с постом
                
                # для того, чтоб не оставлять больше одного коммента за 5 минут
                break  # выходим из перебора сообщений, если оставили коммент

        print('Ставим на паузу')
        time.sleep(60 * 5)


Ошибка:
print(f”Пропускаем уже обработанное message _id={msg.message.id}”)
AttributError: “Message” object has no attribute “message”


Помогите пожалуйста
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Во первых не светите свой ID и Hash на форумах, это как логин и пароль от аккаунта)

Ошибка у вас из-за того, что в цикле переменная msg это и есть сообщение чата. Нужно сделать так:
print(f”Пропускаем уже обработанное message _id={msg.id}”)


Для отладки в следующий раз можете делать вывод переменной в консоль, чтобы понять какие там есть поля и как к ним обращаться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы