Как получить объект Message из объекта MessageService в Telethon

Я собираюсь TypeError: 'MessageService' object is not iterable

Я сохраняю последние 10 сообщений из канала, используя iter_messagesclient метод, который возвращает telethon.sync._SyncGen генератор объекта. Затем я перебираю этот генератор и пытаюсь отправить каждое сообщение (msg) пользователю (username) через client"s send_message метод, который может принять либо str или телемарафон Message Объект в качестве аргумента сообщения.

Однако мой msg Объект здесь не является экземпляром Message класс но MessageService класс ( https://lonamiwebs.github.io/Telethon/constructors/message_service.html), и я предполагаю, что это причина, по которой я получаю ошибку.

message_objects = client.iter_messages(channel_name, limit=10)

for msg in message_objects:
    client.send_message(username, msg)

Мой вопрос как можно получить Message объекты вместо MessageService чтобы избежать ошибки и сделать client.send_message() работать должным образом?

1 ответ

Решение

MessageService объекты - это сообщения Telegram, например, "кто-то присоединился к этой группе" или "фотография канала изменена". iter_messages возвращает эти сообщения вместе с другими сообщениями, но вы не можете отправлять эти сообщения. Как вы можете видеть в документации, которую вы сами связали, внутри MessageService объект. Есть только MessageAction,

Вы можете пропустить этот тип сообщений в вашем цикле, проверяя их type() или hasattr(msg, 'message'), Нормальные сообщения имеют message поле, которое является текстом, который вы хотите отправить. Если хотите send_message (не вперед), я думаю, ваш код должен быть изменен на:

client.send_message(username, getattr(msg, 'message', '...'))
Другие вопросы по тегам