Я помечаю определённые посты через API и Python. Это работало несколько лет, пока не было выполнено недавнее обновление до версии 3.2.0.beta4-dev. Теперь я получаю ошибку: DiscourseClientError: Вы не имеете права просматривать запрошенный ресурс. Мой API-ключ всё ещё действителен и не отозван. Обратный анализ путём ручного пометки поста показывает, что полезная нагрузка для пометки не изменилась (возможно, изменилось значение flag_topic, но это, кажется, не имеет значения). Есть какие-либо идеи?
self._post(
"/post_actions",
id=post_id,
post_action_type_id=7, # пометить
message=msg,
flag_topic=True
)
Одно из недавних изменений в механизме флагов — переход от настройки на основе уровня доверия к настройке, включённой для групп (flag post allowed groups), если это как-то можно связать?
Мои настройки:
Мой API-ключ:
Возможно, у «Все пользователи» больше нет права на создание флагов, и мне нужен новый API-ключ для «Одного пользователя», у которого это право есть (например, для меня)? Мне не совсем понятно, что означает «Все пользователи». TL0?
Теоретически, поскольку значение по умолчанию для TL1 не изменилось при переключении настроек, я предполагал, что те же разрешения для API-ключа должны продолжать работать. Однако, поскольку теперь всё основано на группах, а не на уровнях доверия, возможно, что-то ещё влияет на ситуацию. Был зафиксирован случай, когда видимость группы стала фактором в другом странном поведении, возникшем для одного из других параметров, перенесённых в формат, разрешённый для групп. Не меняли ли вы случайно видимость вашей группы TL1 в какой-либо момент?
Нет, все группы видны.
Я также пробовал с новым ключом API, на этот раз для одиночного пользователя «discobot» (мой вебхук работает от имени пользователя discobot). Поскольку discobot имеет уровень TL0, я изменил параметр «разрешённые группы для публикации флагов» на TL0. Ошибка остаётся прежней: «У вас нет прав для просмотра запрошенного ресурса».
Теперь всё работает после повышения @discobot до TL1. Не уверен, какой именно вывод следует сделать — просто убедитесь, что ваш пользователь соответствует настройкам как по уровню доверия, так и по группам. Даже в этом случае я не могу объяснить, почему раньше это работало, а потом перестало.
Хм, не уверен
Но рад, что всё работает.
Я связался с разработчиком, который внёс изменения, чтобы узнать, есть ли ещё что-то, но, возможно, стоит подождать дополнительных сообщений, чтобы глубже разобраться, раз у вас снова всё работает.
Что ж, это работало недолго — возможно, день. Затем @discobot снова потерял возможность помечать сообщения. Чтобы прояснить: это никак не связано с API. Если я имитирую @discobot и просматриваю темы, значок флага недоступен. Если же я затем изменю уровень доверия @discobot — даже понизив его — значки флагов снова появятся. Я постараюсь описать проблему точнее, но что-то явно не так.
Кроме того, я не знаю, уникальна ли эта проблема для @discobot. Я просто использую @discobot, потому что это пользователь, которого естественно ожидать для автоматической маркировки сообщений. И это работало годами.
Кажется, вам стоит проверить это с другим пользователем. Существует специальная логика, которая исключает Discobot и System из групп уровней доверия, поэтому любые операции, основанные на этих уровнях доверия и использующие этих пользователей, дадут некорректные результаты (сейчас они добавляются каждый раз при обновлении вашего форума, а затем вскоре после этого снова удаляются).
Если вы создадите отдельного тестового пользователя для проверки, результаты будут гораздо понятнее.
OK, я создал отдельного пользователя для подачи жалоб через API. Посмотрим, как всё пойдёт…