Не могу понять, как использовать custom emoji в вопросе квиза Pyrogram

Всем доброго времени суток! Подскажите, пожалуйста, как использовать кастомный эмодзи в вопросе квиза? В методе send_poll работает только explanation_parse_mode, а вот question_parse_mode выдает ошибку при использовании, пол получил какой-то не такой аргумент.

TypeError: SendPoll.send_poll() got an unexpected keyword argument 'question_parse_mode'

Вот мой код отправки квиза:

question = 'Which programming language do you prefer? <emoji id=5310129635848103696>✅</emoji>'
options = ['Java', 'Python', 'Kotlin']
correct_option_id = 1
explanation = "It is solution <emoji id=5310129635848103696>✅</emoji>"


async def send_poll():
    async with Client("my_account", api_id=api_id, api_hash=api_hash, phone_number=phone_number) as app:
        app.set_parse_mode(pyrogram.enums.ParseMode.HTML)
        await app.send_poll(
            chat_id,
            question=question,
            options=options,
            type=pyrogram.enums.PollType.QUIZ,
            is_anonymous=True,
            allows_multiple_answers=False,
            correct_option_id=correct_option_id,
            explanation=explanation,
            explanation_parse_mode=pyrogram.enums.ParseMode.HTML,
            question_parse_mode=pyrogram.enums.ParseMode.HTML, # выдает ошибку
            is_closed=False,
            disable_notification=True,
        )


if __name__ == "__main__":
    asyncio.run(send_poll())

Ответы (2 шт):

Автор решения: GameSurt

В вашем коде есть ошибка из-за того, что метод send_poll() не поддерживает аргумент question_parse_mode. Для использования кастомных эмодзи в вопросе квиза вам нужно изменить способ форматирования вопроса таким образом, чтобы он был корректно интерпретирован API Telegram.

Вот как можно изменить ваш код:

question = 'Which programming language do you prefer? ?'  # Используйте эмодзи напрямую
options = ['Java', 'Python', 'Kotlin']
correct_option_id = 1
explanation = "It is solution ?"

async def send_poll():
    async with Client("my_account", api_id=api_id, api_hash=api_hash, phone_number=phone_number) as app:
        app.set_parse_mode(pyrogram.enums.ParseMode.HTML)
        await app.send_poll(
            chat_id,
            question=question,
            options=options,
            type=pyrogram.enums.PollType.QUIZ,
            is_anonymous=True,
            allows_multiple_answers=False,
            correct_option_id=correct_option_id,
            explanation=explanation,
            explanation_parse_mode=pyrogram.enums.ParseMode.HTML,
            is_closed=False,
            disable_notification=True,
        )

if __name__ == "__main__":
    asyncio.run(send_poll())

Изменения:

Замените

<emoji id=5310129635848103696>✅</emoji>

на непосредственное использование эмодзи, например, ✅ или другие доступные эмодзи. Удалите question_parse_mode=pyrogram.enums.ParseMode.HTML, так как этот аргумент не поддерживается send_poll(). Теперь Telegram должен корректно интерпретировать ваш вопрос с кастомными эмодзи в квизе. Для подтверждения:

  • Кастомные эмодзи в вопросе квиза: Вы можете использовать кастомные эмодзи в вопросе квиза, указывая их как часть текста вопроса, как вы сделали в своем исходном коде. Однако важно, чтобы эти эмодзи были доступны и корректно интерпретировались Telegram.

  • Ошибка с question_parse_mode: Действительно, метод send_poll() в Pyrogram не поддерживает аргумент question_parse_mode. Ошибка TypeError указывает на то, что этот аргумент не ожидается в данном методе.

→ Ссылка
Автор решения: Александр Гладких

Разобрался с проблемой сам путем просмотра пакетного кода Telethon.

Вот код, надеюсь, что кому-то пригодится:

question = "? " + quiz['question']
question_entities = [
    MessageEntityCustomEmoji(offset=0, length=2, document_id=5431527977391237948)  # Пример сущности
]
options = quiz['options']
correct_option_id = "абвг".index(quiz['correct_option'])
explanation = quiz['explanation']

poll = InputMediaPoll(
    poll=Poll(
        id=0,  # Random ID
        question=TextWithEntities(text=question, entities=question_entities),
        answers=[PollAnswer(text=TextWithEntities(text=option, entities=[]), option=bytes([i])) for
                 i, option in enumerate(options)],
        quiz=True,
    ),
    correct_answers=[bytes([correct_option_id])],
    solution=explanation,
    solution_entities=[]
)

await client.send_message(chat_id, file=poll)
→ Ссылка