Похоже, это та же известная проблема, которая вызывает трудности с шаблонами.
everyone-group-unable-to-see-private-templates
В данном случае параметры ai-bot отображаются, но бот просто никогда не отвечает.
Похоже, это та же известная проблема, которая вызывает трудности с шаблонами.
everyone-group-unable-to-see-private-templates
В данном случае параметры ai-bot отображаются, но бот просто никогда не отвечает.
Спасибо за поиск предыдущих проблем!
![]()
Думаю, здесь ситуация аналогичная:
Вы не можете предоставлять анонимным пользователям доступ к чат-боту, поэтому использование trust_level_0 — эффективное решение для вашего случая. ![]()
@Roman, просмотрев код в Discourse, я думаю, что теперь это работает.
Не пора ли закрыть эту задачу и удалить код обратной совместимости?
Это немного сложно. Изначально я добавил опцию everyone, потому что мы хотели позволить анонимным пользователям просматривать гисты. У каждой функции есть свои правила, поэтому я не думаю, что установка разрешённых групп Persona в это значение сделает функцию доступной для всех.
Это всё ещё проблема. Если «Разрешённые группы для бота ИИ» установлено в everyone, бот не отвечает.
Я думаю, что ошибка находится здесь:
return false if (SiteSetting.ai_bot_allowed_groups_map & post.user.group_ids).blank?
Если настройка равна everyone, то это возвращает false, так как 0 отсутствует в post.user.group_ids.
Правильный паттерн — !user.in_any_groups?(SiteSetting.ai_bot_allowed_groups_map),
который содержит специальный случай для everyone:
def in_any_groups?(group_ids)
group_ids.include?(Group::AUTO_GROUPS[:everyone]) ||
(is_system_user? && (Group.auto_groups_between(:admins, :trust_level_4) & group_ids).any?) ||
(group_ids & belonging_to_group_ids).any?
end
Имеет ли смысл запретить выбор «все» для этой настройки? Аналогично тому, как это было сделано в DEV: restrict everyone on whisper groups via a new disallowed_groups attr by renato · Pull Request #37515 · discourse/discourse · GitHub
Да, нам нужно его удалить… @martin планирует это убрать, но это может занять немного времени.