Как получить объект Message из объекта MessageService в Telethon
Я собираюсь TypeError: 'MessageService' object is not iterable
Я сохраняю последние 10 сообщений из канала, используя iter_messages
client
метод, который возвращает 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', '...'))