Не могу понять, как использовать 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 шт):
В вашем коде есть ошибка из-за того, что метод 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)