Форум Jut.su

Тема не про ролевую. Как добавить в черный список пользователя в чате?

2023-03-26T02:38:42+03:00 2023-09-07T11:29:28+03:00
Анбу
+ 261
Активный участник
02:38, 26.03.2023 №1
+ 18
Alpha Scott
15:26, 27.03.2023
В настоящее время возможность прекращения отображения сообщений определенного пользователя в чате не предусмотрена, несмотря на то, что такое вполне легко провернуть в личных сообщениях. Периодически ломая голову почти три месяца, я всё-таки придумала, как это можно осуществить. Но обо всем по порядку.

Как должна работать программа? Если не сильно углубляться в детали, она должна получить на вход какого-то пользователя (или список пользователей), затем пробежаться по всем сообщениям в чате и сравнить, было ли какое-то из них написано этим пользователем. Если условие выполняется, мы просто заменяем содержимое этого сообщения на пустую строку так, что от него ничего не остается. "Можно проверить только верхнее сообщение, это более эффективно", но путем несложных экспериментов оказалось, что чат полностью обновляется после каждого добавленного в него сообщения, и те изменения, что мы вносили ранее, просто сбросятся.
Для этого, действительно, лучше всего подходит язык JavaScript. Здесь присутствует что-то от парсинга, но так как нам нужно еще и изменить содержимое страницы, отлично будет написать какой-нибудь скрипт и вставить его себе в консоль в панели разработчика.

И что дальше? Итак, в нашем распоряжении чистый ЖабаСкрипт, Ютса и панель разработчика. Более формально выведенный нами алгоритм выглядит так:
  1. Создаем список с никами пользователей.
  2. Получаем коллекцию сообщений чата по классу.
  3. В цикле проверяем совпадение авторов сообщений с никами в списке. Если совпало — заменяем HTML-код содержимого на пустую строку или добавляем CSS-свойство display: none
  4. Повторяем операции 2-3 бесконечное количество раз.

И если с первыми тремя пунктами всё оказалось довольно просто, то последний меня хорошо озадачил. Простой while(true), бесконечный цикл, прерывает выполнение остальных JS скриптов, созданных когда-то Витасом. Таким образом, если вы введете в консоль while(true), вы сможете только просматривать чат, но писать в него не выйдет. Я долго не понимала, в чем же дело, пыталась найти какие-то подсказки в открытом коде расширения по Ютсе, добавляла в цикл задержку, но всё без толку. Только сегодня ночью до меня дошло: простой while(true) — синхронный код, то есть он выполняется в основном потоке и своим действием не дает выполняться другим интерактивным элементам. Мне же нужно было добавить асинхронности, дабы мой скрипт выполнялся параллельно со всеми процессами на Ютсе. Благо JavaScript позволяет осуществлять и такое.
Осознание проблемы — первый шаг к ее решению. Я знала только две фичи из этих приколов многопоточности, это async и await, но после усиленного поиска в Интернете, осознала еще и какие-то промисы. В общем, чтоб проверить свою гипотезу на работоспособность и не сильно париться с новой теорией я просто скопировала какой-то код с форума, посвящённого программированию, и заменила основные моменты на свои функции, которые вывела еще в пунктах 2-3 (возвращаясь к списку задач).

В ходе тестирования скрипта вывела несколько его преимуществ и недостатков. Итак, плюсы: хотя бы работает, неплохо работает. Минусы: из-за задержки не всегда получается сразу убрать сообщение, придется вводить в консоль заново после перезагрузки страницы, работает только на компьютере.

Что получилось? Ниже представлен сам код с комментариями по его работе. Для использования зайдите на сайт Ютсы, нажмите F12, выберете "Консоль" и вставьте код, только не забудьте внести свой список (каждый элемент через запятую в кавычках). Оно выводит какую-то ошибку в консоль, но оно работает. Я правда сама не до конца понимаю, каким образом. Можете сразу закрыть панель разработчика, скрипт продолжит свое действие.

Код


Как оно работает?
Сравните сами.
Прикрепленная картинка

Прикрепленная картинка

Если кто-то доведет это детище до ума, буду благодарна, а может и сама это сделаю, просто уже немного спать хочется. Всем бобра и спасибо за внимание!
Каге
+ 12
Активный участник
tsuchigumo (26.03.2023, 02:38) писал: придется вводить в консоль заново после перезагрузки страницы

В принципе, есть различные расширения на браузер, которые позволяют автоматизировать работу подобных скриптов. Один раз закинул этот скрипт, установил в настройках сайты/конкретные страницы сайтов, на которых он будет выполняться – и всё готово. В качестве одного из таких расширений могу посоветовать Tampermonkey, служит мне верой и правдой довольно долгое время:)
Каге
+ 1194
Общительный
КАКАЯ ЖЕ ОНА УМНАЯ И КРУТАЯ И ВООБЩЕ СПАСИБО ЗА ТО, ЧТО СИДИШЬ НА ЭТОМ ФОРУМЕ!
Каге
+ 367
Общительный
Очень годно!
Анбу
-1004
Активный участник
смертёнок
11:25, 26.03.2023
Каге
-695
Общительный
Не одобряю осуждаю
Ученик
-7
Новичок
Какая-то сатанинская херня. Не пользуйтесь этим, не продовайте душу диаволу. Она ведьма!
Каге
Общительный
Каге
+ 714
Общительный
Опять напилась кефира просроченного и буянит. Я такое даже под топленым молоком не напишу, а тут так налакалась, маме расскажу по попе надает.
Каге
+ 1120
Общительный
Andrewson
19:01, 26.03.2023
большевики спасибо!
Каге
+ 1834
Общительный
Жесть
Каге
Общительный
Никто и не понял, что она написала
Можете удалять тему
Гл. судья
Последний квинси
01:04, 27.03.2023 №11
+ 6
Тему понял.
Не удаляю.
Каге
+ 340
Общительный
11:58, 27.03.2023 №12
+ 2
Mr Yarыk
12:09, 27.03.2023
Раз сам мино сказал, то тему все-таки удалить нужно
Каге
+ 538
Активный участник
Очень годно, как я понял была проделана гиганская работа, короче, лайк
Ученик
+ 2
Новичок
Спасибо, наконец-то я смогу банить даню чтоб он не слал мне всякие любезности
Саннин
+ 171
Новичок
это круто
Каге
Общительный
Тему до сих пор так и не поняли
Каге
+ 1152
Общительный
главное что мино понял всё остальное не важно
Джонин
Участник
- Я и Эля
Изгой
Новичок
Kaminoyari, а что ты косплеишь неко девочку?
 
Доступ закрыт.
  • Вам запрещено отвечать в темах данного форума.