@ArtemMik
Python

Как через Telethon переслать сообщение от отправителя в группу?

У меня есть аккаунт в телеграмме, мне надо сделать чтобы если ему прислали сообщение в личное переписку, то он это сообщение перешлёт в группу, в моём коде он сообщение это отправляет но не видно от кого было это сообщение

async def handler(event: NewMessage.Event):
    phone = get_session_name(event.client)
    with DB() as db:
        autoresponder_message = db.get_autoresponder_text(phone)
    try:
        await event.reply(autoresponder_message)
        for chat in forward_to:
            print(chat)
        await client.send_message(chat, event.message)
        await event.client.forward_messages(forward_to, event.message)
    except Exception as e:
            logger.info(f"ошибка при автоответчике")
    logger.info(f"аккаунт {phone} получил сообщение в лс")


на скрине видно что если я написал сообщение на этот аккаунт, то он мне ответил и моё сообщение которое я ему написал он скидывает в группу которую я указал в своём коде, но он отправляет просто сообщение без пересылки от кого это сообщение

650e049771494345146196.png

должно быть вот так:

650e043aa4206062865283.png
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
metalexs
@metalexs
В Telethon есть метод forward_messages, который позволяет пересылать сообщения так, чтобы было видно, от кого они пришли. Основной синтаксис таков:
await client.forward_messages(entity, messages, from_peer)

  • entity - куда вы хотите переслать сообщение (например, ID чата или группы)
  • messages - сообщения, которые вы хотите переслать (например, ID сообщения)
  • from_peer - откуда пересылать сообщение (необязательный параметр)

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

async def handler(event: NewMessage.Event):
    phone = get_session_name(event.client)
    with DB() as db:
        autoresponder_message = db.get_autoresponder_text(phone)
    try:
        await event.reply(autoresponder_message)
        for chat in forward_to:
            print(chat)
            await event.client.forward_messages(chat, event.message)
    except Exception as e:
        logger.info(f"Ошибка при автоответчике: {e}")
    logger.info(f"Аккаунт {phone} получил сообщение в лс")

Обратите внимание, что я изменил event.client.forward_messages(forward_to, event.message) на await event.client.forward_messages(chat, event.message), так как forward_messages должен быть вызван для каждого чата отдельно. Кроме того, я добавил {e} к строке логирования ошибки, чтобы было видно детали ошибки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abdullokh_apo
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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