Пирограмма - укажите имя пользователя в 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
)