Вообще, для чего нужны дневнички? Для меня, например, ответ очевиден - чтобы сохранить какую-то информацию, которая может еще понадобиться. Форум для этого вполне подходит - под рукой всегда и везде, да и аккаунт и так уже есть, не надо региться где-то еще. Но, разумеется, такой вариант хранения информации имеет и свои существенные недостатки.
А именно - система комментирования. Крайне кривая и бажная, и @SAS, похоже, вряд ли когда выберет время, чтобы отладить ее. В самом деле, какой смысл в модерации дневничка на этом движке, если пользователь, хоть раз отписавшийся, может продолжать создавать сообщения и восстанавливать удаленные независимо от настроек дневника? Собственно, и закрытие, и даже полное удаление дневника оставляет возможность читать и писать в нем.
Не, разумеется, можно создавать запись в дневнике, сразу выставив запрет комментирования, и тогда она останется закрытой. Но, во-первых, иногда все-таки кто-нибудь пишет что-то действительно полезное и интересное, дополняющее или уточняющее изложенное в записи. А во-вторых, это просто не весело.
В самом деле, очень похоже на то, что некоторые пользователи в принципе не способны постичь, что писать что-либо можно для себя, а не для того, чтобы привлечь к себе внимание или собирать "лайки". И уж тем более они не могут допустить мысль, что их такое ценное мнение может кому-то быть просто не нужным и не интересным.
Отсюда и описанная проблема - чистить мусор в дневничках бывает проблематично, как из-за многочисленных багов, так и из-за отсутствия такой полезной на предыдущем движке форума функции, как запрет комментирования отдельным пользователям. Особенно если учесть, что намеков в виде однократного удаления комментария некоторые просто не понимают, наоборот, оскорбленный этим самым в лучших чувствах дятел может быть крайне настойчивым, и сутки напролет сидеть на форуме, восстанавливая удаленные сообщения, дабы непременно донести свою такую ценную (ибо единственную) мысль до страждущего человечества.
В общем, отстой. Кто-то искренне не может понять, что я создаю записи вовсе не для оживленной дискуссии, и что мне наxpен не нужен тут бессмысленный флуд, не относящийся к делу. У кого-то просто воспламеняется пердак от прочитанного и он желает обязательно излить негодование и донести свою точку зрения. Да и вообще, мало ли на свете дураков и просто странных людей, чьи "чувства верующих" внезапно может оскорбить вообще что угодно?
Кто-то верит в б-га, кто-то в подлинность "велесовой книги", кто-то в атлантов или пришельцев, кто-то в современный игропром. Кто-то истово верует в то, что компьютерное пиратство является воровством, кто-то в то, что использование старых версий ПО является жуткой ересью. И это было краткое перечисление странностей (мягко говоря), встречающихся конкретно на этом форуме. Не говоря уж об откровенных неадекватах (типа тех же чайлдфри и анти-чайлдфри).
Ну и зачем нам в нашем дневничке такие люди? И что с ними делать? Не писать о вещах, которые могут оскорбить чьи-либо чувства? Не вариант, как уже упоминалось выше, чувства идиота может оскорбить что угодно, и тут не угадаешь. Сидеть сутками и чистить мусор в комментах? Да нафиг надо. В конце концов, мы программисты или уже где? Мы живем в 21-м веке, где, как известно, вкалывают роботы - счастлив человек.
Отсюда очевидное решение - переложить заботу о чистоте дневничка на робота. Который не знает усталости, не отвлекается и ничего не забывает. Собственно, так даже веселее - кто-нибудь пишет глупый пост, а он просто исчезает. Пациент возмущается и пишет гневный пост - а он снова исчезает. Настойчивый дятел начинает лихорадочно стучать по кнопочкам, раз за разом восстанавливая удаленные посты и дополняя их, изливая свое негодование, искрясь "остроумием" и "ехидством" - а оно все равно исчезает. Но дятел потому и дятел, что он "самый умный" и решает взять дневничок измором, уверенный, что автору рано или поздно надоест и не понимая, что соревнуется с роботом. Который по определению превосходит в терпеливости. Да и в уровне интеллекта, видимо, тоже.
Традиционно, после лирического отступления, переходим к практике.
С чего начать? Разумеется, с логина на форуме. Оформим это в виде отдельной подпрограммы. Так красивше, да и мало ли еще где-нибудь пригодится.
Теперь инициализируем робота и зададим ему все необходимые параметры для работы. Описание настроек приведем ниже.Код:sub login { my ($response, $html, %token); my $cookie = HTTP::Cookies->new(); my $browser = new LWP::UserAgent(agent => $agent); $browser->cookie_jar($cookie); $response = $browser->head('https://www.old-games.ru/forum/'); $cookie->extract_cookies($response); $cookie->scan(sub{$token{$_[1]}=$_[2]}); my @post = ['login' => $_[0], 'password' => $_[1], 'register' => 0, 'remember' => 1, 'cookie_check' => 1]; $cookie->set_cookie(0, 'xf_session', $token{'xf_session'}, '/', 'old-games.ru'); $response = $browser->post('https://www.old-games.ru/forum/login/login', @post); $cookie->extract_cookies($response); $cookie->scan(sub{$token{$_[1]}=$_[2]}); $cookie->set_cookie(0, 'xf_user', $token{'xf_user'}, '/', 'old-games.ru'); $response = $browser->get('https://www.old-games.ru/forum/'); $token{'_xfToken'} = $1 if ($response->content =~ /_csrfToken:\s*"([^"]+)"/); return %token; }
Здесь:Код:#!/usr/bin/perl use HTTP::Cookies; use LWP::UserAgent; $login = 'Helmut'; $password = ''; $mode = 1; $hardmode = 0; $cooldown = 120; @whitelist = (); @blacklist = ('Grue13', 'coole', 'Bato-San', 'Vissavald'); $message = 'Ваше мнение очень важно для нас. Мы вам перезвоним.'; $url = 'https://www.old-games.ru/forum/xfa-blog-entry/esche-odin-poleznyj-bot.4868/'; $agent = 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'; $timer = time; $jar = HTTP::Cookies->new(); $ua = new LWP::UserAgent(agent => $agent); $ua->cookie_jar($jar); %cookie = login($login, $password); $jar->set_cookie(0, 'xf_user', $cookie{'xf_user'}, '/', 'old-games.ru'); $jar->set_cookie(0, 'xf_session', $cookie{'xf_session'}, '/', 'old-games.ru'); @request = [ 'reason' => $message, 'hard_delete' => $hardmode, '_xfConfirm' => 1, '_xfNoRedirect' => 1, '_xfResponseType' => 'json', '_xfToken' => $cookie{'_xfToken'} ];
1) $login, $password - понятно что.
2) $mode - режим работы. 1 - писать могут все, кроме пользователей из черного списка. 2 - писать могут только топикстартер и пользователи из белого списка. 3 - писать может только топикстартер.
3) $hardmode - при вдумчивом исследовании перехваченного форумного трафика обнаружилась весьма интересная возможность - если выставить эту переменную в 1, то сообщения будут удаляться именно что безвозвратно. Причем штатными средствами форума использовать это, похоже, почему-то нельзя. Хотя что мешало добавить галочку в окно удаления постов? Что, в итоге, придает нашему роботу новый смысл - его можно использовать и для обычного, штатного удаления постов. Кстати, ранее "недоудаленные" посты таким образом тоже можно очистить (посмотрев их номера в коде страницы). Разве что, следует учесть один нюанс - если мы выставим переменную в 1, то сообщение именно что исчезнет, и пациент не увидит $message. тут уж надо решать, что нам интереснее в данный момент - просто убрать мусор или побесить идиота.
4) $cooldown - время в секундах, через какое робот будет перепроверять форум. Две минуты, по-моему, в самый раз, чтобы не нагружать форум.
5) @whitelist - понятно, белый список пользователей.
6) @blacklist - Список пользователей, чьи сообщения заведомо не несут никакой ценности и не представляют ни малейшего интереса.
7) $message - собственно сообщение, оставляемое на месте удаленного поста (в режиме $hardmode = 0). На форуме, кажется, называется "причина удаления".
8) $url - ссылка на подлежащий модерации дневник.
9) $agent - просто подпись. Каким именно браузером будет притворяться наш робот.
Далее, создаем вечный цикл с пропуском итераций по таймеру, помещаем в него парсер сообщений и сам удалятор. Ну и пусть лог где-нибудь в файл пишет, на всякий случай.
Вот, собственно и все. В принципе, ничто не мешает кому-нибудь на основе этого маленького, но полезного чистильщика создать своего, с прямо противоположными целями - написанием постов.Код:while () { next if ($timer + $cooldown >= time); $response = $ua->get($url); $html = $response->decoded_content; while ($html =~ m/<li\s+id="comment-(\d+)"\s+class="comment">(.+?)<\/li>/sgi) { ($number, $body) = ($1, $2); $user = $1 if ($body =~ /<a href="members\/[^"]+" class="username poster" dir="auto">(.+?)<\/a>/si); $content = $1 if ($body =~ /<blockquote class="messageText ugc baseHtml">(.+)<\/blockquote>/si); if ($user ne $login && ($mode == 3 || ($mode == 1 && (scalar grep {$_ eq $user} @blacklist)) || ($mode == 2 && !(scalar grep {$_ eq $user} @whitelist)))) { $response = $ua->post("https://www.old-games.ru/forum/xfa-blog-comment/$number/delete-comment", @request); open(my $fh, '>>:utf8', 'botlog.txt'); print $fh "$user\n$content\n\n"; close $fh; } } $timer = time; }
И можно будет даже устроить войну ботов. Но, прямо как в известном анекдоте, есть один нюанс. Чистка мусора - б-гоугодное дело, а вот спам - прямо наоборот. И спамера кто-нибудь обязательно тюкнет банхаммером по темечку.Код:@request = [ 'message_html' => "<p>$message</p>", '_xfToken' => $cookie{'_xfToken'}, '_xfNoRedirect' => 1, '_xfResponseType' => 'json' ]; $response = $ua->post(($url."add-reply"), @request);
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Комментарии
Сортировать комментарии по