Удаление другого пользователя из чата создает уведомление, которое нельзя закрыть

Как воспроизвести

  1. Создайте временного пользователя. (Не забудьте, что можно использовать «плюс-трюк». Например, username+что-то@gmail.com.)
  2. Отправьте сообщение временному пользователю. (Это создаст уведомление высокого приоритета.)
  3. Удалите временного пользователя из личного сообщения. (Надеюсь, ваше правописание лучше моего.)
  4. Если вы администратор, войдите в систему от имени временного пользователя и попробуйте удалить уведомление. (Ха-ха-ха!)

Временное решение

Администратор может удалить сообщение, что приведёт к удалению уведомления. Сложность заключается в поиске уведомления. Я управляю этим с помощью следующего запроса:

-- [params]
-- int :user_id 

SELECT * 
from notifications 
where user_id = :user_id
      and high_priority
      and not read

Я не думаю, что пользователь сможет удалить уведомление самостоятельно, так как он не сможет открыть личное сообщение, даже если у него есть ссылка.

Возможное решение

Когда кого-то удаляют из диалога, также удаляйте уведомление.

То есть, если я удалю кого-то, он получит уведомление, но если я удалю это, то он его не получит?

Может ли пользователь просто нажать кнопку Закрыть в меню уведомлений?

Ох, господи. Я даже не знал, что такая кнопка существует. Теперь, когда я о ней знаю, она действительно очищает уведомления.

О, понятно, теперь я понимаю, что вы имеете в виду.

На всякий случай, я всё ещё считаю, что уведомление должно удаляться/очищаться, если получатель больше не может просматривать сообщение. Наличие запасного варианта (кнопка «Отклонить») — это хорошо, но всё же это немного похоже на газлайтинг пользователя, когда уведомление остаётся. Кроме того, кнопка закрывает всё, что может быть не тем, что хочет пользователь. (Хотя, справедливости ради, большинство людей заметят проблему только если они очистили все свои остальные уведомления обычным способом.)

Привет, Джон, это, безусловно, небольшая досада, от которой можно легко избавиться, но мне не удалось воспроизвести проблему:

Уведомление внутри меню пользователя также исчезает сразу после клика по ЛС (что приводит к странице «Ой! Страница не найдена или является приватной», так как у аккаунта нет доступа к ней).

Может, я что-то упустил в твоих шагах воспроизведения?

Я тестировал это с модератором на нашей производственной системе, и страница «Ой! Эта страница не существует или является приватной» не очищала уведомление. Но наша производственная система всё ещё находится на версии 2.9.0.beta14. Только что, когда я провёл этот тест на своём собственном сервере Discourse версии 3.1.0.beta2, уведомление действительно исчезало, когда получатель переходил по ссылке. Возможно, эта часть проблемы уже исправлена?

Однако я не вижу способа, чтобы получатель мог увидеть сообщение после того, как его удалили из темы личного сообщения. Я мог бы передать ссылку получателю вне системы, но в реальной ситуации это маловероятно. Вместо этого у получателя останется уведомление без возможности узнать ссылку или даже того, кто его инициировал. Вот скриншот с совершенно нового аккаунта, который получил уведомление о личном сообщении, к которому у него нет доступа:

Это на версии 3.1.0.beta2. Вы можете увидеть добавленное уведомление, если у вас открыто другое окно с видом временного пользователя. Но после удаления пользователя нет элемента для выбора.

PM

Я не вижу «A test pm» ни в видео, ни на скриншоте вида пользователя Dummy. Мне показалось гораздо проще отлаживать с совершенно новым тестовым пользователем.

Вы используете устаревшее меню уведомлений, которое также связано с уведомлениями в меню аватара.

Мне удалось воспроизвести вашу проблему с устаревшим меню уведомлений.

Уведомления действительно были переработаны, и устаревшее меню уведомлений в будущем перестанет поддерживаться и будет удалено.

Рекомендую вам изменить настройку меню навигации на «Боковая панель» или «Выпадающее меню в заголовке» :slight_smile:

Вчера я уже сообщал об этой той же ошибке (не нашёл эту тему). Похоже, проблема зависит от навигации в устаревшем меню и присутствовала даже в последних версиях 2.8.

Обходной путь с кнопкой «Отклонить все» не работает, если это единственное оставшееся уведомление, так как в этом случае кнопка отключена. Возможно, она работает, если уведомлений больше, но тогда пользователь может отклонять важные сообщения.

В текущем виде пользователи просто будут путаться и/или расстраиваться. Тех немногих, кто пожалуется, могут попросить использовать кнопку, но это сработает только в некоторых случаях. Не стоит ли переместить это обсуждение в bug?

В канале bug была открыта новая тема о схожем поведении с более подробными инструкциями по этому вопросу:

Поэтому я закрою эту тему с пометкой «решено» в пользу той. Это незначительная проблема, но размещение её в bug кажется более уместным, особенно учитывая, что о ней сообщали неоднократно.