- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
// ==UserScript==
// @name gc
// @namespace gc
// @description gc
// @include http://govnokod.ru/comments
// @version 1
// @grant none
// ==/UserScript==
function isCommentEvil(str)
{
var olo = [
'CrashTesterAnusov',
'guest0',
'huesto',
'barop',
'bagor',
'bagop',
'guestinho',
'BagorCtretora'
];
for (var ii = 0; ii < olo.length; ++ii)
{
if (olo[ii] == str)
return true;
}
return false;
}(function ()
{
var comments = document.getElementsByClassName('entry-comment-wrapper');
for (i = 0; i < comments.length; ++i)
{
var author = comments[i].getElementsByTagName('*');
for (j = 0; j < author.length; ++j)
{
if (isCommentEvil(author[j].text))
{
comments[i].remove();
break;
//var txt = comments[i].getElementsByTagName('*');
//for (var jj = 0; jj < author.length; ++jj)
// {
// switch (txt[jj].className) {
// case 'answer':
// txt[jj].innerHTML = '';
// break;
// case 'entry-comment':
// txt[jj].innerHTML = '';
// break;
// case 'entry-author':
// txt[jj].innerHTML = '';
// break;
// }
// }
// break;
}
}
}
}
) ();
Свиток, написанный Vindicar (http://userscripts.org/scripts/source/393166.user.js) не скрывает комменты в стоке: очень неприятно.
Написал свой. Помогите допилить.
У Виндика-а в свитке идёт сабклассинг процедуры, рисующей комменты. Это гарантирует, что содержимое спамных комментов будет затёрто до того, как юзер их увидит. Как он это делает?
3_dar 01.10.2016 21:35 # −57
guest 01.10.2016 22:08 # −56
3_dar 01.10.2016 22:16 # −57
guest 01.10.2016 22:38 # −57
guest 01.10.2016 22:50 # −57
CrashTesterAnusov 02.10.2016 11:48 # −121
1024-- 02.10.2016 09:48 # −55
3_14dar 03.10.2016 03:49 # −57
1024-- 02.10.2016 00:18 # −56
А в остальных местах скрывает? Если этот скрипт ещё работает в современных, я б посмотрел к корень конец и попробовал его расширить.
Судя по всему, обработка статических комментариев включена на страницах постов (ветка if), в стоке работает только перехват загрузки аяксовых комментариев (ветка else, функция hijackComments). Соответственно, можно добавить в ветку else (скажем, после строки hijackComments(Options.groups);) условие "если мы в стоке, обработаем статические комментарии":
Поставил скрипт. Работает в современном хроме (а раньше какая-то питушня же была вроде...), только контур поста оставляет. Но это можно исправить, создав свою функцию вроде hideThread и пронеся её в меню.
> содержимое спамных комментов будет затёрто до того, как юзер их увидит. Как он это делает?
Интересный вопрос. Я только вореции @run-at видел: https://wiki.greasespot.net/Metadata_Block#.40run-at
1024-- 02.10.2016 00:37 # −56
https://gist.github.com/1024--/58880b6843a8174d1dde43844ef1d236
1. Работает в стоке
2. Добавляет для стока возможность скрыть пост в стоке*, если последний комментарий - гость (см. опцию "скрыть пост в стоке" в выпадающем списке настроек действий для комментария)
* правда, тогда информация о его обновлении теряется, но с этим вопросом - к Борманду, у которого есть возможность удалить комментарии из стока, не потеряв обновления постов за счёт комментариев нормальных людей.
bormand 02.10.2016 07:29 # −56
А чё борманд? Я уже писал, что не буду играть в модератора. Если и получится запилить фичу с удалением - то по индивидуальным спискам в localstorage.
1024-- 02.10.2016 09:44 # −56
У Вас есть (потенциальная?) возможность отдать клиенту либо список недавних комментариев для самофильтронии, либо такой сток, как будто пользователи из предложенного списка вообще не существуют.
bormand 02.10.2016 10:00 # −56
Да, могу запилить. Надо?
> пользователи из предложенного списка вообще не существуют
Нет, навскидку не придумывается алгоритм, который сможет это делать за миллисекунды по списку, прилетевшему от клиента.
1024-- 02.10.2016 10:54 # −56
А чёрт знает, может и надо. Если запилить клиентский скрипт, который будет делать из этого сток без неугодных пользователей, то у Стертора будет полная иллюзия, что этих неугодных пользователей вообще нет.
Ещё можно в экспериментальном режиме запилить режим единого диалога (если наложить на это имиджбордовский бормоскрипт да проверить, чтобы работали кнопки "ответить").
>> список недавних комментариев
> Да, могу запилить
> за миллисекунды по списку
Ну так скрипт Стертора всё равно вытянет столько комментариев, сколько нужно, чтобы сформировать сток. А если применит фильтрацию "считать все комментарии спамом, если в них нет /ы{5+}/", то вообще конец.
inkanus-gray 02.10.2016 11:06 # −55
voodoodal16 02.10.2016 14:02 # −56
1024-- 02.10.2016 16:03 # −56
voodoodal16 02.10.2016 16:49 # −56
guestinh0 02.10.2016 23:06 # −56
Vindicar 02.10.2016 13:24 # −54
Таким образом, перехват нужной функции становится тривиален.
Хотя сейчас я бы задействовал MutationObserver (https://developer.mozilla.org/ru/docs/Web/API/MutationObserver) для этой цели. Универсальнее (а вдруг кто-нибудь сделает скрипт для динамического обновления комментариев, или еще что...) и не зависит от кода на странице.
И да, userscripts.org умер (по-крайней мере у меня не открывается уже давно). Нужный тебе скрипт лежит на https://greasyfork.org/ru/scripts/2501-gk-filter/code
Vindicar 02.10.2016 13:36 # −56
Что касается параметра run-at - да, это вариант. В сочетании с MutationObserver можно вырезать спамецЪ уже в момент его появления. Я этим приемом пользовался в другом скрипте:
https://greasyfork.org/ru/scripts/2498-tumblr-savior/code , строка 490 и ниже.
3_14dar 03.10.2016 03:51 # −58
voodoodal16 02.10.2016 13:52 # −56
Можно коротенький пример?
Vindicar 02.10.2016 14:21 # −56
voodoodal16 02.10.2016 14:37 # −56
Vindicar 02.10.2016 14:51 # −54
Ты можешь просто присвоить этому полю свое значение (свою функцию), и она будет вызвана вместо оригинала. Вот код из оригинального скрипта:
Сначала сохраняем старую функцию, потом пишем новую. Новая вызывает старую (oldLoadComments.call(this,aElemTrigger) ;) в том же контексте (this) и с теми же параметрами (aElemTrigger), с какими была вызвана сама.
Старая функция выполнит подгрузку комментариев. Поскольку загрузка - штука асинхронная, то приходится ждать, пока они не появятся (для этого написана waitForSelector). Когда появились - обрабатываем, этим занимается processComments. Всё происходит достаточно быстро, пользователь ничего не замечает.
Единственное, у userscript'а свой объект window, а для доступа к объекту страницы нужно использовать unsafeWindow. Чтобы эта возможность была доступна, в заголовке userscript'а прописано @grant unsafeWindow.
voodoodal16 02.10.2016 14:56 # −56
Vindicar 02.10.2016 15:05 # −55
voodoodal16 02.10.2016 15:09 # −56
Vindicar 02.10.2016 15:32 # −55
Объяснять по буквам мне все же немного лень. ^^
Тем более что азы JS можно подучить за вечер, на том же javascript.ru есть вполне приемлемые туториалы.
voodoodal16 02.10.2016 15:35 # −56
Ладно. Спасибо и на этом.
bakagaijin 02.10.2016 15:16 # −56
guest 04.10.2016 02:25 # −56
У того пукан кипит
CrashTesterAnusov 05.10.2016 11:26 # −119