Пирограмма - укажите имя пользователя в client.copy_message

Я создаю бота, который будет использовать определенную группу пользователей для обмена изображениями с ботом. Бот получит изображение и отправит его группе.

У меня бот успешно пересылает сообщение с изображением в группу после подтверждения пользователем, но я хочу добавить @username или userID человека, который взаимодействовал с ботом в перенаправленном сообщении.

Возможно добавление подписи с @username или @user_id человека, отправившего сообщение боту.

ФАЙЛ 1

      from pyrogram import (
    Client,
    filters
)

@Client.on_callback_query()
async def cb(client, call):

k = call.data
msgid = int(k.split("-")[1])
    chat = call.message.chat.id
await call.message._client.copy_message(-100XXXXXXGROUPID, chat, msgid,
                                                caption="")

ФАЙЛ 2

          Client,
    filters
    )
@Client.on_message(filters.private & ~filters.caption &
                   ~filters.command("start"))
async def copy(client, message):
    chat = message.chat.id
     

    await message.copy(-100groupc)

Я пробовал добавить к подписи следующее:

      client.get_chat_members(chat)
caption=chatmember.User

Я не получаю ошибок, но не получаю подписи.

Я немного запутался в этом, просматривая документы пирограмм, я не нахожу хороших примеров того, как реализовать что-то вроде этого. Я прочитал, что бот должен сначала «встретиться» с пользователем, но если пользователь взаимодействует с ним в чате бота, разве это не сработает?

2 ответа

Я не знаю, понял ли я, что вы пытаетесь сделать, или нет, но надеюсь, что понял все правильно, и вот мое предложение по ситуации.
Примечание : вы не можете редактировать пересылаемое сообщение и, как правило, вы не можете редактировать сообщение, отправителем которого вы не являетесь.

Основной ответ

Я просто взглянул на написанное вами название и увидел функцию copy_message() .
На самом деле, если вы посмотрите документацию copy_message(), вы можете легко отправить подпись с медиафайлом, который вы отправляете.
Как говорится в документации:

caption (строка, необязательно) - Новый заголовок для медиа, 0-1024 символа после синтаксического анализа сущностей. Если не указано иное, сохраняется исходная подпись. Передайте «» (пустая строка), чтобы удалить заголовок.

Так что просто напишите:

      Client.copy_message(chat_id, from_chat_id, message_id, caption=username)

И бум, вы отправляете подпись с медиа, которое вы пытались отправить.

Другое решение

Прежде всего, вы должны загрузить изображение, а затем загрузить его туда, где вам нужно.
Это заставляет вас быть отправителем изображения, и после этого вы можете отредактировать его и добавить идентификатор или имя пользователя к подписи. (или вы можете написать катион, когда загружаете изображение)
Но, кстати, если вы уверены в том, что если вы пересылаете сообщение от другого парня на какой-то канал, вы можете отредактировать это сообщение, попробуйте и прокомментируйте результат здесь для нас, но логически это не должно работать.
Кстати, вы можете редактировать заголовок изображения с функции помощьюedit_message_caption (), а можете отправить фотографию с функции помощьюsend_photo() .
Также попробуйте взглянуть на доступные методы Документируйте и посмотрите, какая из функций вам подходит

Если я правильно понял, вы хотите, чтобы пользователи отправляли изображение вашему боту, которое затем будет отправлено на канал со ссылкой на исходную учетную запись пользователя?

Используйте связанный метод message.copy() с участием message.from_user.mention как caption.

      @app.on_message(
    filters.photo  # filter for images only
    & filters.user(approved_users)  # only users in this list are allowed
)
def copy_to_channel(_, message):
    message.copy(  # copy() so there's no "forwarded from" header
        chat_id=target_chat,  # the channel you want to post to
        caption=message.from_user.mention  # mentions the posting user in the new message
    )
Другие вопросы по тегам