Сборка polls-members
Опросы целиком, дата входа и бан до вступления
Боты создают опросы со всеми параметрами и узнают, кто как ответил.
- +
poll_answer— кто и за какие варианты проголосовал. Приходит боту, который отправил опрос, и только если опрос неанонимный: в анонимном сервер не раскрывает голосующего никому, включая автора. - +
poll— новое состояние опроса: счётчикиvoter_countпо вариантам,total_voter_count,is_closed. Приходит после каждого голоса и при закрытии. - +
correct_option_idsв sendPoll — массив индексов правильных ответов для викторины. Прежнийcorrect_option_idпродолжает работать. - +
question_parse_modeиquestion_entities— разметка в тексте вопроса. - +
text_parse_modeиtext_entities— то же для каждого варианта, еслиoptionsпередан массивом объектов, а не строк. - +
explanation_parse_modeиexplanation_entities— разметка в пояснении к неверному ответу. - +
open_periodиclose_date— опрос закрывается сам: через N секунд или к указанному времени. Одновременно можно задать только одно. - +
allows_revoting— разрешить сменить голос. Викторина отказывает в этом всегда, флаг на неё не влияет. - +
shuffle_options— показывать варианты каждому в своём порядке. - +
allow_adding_options— участники дописывают свои варианты. - +
hide_results_until_closes— счётчики скрыты до закрытия опроса. - +
members_only— голосовать могут только участники чата. - +
country_codes— ограничить голосование списком стран, коды в формате ISO 3166-1 alpha-2. - +
joined_dateвChatMember— Unix-время вступления участника в чат. Раньше эту дату бот не видел вообще. - +
subscription_until_dateвChatMember— до какого времени оплачена подписка, если участник вошёл по платной ссылке. - ~banChatMember и unbanChatMember принимают пользователя, которого в чате нет. Так работает и настоящий Telegram: бан вперёд — обычный приём модерации. restrictChatMember по-прежнему отвечает
USER_NOT_PARTICIPANT— ограничивать права того, кто не вошёл, нечему. - ~getChatMember на постороннего человека отдаёт статус
left, а не ошибку. Проверять членство теперь можно одним запросом, без обработки исключения. - ~
chat_memberиmessage_reactionбольше не приходят, еслиallowed_updatesне задан — их нужно перечислить по имени. Раньше сервер отдавал всё подряд, и бот, написанный до появления этих типов, получал незнакомые ему обновления.
Опрос-капча собирается из этого набора так: type=quiz, is_anonymous=false, allows_revoting=false, open_period под таймаут. Неанонимность нужна, чтобы вообще приходил poll_answer; викторина не даёт переголосовать, поэтому неверный ответ не отыграть назад. Ограничённый участник голосовать может — мут не мешает пройти проверку.
В poll_answer идентификатор опроса тот же, что sendPoll вернул в poll.id, а option_ids — индексы в том порядке, в котором варианты были переданы, даже при shuffle_options. Рядом лежит option_persistent_ids: эти идентификаторы не сдвигаются, если в опрос дописали варианты.
Правильные ответы викторины сервер не раскрывает до того, как человек проголосовал или опрос закрылся. В poll у неотвеченной викторины correct_option_id и explanation отсутствуют — это не потеря данных.
Минимум вариантов в опросе — один, максимум open_period поднят до 2 628 000 секунд (месяц). Продолжает сборку chatmember, которая принесла сами обновления о членстве.