Сборка chatmember-required-fields
Обязательные поля участника чата
Три поля, без которых библиотека не может разобрать участника целиком.
- +
can_be_editedвChatMember— может ли спрашивающий бот менять права этого администратора. Поля не было вообще, хотя у вариантаadministratorоно обязательное. - ~
until_dateприходит у статусовrestrictedиkickedвсегда,0означает «навсегда». Раньше вместо нуля поле просто отсутствовало. - ~
can_edit_tagприходит у статусаrestricted. Значение повторяет право писать: отдельного ограничения за ним не стоит. - ~Те же три поля исправлены и в ответе getChatMember, не только в обновлении
chat_member.
Одного пропущенного поля хватает, чтобы обновление стало нечитаемым целиком — библиотека отказывается собирать объект участника, а не подставляет пустое значение. Обновление при этом остаётся в очереди и приходит снова каждые несколько секунд, так что бот перестаёт разбирать и все следующие обновления, а не только это.
В chat_member два участника — до и после изменения, — и старая сторона собирается тем же кодом. Поэтому переход «был ограничен, стал обычным участником» падал на поле в old_chat_member, где статус уже нормальный.
Обновления, записанные сборкой update-store-all-kinds до этого исправления, так и останутся нечитаемыми. Если очередь встала, её нужно пролистать: getUpdates с offset больше застрявшего update_id.