Википедия:Форум ботоводов

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Боты

Правила · Рекомендации · Запросы · FAQ · Орден · Форум

Маркер "правка бота"[править код]

Понятно, что можно самому погонять по разным страницам в разных режимах и под разными аккаунтами и посмотреть. Но зачем если кто уже знает ответ или где его прочитать.

В action=edit как работает флаг bot? То есть если не из-под аккаунта бота правку с этим флагом сделать, то всё равно будет помечена как "правка бота"? А если из-под аккаунта бота правку без этого флага сделать, то "правка бота" не будет? Или это всё автоматически к типу аккаунта подвязано и ручные установки игнорируются? И где и когда вообще в истории правок влияние этого флага видно? — Bot of the Seven (обс.) 17:37, 29 августа 2019 (UTC)

  • С учётки со флагом бота можно делать правки без этого маркера. С учётки без флага делать правки с маркером, наверное, нельзя, но я не проверял. Когда правка помечена этим флагом, имеются два эффекта: 1) правка не видна в списке наблюдения и свежих правках, если включена настройка "не показывать правки ботов", 2) если правка ещё и как малая помечена, то, будучи сделана на СОУ, не создаётся уведомление юзеру "У вас новое сообщение". MBH 17:49, 29 августа 2019 (UTC)
    • Согласно "Список сокращений" на Служебная:Список_наблюдения "б правка бота" Вопрос где это "б" увидеть и откуда прилетает. То есть это наш внутрипроектный уровень логики (правка участника из группы ботов или нет) или чисто формальный по флагу в action=edit. В общем, потом покопаюсь перекрёстными правками, если настроение будет. На файлы Help надежда эфемерная. — Bot of the Seven (обс.) 18:38, 29 августа 2019 (UTC) Кстати, меня планово произвели в автоподы.
      • Что вам непонятно из того, что я написал? "Бэ" можно увидеть, очевидно, в списке наблюдения MBH 10:52, 30 августа 2019 (UTC)
        • Ну вот а в своём вкладе я этой "б" не вижу ни одной - хотя для ряда правок с сервера флаг bot в них выставлялся. Не вижу, потому что в данных пространствах не показывается? Не вижу, потому что если аккаунт не имеет статуса бота, флаг bot автоматически сбрасывается? Ещё по какой причине? Бог весть. Я просто думал, что есть какая известная схема, которую назовут. А так экспериментами самому всё можно потихоньку понять. — Neolexx (обс.) 11:55, 3 сентября 2019 (UTC)
          • Видимо, потому, что в СН и свежих правках (?) эти буквы ставятся, а в истории страниц и вкладе - нет. Неужели вы не заметили эту закономерность? MBH 12:45, 3 сентября 2019 (UTC)
            • Bot of the Seven у меня в СН, но и там "б" не появлялось. Скажем, последние 3 правки в истории делались через API с сервера с флагом bot, но "б" в СН не появилось. Остаются версии либо автоматического сброса флага, либо что он где-то фиксируется но неизвестно где. Либо что-нибудь третье. — Neolexx (обс.) 12:59, 3 сентября 2019 (UTC)
              • Так, ээээ, эта учётка - не бот. Вот эта учётка - бот. MBH 13:10, 3 сентября 2019 (UTC)
                • Макс... Самоцитата исходной реплики: "В action=edit как работает флаг bot? То есть если не из-под аккаунта бота правку с этим флагом сделать, то всё равно будет помечена как "правка бота"?"
                  ОК, предварительно вроде бы установили, что в таком случае (Bot of the Seven) установленный флаг (параметр, поле) bot в action=edit правке не препятствует (движок правку не отвергает), но и какого-либо видимого эффекта не производит. И обратным образом правки бота всегда помечаются "б", ставишь в API флаг (параметр, поле) bot или нет.
                  То есть флаг (параметр, поле) этот либо бесполезная штука, оставшаяся с прошлого, либо её точное предназначение какое иное. — Neolexx (обс.) 13:28, 3 сентября 2019 (UTC)
                  • Вам следует прочитать первое моё сообщение в этом треде. В первых двух его предложениях даны ответы на ваш вопрос (вы снова неправы). В остальных предложениях дан ответ на другой ваш вопрос. Читайте внимательнее, что я пишу: это очень помогает пониманию процессов и механизмов в вики ;) MBH 13:34, 3 сентября 2019 (UTC)
                    • Особенно еnlightening было второе предложение: "наверное, нельзя, но я не проверял". С такой инструкцией - хоть в космос лети, смело...)
                      Ещё почитав здесь, порыскав и проанализировав Служебная:Свежие_правки, вроде бы понял. См. также mw:Manual:Bots#The_"bot"_flag
                      • Если аккаунт не входит в группу ботов, то его правки записываются без флага bot. Установлен флаг в вызове API или нет - система его просто игнорирует (эквивалент "флаг не установлен").
                      • Если аккаунт входит в группу ботов, то состояние флага при правке записывается и хранится 30 дней с момента правки.
                        Если флаг был выставлен, то в СН и свежих правках он отмечается буквой б, а правки можно отфильтровывать как "правки ботов".
                        Если флаг был сброшен, то считается, что это аккаунт бота, но вот эти конкретные правки ботовладелец считает ручными, а не ботоподобными. И б под фильтры на них лепить не нужно.
                    • В плане последнего можно сравнить в свежих правках расстановку приветствий на СО от QBA-II-bot и от DimaBot Neolexx (обс.) 16:14, 3 сентября 2019 (UTC)

Переименование учётной записи бота[править код]

Ещё раз огромное спасибо всем помогавшим в теме #Как начать раБотать? и в #Использование хостинга Wikimedia Toolforge
Я теперь займусь собственно реальными ботами, а не "Hello, world!"ами.

Такой может глупый вопрос, на который ответа пока не нашёл. Если по моей просьбе бота переименуют. Был NeolexxBot, стал, скажем, NeolexxFoobar. Могут возникнуть какие проблемы с логинами? Например, с полученным на #Шаг 0? В общем-то не должны, но, поискав, решил отдельно спросить. — Neolexx (обс.) 12:21, 21 августа 2019 (UTC)

  • Вроде сброс ботопаролей происходит при смене основного пароля. Про переименование не знаю, но, теоретически, задача ещё масштабнее смены пароля. — Vort (обс.) 12:23, 21 августа 2019 (UTC)
  • Но, судя по обсуждению, это не проблема — ботопароли и удаляться и меняться должны без проблем. — Vort (обс.) 12:24, 21 августа 2019 (UTC)
  • Какие проблемы?... В боте вы логинитесь, используя текущие логин и пароль. Вот там поправьте - и никаких проблем не будет. MBH 13:18, 21 августа 2019 (UTC)
    • (Это я же, Neolexx). А кто его знает, какие проблемы. Настолько всё недокументировано, а что документировано - то порой в диапазоне свежести 2005-2010 годов. Так что и получается как современный американский английский изучать по случайным отрывкам Библии короля Якова...
      Пишу с аккаунта во-первых чтобы о нём сообщить на всякий случай, во-вторых излить фрустрации, в-третьих всё равно 15 правок набрать хочу для статуса автопода. — Bot of the Seven (обс.) 20:46, 23 августа 2019 (UTC)
      • Не попутает ли кто с Bot of the Six? — Vort (обс.) 20:58, 23 августа 2019 (UTC)
        • Идея в преемственности, а не в введении в заблуждение. Был Six, будет Seven. Microsoft же не боится, что Windows 7 и Windows 10 перепутают. Плюс Seven схоже с моим кратким именем Се́ва, но это побочный бонус. Кстати, мой ещё не бот, а Six уже полгода как не бот, всё на ручной тяге, которая и поднадоела.
          P.S. Есть идея, почему "древние Гамми" не любили длинный дефис в подписях. По-моему, у Perl именно с ним какие-то заморочки. Уже давно его с UTF8 подружили, кириллица, арабский, даже эмодзи - глотает и выплёвывает. А вот длинный дефис то на выходе в какое-то â превратит, то POST в задумчивость введёт. А это сейчас Perl на манер латинского, а тогда основной средой подо всё был. Вот и заменили на -- Но это идея, а не утверждение. — Bot of the Seven (обс.) 21:07, 23 августа 2019 (UTC)
          • Об этой идее лучше написать на ЛС бота. — Vort (обс.) 21:10, 23 августа 2019 (UTC)
            • Какого бота, первого или второго? (при том что оба не боты). И о какой идее, первой или второй?
              Конечно, если коллега Cat of the Six желал бы узурпировать названия аккаунтов по схеме "Something of the (Numeral by words)" как слишком похожие на его аккаунт, то проблема есть и её стоит обсудить.
              С другой стороны текущая ситуация всяко не слишком казуальна, скажем так: когда участники в полуручном режиме поддерживают работу шаблона с 79 (на сегодня) подписчиками на ЛСО участника (бывшего бота) - при этом сами они отношения к владельцу аккаунта не имеют. — Bot of the Seven (обс.) 21:22, 23 августа 2019 (UTC)
              • Первой. Этого. Что-то типа «Бот будет выполнять часть функций, которые раньше выполнялись с учётной записи Bot of the Six». — Vort (обс.) 21:25, 23 августа 2019 (UTC)
                • А какие действия здесь "выполнялись с учётной записи Bot of the Six"? Ни один из текущих подписчиков вообще никогда не получал сообщений в какой-либо форме с аккаунта Bot of the Six. Разумеется, если я запрошу статус бота, то его планируемые действия укажу, чтобы формальности были в порядке. (Надеюсь, проект ещё не дошёл до стадии решений типа "работа шаблона {{userbox/Получатель приглашений на выборы}} должна обеспечиваться исключительно и строго вручную и только с ЛСО Bot of the Six" :-) — Bot of the Seven (обс.) 21:47, 23 августа 2019 (UTC)
                  • Можно посмотреть заявку на статус бота участника Bot of the Six и его вклад. Он переводил авиакарточки (не очень успешно), планировался как простановщик шаблонов типа «статья проекта жд транспорт», «rail-stub» и тому подобной работы (кажется, что-то из этого он даже делал — можно проверить). Идея рассылать с его помощью уведомления пришла гораздо позже и (ввиду отсутствия каких-либо получателей) не была реализована кроме как вручную, а после этого у меня случился вики-отпуск и идея померла (а шаблон люди медленно, но верно продолжили ставить). — Cat of the Six (обс.) 15:22, 24 августа 2019 (UTC).
                  • И да, план "рассылки" был следующий: АВБ находит шаблоны "получатель" на СО и добавляет тему "Выборы в..." (при наличии "новые сверху" - наверх). Либо находит на ЛСУ и отправляет так же на СО следующим прогоном. А пингается только бот и только при правках в Ш:Актуально. — Cat of the Six (обс.) 15:25, 24 августа 2019 (UTC).
                    • От имени владельца приношу извинения, если моя реплика ранее звучала как намёк, что аккаунт бывшего бота изначально получали неизвестно зачем и нигде никогда толком не работало. И в мыслях такого не было, имел в виду только шаблон и его поддержку через СО бота.
                    • AWB у хозяина тоже есть. Однако в данном случае текущей задачей является создание не бота, а "спящего демона". То есть чтобы никуда не бегал и страницы массового не создавал / не правил, - но чтобы нечто происходило при неком внешнем относительно редком событии вне зависимости от того, знает о нём хозяин или нет, есть у него возможность сесть за компьютер или нет. В задаче есть пара-тройка нетривиальных моментов. Будет время - изложу здесь в отдельной теме. — Bot of the Seven (обс.) 18:50, 24 августа 2019 (UTC)
      • О чём вы? Что вы хотите, чтоб вам было документировано? Какое вообще отношение логин и пароль к учётной записи, в которую логинится процесс с лабса, имеют к самому лабсу? На лабсе вы запускаете процесс, в его исходном коде есть подобная строка (пример из моего бота): Site site = new Site("http://ru.wikipedia.org", "MBHbot", "my_password_is_password!");. Вот если вы в ней соответствующие друг другу логин и пароль укажете - процесс залогинится. Переименовались - поменяйте тут логин и всё. КАК ИНАЧЕ МОЖЕТ БЫТЬ-ТО? MBH 21:23, 23 августа 2019 (UTC)
        • Да как угодно быть может, но если всё как вы пишите - то тем и проще. Хотя мой вопрос был прежде всего не о лабсе, а о вообще. Вот есть Pupkin, для него логин-пароль сделали через Special:BotPasswords для работы с хостинга example.com. А потом Pupkin решил переименоваться в SuperPupkin. Тот логин-пароль через Special:BotPasswords останется рабочим или надо заново получать и прописывать в скрипте? Бог его знает. Теоретически - 50/50, а на практике не проверял. Решил не тревожить бюрократов одного эксперимента ради. — Bot of the Seven (обс.) 21:47, 23 августа 2019 (UTC)

Использование хостинга Wikimedia Toolforge[править код]

текущий этап

@MBH, Vort: в продолжение текущей концовки этой темы открываю эту.

В общем-то я не совсем альтернативный :-) и инструкции типа "создайте аккаунт", "запросите доступ" и пр. понимаю. Некогда давно я создал Wikimedia developer account и получил утверждение на бота vvoters - "Check the voting rights status (ru-wiki) and notify if an election has started if notifications are prior requested".

Было это давно и на том я тогда выдохся. Потому что как ни напрягал голову и хелпы, не мог понять взаимосвязи http://tools.wmflabs.org (где требуют войти) и http://toolsadmin.wikimedia.org (где оказываешься после входа, см. справа).
И, основная проблема, нигде ниоткуда не мог понять, как мне собственно куда-нибудь загрузить Perl скрипт и его выполнить. Сколько по ссылкам ни ходил, в итоге круг замыкался и я оказывался всё на той же странице, чей снимок справа.

Можно, наверно, отсюда и начать. Это вообще правильный шаг к цели или я уже сбился с пути? — Neolexx (обс.) 21:07, 19 августа 2019 (UTC)

  • Да простят меня админы Toolforge, но то, что написано в описании инструмента — дело десятое. Главное, что есть логин и парольключ, с которыми можно заходить на сервер и делать там всё, что надо. — Vort (обс.) 05:52, 20 августа 2019 (UTC)
  • Что можно сделать сразу: скачать и запустить PuTTY, выбрать тип SSH, хост login-stretch.tools.wmflabs.org, порт 22, в Connection->SSH->Auth->Authentication parameters->Private key file добавить свой SSH ключ (который вот сюда прописан), да и можно логиниться. — Vort (обс.) 06:02, 20 августа 2019 (UTC)
  • @Neolexx: спасибо за напоминание о существовании Toolforge. Мой бот, оказывается, завис 9 мая. Почему — вопрос интересный. Скорее всего, памяти не хватило и Mono переглючило. Но важно другое: ни один из админов на это внимания не обратил:
  • tools.wikitasks@tools-sgebastion-07:~$ qstat -ext
    job-ID  prior   ntckts  name       user         project          department state cpu        mem     io      tckts ovrts otckt ftckt stckt share queue                         slots ja-task-ID
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2964656 0.64145 0.50000 wp_lint_er tools.wikita NA               defaultdep r     205:23:24:42 2802843.99972 0.00028     0     0     0     0     0 0.00  tsk@tools-sgeexec-0919.tools.     1
  • Vort (обс.) 06:18, 20 августа 2019 (UTC)
    • putty.orgзагрузка, установил. В Connection→SSH→Auth ровно один подраздел GSSAPI Никаких Authentication parameters и Private key там нет. С PuTTY работал мало (не мой тип) но помнится, что сборка там сильно "наколенная" и многие функции в нём - от дополнительных программ, которые отдельно устанавливаются. Может и тут такой случай. — Neolexx (обс.) 10:35, 20 августа 2019 (UTC)
      • @Neolexx: По самому Auth кликнуть надо. Справа появятся группы. Проще, наверно, так сделать: [1]. — Vort (обс.) 10:47, 20 августа 2019 (UTC)
      • Ключ же в нужный формат, по-моему, можно перегнать с помощью puttygen.exe. Но так давно было, что подробностей уже не помню. Может, MBH лучше помнит процедуру. — Vort (обс.) 10:56, 20 августа 2019 (UTC)
        • Перегонять ключ мне, емнип, приходилось не для путти, а для MySql Workbench. Возможно, через путтиген, да. MBH 11:07, 20 августа 2019 (UTC)
  • Я для переноса файлов между своим компом и ФС лабса пользуюсь WinSCP. Настройки. Есть два хелпа, не знаю, чем они отличаются, но мне для настройки заново после переустановки ОС хватает своего скрина. В винсцп есть кнопочка, вызывающая путти и сразу передающая в него длинный ключ, то есть путти никак настраивать отдельно не надо, настроить нужно только винсцп. MBH 11:07, 20 августа 2019 (UTC)
    • Помню, были у меня проблемы с записью на аккаунт инструмента через WinSCP. Ну а скачку можно делать и через wget на свой сервер. — Vort (обс.) 11:13, 20 августа 2019 (UTC)
      • Проблема с записью (и даже чтением) будет та, что сгенерированые тулом файлы будут иметь права типа r-------- и владельца - тул, а винсцп запускается от учётки ботовладельца, а не тула. То есть открытие текстового лога, сгенеренного тулом, в винсцп вполне может завершиться неудачно по этой причине. Надо заходить в путти и либо читать там из консольного текстового редактора, либо оттуда же делать чмод. Да, первое, что надо всегда делать, заходя в путти - команда become [toolname], и только после этого отдавать все команды, запуски, кронтабы и проч. Этой командой мы превращаемся из ботовладельца в тул. MBH 11:21, 20 августа 2019 (UTC)
вошёл

Как Vort и сказал, не туда смотрел. Вот так надо было. В общем, вошёл на сервер (снимок справа), посмотрел, вышел по exit.

  • Всё замечательно, 90's forever, Notepad rulez и все дела. Тем не менее есть какой менее концептуальный способ работы с сервером? Чтобы папки щелчками раскрывать, файлы мышью перетаскивать и прочее упадничество?
  • Более принципиально: этот /home/neolexx вообще где? Если там скрипт какой, его по какому адресу в броузере найти?
  • Другой вопрос: на приличных серверах на видном месте говорят, какой шебанг и mail-daemon у их Perl. Здесь информация строго засекречена, как я понимаю... Шебанг #!/usr/bin/perl или другой, кто знает?
  • В идеале в какой (полу)графической здорово было бы откачать скрипт ниже на сервер, сделать его 755 и выполнить в броузере с результатом в окне "проверка кириллицы" (заодно проверив наличие нужных библиотек). Как бы это всё сделать? — Neolexx (обс.) 11:35, 20 августа 2019 (UTC)
FileZilla site manager
  • Графически - я уже сказал, винсцп. Зайдя через него, вы должны попасть в папку /mnt/nfs/labstore-secondary-tools-home/[your_username]. Из неё вы должны перейти в папку /mnt/nfs/labstore-secondary-tools-project/[your_toolname], это и есть папка вашего тула. В ней есть подпапка public_html, её содержимое отображается в веб по такому адресу: http://tools.wmflabs.org/mbh/. Точнее, начнёт отображаться после того, как вы выполните команду webservice start. MBH 11:43, 20 августа 2019 (UTC)
  • Алсо, папки всех тулов доступны для просмотра всем. Зайдите в тул mbh и посмотрите, как это сделано у меня. MBH 11:44, 20 августа 2019 (UTC)
    • Прерывался на IRL Наморщив ум, вспомнил (пользовался подобным) - что пытаюсь сделать, по-научному называется SFTP, который и моя FileZilla умеет. WinSCP тоже, наверно, хорошая, но чем ставить и изучать, использовал FileZilla. Справа окно настройки SFTP. Порт 22 можно задать, можно нет, при наличии файла ключа и так соединится.
    • Адрес моего будущего сайта (сервиса), как я понял, http://tools.wmflabs.org/neolexx/ Только вот подсоединившись к серверу, никакой подпапки public_html я там не вижу. В /mnt/nfs/labstore-secondary-tools-home/neolexx пока только сервисные файлы с точкой (.bash_history и подобные).
    • Её (public_html) надо самому создать и потом в shell выполнить webservice start? Или выполнить webservice start и подпапка сама появится? Не хотелось бы командами shell экспериментировать наугад. — Neolexx (обс.) 12:38, 20 августа 2019 (UTC)
      • Прочитайте внимательно моё сообщение. Два указанных мною пути различаются не только юзернеймами. MBH 13:10, 20 августа 2019 (UTC)
        • Да, виноват, читал в промежутках в работе.
        • По умолчанию с ключом я попадаю в /mnt/nfs/labstore-secondary-tools-home/neolexx Где-то там, подозреваю, будут в подпапке файлы для сайта http://tools.wmflabs.org/neolexx/ (если я когда решу его создать)
        • Перейти же мне надо в /mnt/nfs/labstore-secondary-tools-project/vvoters Где-то там в подпапке будут файлы для моего проекта http://tools.wmflabs.org/vvoters/ (или подобное, пока не понял, какой конечный адрес получится)
        • Только вот и в /mnt/nfs/labstore-secondary-tools-project/vvoters никакой подпапки public_html сейчас нет. Там сейчас подпапки .kube и log и файл replica.my.cnf (закрыт от чтения). Это всё. Я что-то сделал не так? — Neolexx (обс.) 13:27, 20 августа 2019 (UTC)
          • Нет. mbh - это тулнейм, веб-файлы вашего тула будут по http://tools.wmflabs.org/vvoters/. Файл реплика.цнф - это логин и пароль для подключения по mysql к репликам базы данных (любой вики), прочитать его можно, будучи тулом (я выше описал, как стать тулом). Паблик_хтмл попробуйте создать вручную, там создать файл index.html (именно он будет отображаться при заходе на заглавную страницу тула), стартануть вебсервис можно, думаю, в любом порядке. MBH 13:46, 20 августа 2019 (UTC)
            • Нет, только в одном. Если как есть по умолчанию попробовать webservice start, пишет "Could not find a public_html folder or a .lighttpd.conf file in your tool home." Чтобы птичка вылетела, надо (вместо vvoters далее название любого своего проекта):
              1. В папке /mnt/nfs/labstore-secondary-tools-project/vvoters создать папку public_html
              2. Созданную папку chmod 750 (-rwxr-x---) С гордостью отмечу, что этого вообще никто нигде в справке не упомянул, это я по старой памяти и по наитию, а без этого упс.
                Заодно кинуть туда какой index.html для проверки. Я добавил с единственной гордой надписью "Neolexx" в нём.
              3. В PuTTY или что используется для shell-доступа войти в shell-аккаунт
              4. Ввести become vvoters
              5. Ввести webservice start
              6. Помигает точками Starting webservice....... и вроде бы сервер запущен: http://tools.wmflabs.org/vvoters/
            • Мда... Ну да ладно. Осталось узнать, какой у них Perl и библиотеки к нему, какой шебанг, попробовать запустить тестовый скрипт. — Neolexx (обс.) 14:59, 20 августа 2019 (UTC)
              • Только к файлу с паролем от бота надо будет закрыть доступ. Интересно — много ли пользователей Toolforge знают об этой особенности? — Vort (обс.) 15:12, 20 августа 2019 (UTC)
              • Просто насколько я помню, когда я создавал себе учётку на лабсе - папка паблик хтмл там уже была. С тех пор многое изменилось, возможно, сейчас уже автоматом не создаётся. Версии смотрите тут MBH 15:34, 20 августа 2019 (UTC)
            • ОК, предпоследний шаг оказался проще чем я думал. Ничего нигде не документировано, но хотя бы Perl поставили без выкрутасов, #!/usr/bin/perl Как и раньше, с папками и файлами работал через FileZilla
              1. В папке public_html создаём папку cgi-bin
              2. Новую папку chmod 711
              3. В новую папку переносим тестовый файл, приведённый здесь ранее. У меня он назван test2.pl (отмечу, что .pl - не расширение Perl-программ, а для библиотек - Perl Libraries. Но ламеры некогда так растиражировали ошибку, что иначе просто неудобно работать. Тот же Notepad++ именно по .pl на расцветку синтаксиса реагирует)
              4. Этот файл chmod 755
              5. Типа, ура: http://tools.wmflabs.org/vvoters/cgi-bin/test2.pl
            • MBH, вы обещали показать, where is a good pub in this fn town как выставлять crontab-job для скриптов. Поможете? — Neolexx (обс.) 15:35, 20 августа 2019 (UTC)
              • Ну (будучи под тулом, всё под тулом) crontab -e , и вот вам кронтаб. Я полагаю, пользоваться им вы умеете, если что, вот пример. Кронтабом могут быть запущены только задания на гриде, запущенные через jsub/jstart, инструкция тут MBH 15:42, 20 августа 2019 (UTC)

AutoWikiBrowser[править код]

Скажите пожалуйста, как удалить из статьи интервики

[[ru:название статьи]]

с помощью AutoWikiBrowser? — Takhirgeran Umar (обс.) 08:18, 18 августа 2019 (UTC)

Изучить регулярки и использовать правила автозамены (кнопка на первой вкладке AWB). Будет что-то вроде ^\[\[[a-z]{2,}:\w*\]\]$.—Iluvatar обс 09:00, 18 августа 2019 (UTC)

Как начать раБотать?[править код]

Привет всем, я запрограммировал бота и попытался им поредактировать статьи в test.wikipedia.org - в ответ сервер мне даёт ответы про капчу, а я с ней связываться не хочу. Что мне сделать, чтобы test.wikipedia.org моему боту капчу не показывал? (При этом, если я браузером иду на тот же test.wikipedia под аккаунтом бота и делаю там правки - никакой капчи нет.) Владимир Банников (обс.) 18:47, 15 августа 2019 (UTC)

  • А бог его знает. Я сам столько серверов с 1995 года поставил, немудрёных, но рабочих - не сосчитать. А вот тупейший бот (который по cron-job расписанию просыпался бы, логинился с аккаунта бота и делал определённые правки) - уже год вне пределов моих интеллектуальных способностей. Искренне старался разобраться, но сдался - под хор голосов "это же элементарно, читайте инструкции". Пока просто всё пишу скриптами Greasemonkey и с них работаю, задолбало разбираться и с механикой логинов, и с http://tools.wmflabs.org в целом.
    С логинами сейчас какие-то турусы на колёсах: в доступных примерах просто login, но он отмечен устаревшим и рекомендован clientlogin. Оба, как я понял, ещё недокументированно требуют отправки полученных куки. А если куки не переправить вместе с token, то аутентификации не будет, отсюда, возможно, и капчи. Плюс по новым правилам запрос от скрипта должен содержать внятное User-Agent, иначе запрос не примут. Это докуда я некогда дошёл, пока не плюнул и не стал юзать реальный броузер и Greasemonkey.
    Если вам удастся пройти дальше (от души желаю), то поделитесь. — Neolexx (обс.) 21:00, 15 августа 2019 (UTC)
    • Хех, на Лабсе вертятся тысячи ботов, код большинства из которых доступен для просмотра обладателям лабсовой учётки. Тут выкладывался готовый рабочий пример логина на Питоне. На Лабсе пошаговые инструкции по созданию акка. Юзеров Лабса в рувики тьма, причём большинство доступно в чатах. Но нет, вне пределов.—Iluvatar обс 21:45, 15 августа 2019 (UTC)
      • Увы, как честно и признал: «под хор голосов "это же элементарно, читайте инструкции"» ушёл на скрипты Greasemonkey. Иначе непропорциональная задаче трата времени на чтение и кликанье по лабсу получалось. Впрочем, если когда разберусь хотя бы с входом в учётку через API, поставлю cron-job скрипт на один из своих серверов и с него буду бота юзать. Если по первому (login) есть время и желание помочь, могу открыть здесь отдельную тему, вопросы знающим задать. — Neolexx (обс.) 22:01, 15 августа 2019 (UTC)
  • Получить флаг бота, чтобы учётка обладала тех.правом skipcaptcha.—Iluvatar обс 21:25, 15 августа 2019 (UTC)
    • Не поймите меня неправильно, я всего лишь пытаюсь следовать тому, что написано в FAQ. Где-то в районе пункта номер шесть "Сделать пробный запуск (около 25 правок)" я начал в себе сомневаться. Чтобы получить флаг бота, надо сделать правки (FAQ). Но чтоб сделать правки, надо сперва получить флаг бота (skipcaptcha). Такая ситуация когда-то называлась pkunzip.zip :-) Я могу, к примеру, сделать ботом 25 (или любое другое количество) правок от своего человеческого аккаунта в ru.wikipedia, после чего подать заявку, но как это докажет работоспособность бота? Или подать заявку и в ней указать, что нужен временный флаг, чтобы во время действия флага показать работоспособность конструкции? Владимир Банников (обс.) 04:00, 16 августа 2019 (UTC)
      • Да, раз проявилась такая проблема, то стоит тестовый проход делать с основной учётки. Тех, кто будет удивляться, отправлять в эту тему. — Vort (обс.) 04:06, 16 августа 2019 (UTC)
      • Слово «бот» в имени учётки тоже ничего не доказывает. — Vort (обс.) 04:09, 16 августа 2019 (UTC)
        • У меня есть аккаунт бота - NeolexxBot. Который не просто "Bot" в названии, а имеет флаг бота. Флаг получен в 2017, оставлен в 2018, давно активно использую расширенные функции бота, как использовать как отдельную программу так и не понял.
          Быть может, начать с этой точки и мелкими шагами, если у уже всё прошедших есть желание поделиться знанием? Можно шутить и подтрунивать над моими тупизмом, нубизмом и ламерством (как плата за помощь) - только умоляю не отправлять в качестве ответов на FAQи и Helpы по данной теме. Они у меня вызывают своей бесполезностью приступы неконтролируемого бешенства.
        • Шажок первый: Special:BotPasswords
          mw:Manual:Bot passwords - "Clients using bot passwords can only access the API, not the normal web interface." Эта фраза напрягает. Значит ли она, что если я прогоню аккаунт Neolexx или NeolexxBot через эту дополнительную процедуру "оботения", то с соответствующего аккаунта не смогу затем логиниться в броузере? Или это просто криво сказано о чём-то ином? — Neolexx (обс.) 07:20, 16 августа 2019 (UTC)
          • Не пользовался, но могу предположить, что ботопароль выдаётся в дополнение к обычному. И ограничения распространяются не на саму учётку, а на действия, совершаемые с этим специальным паролем. — Vort (обс.) 08:16, 16 августа 2019 (UTC)
            • То-то и оно, что хотелось сначала точно всё понять. Потому что два пароля к одной учётке (текущий к NeolexxBot и новый после Special:BotPasswords), если вариант верен - это вообще нечто, о чём я нигде никогда не читал и не слышал. Чтобы я или топикстартер этак вдруг не оказались наедине с поломанным аккаунтом (без входа через броузер) и бесполезными хелпами. — Neolexx (обс.) 08:25, 16 августа 2019 (UTC)
              • При таком раскладе я бы подумал в сторону создания второго бота, который работал бы уже с ботопаролем. Не знаю, может ли один участник владеть двумя ботами (может, есть какое правило на эту тему, я не видел)... Владимир Банников (обс.) 09:07, 16 августа 2019 (UTC)
  • Здесь дело в принципе не во флаге бота, ботопароле или особенностях Лабса. Бот может прекрасно работать и без них. Говорю по собственному опыту. Просто систематическое использование бота без флага запрещено правилами проекта, но для тестов можно запускать без флага и даже с основной учётки. Судя по всему, у вас проблемы с логином и/или использованием сессии и поэтому бот пытается делать правки анонимно, где и нарывается на капчу и фильтры правок. Для того, чтобы бот мог править с учётки, он должен хранить полученный куки и при каждой правке посылать токен сессии в своём запросе к API. Я бы порекомендовал создать бота, который использует один из готовых фреймворков — см.: Википедия:Боты + mw:Руководство:Pywikibot. В готовых фреймворках все тонкости логина и сохранения сессии уже учтены. Создание бота «с нуля» тоже возможно, но просто требует больше времени. У меня есть несколько ботов (один из которых — админбот), которых я создал без сторонних фреймворков. -- Q-bit array (обс.) 09:47, 16 августа 2019 (UTC)
    • Поэтому я и предложил сделать правки с основной учётки. Прошли бы «мимо», по IP, сразу бы стало понятно, в чём дело. — Vort (обс.) 10:02, 16 августа 2019 (UTC)
    • (КР) Не смею говорить за топикстартера, но я бы предпочёл один раз понять, как это всё работает в реальности (а не в FAQ или Help файлах). То есть без фреймворков и упрощений, шаг за шагом. Тем более уже был прецедент (на MediaWiki некогда "брейн-штурмовали" выгрузку файлов через API) когда всё оказалось вообще наоборот от Help, а "работающий фреймворк для образца" оказался ни разу не работающим - просто для него, за выслугой лет и важностью, в движке был сделан костыль-исключение и особая обработка запросов именно от него.
    • То есть как первый шаг:
      • Используем в скрипте для входа login, а не clientlogin
      • Чтобы [пока до конца не понял зачем, пусть пока "обязательный/рекомендуемый танец с бубном"], нужно аккаунт потенциального бота прогнать через Special:BotPasswords. После этого к одному аккаунту будут два действующих пароля: один какой был, второй новый. С первым можно логиниться и править в броузере как раньше, но его использование в скрипте на сервере затруднено. Второй можно использовать в скрипте на сервере, но при логине в броузере будет ошибка (ограничение действий, иные бяки).
    • Пока верно или я уже начал ошибаться? — Neolexx (обс.) 10:08, 16 августа 2019 (UTC) Vort, не просил же: не надо "пошаговых картинок", FAQ, help и иной сторонней мути: я их уже (по этому вопросу) второй год читаю, и кроме омерзения они ничего не вызывают, честно.
      • @Neolexx: Было пожелание «понять точно», эта картинка точно описывает что происходит при создании ботопароля. Если желание одновременно и есть и нет, то тут я ничем помочь не смогу.— Vort (обс.) 10:17, 16 августа 2019 (UTC)
        • Что она описывает? «The bot password for bot name "bot" of user "Baskauf" was created. The new password to log in with Baskauf@bot is 4q88mq0h» Я вижу здесь создание нового аккаунта. Логин Baskauf@bot, пароль 4q88mq0h. Видел уже эту картинку с год назад. Я должен идти на Special:BotPasswords как Neolexx и там мне сделают новый аккаунт для NeolexxBot? Я должен идти на Special:BotPasswords как NeolexxBot и там мне сделают новый аккаунт? Ещё что?
          Прошу понять нежелание делать не пойми что с активно используемыми (в броузере) аккаунтами. — Neolexx (обс.) 10:38, 16 августа 2019 (UTC)
          • Можно пойти на Special:BotPasswords как Neolexx и получить логин Neolexx@bot или Neolexx@testblablabla или ещё что-то + произвольный пароль или пойти туда же как NeolexxBot и получить логин NeolexxBot@bot / NeolexxBot@... + пароль. — Vort (обс.) 10:44, 16 августа 2019 (UTC)
          • С вашим аккаунтом и обычным паролем к нему ничего не произойдёт. Только будет создана дополнительная связка сублогин+пароль. Всё. Больше ничего. Ваш ПК не взорвётся, аккаунт не самоуничтожится, возможность логина в браузере с обычным паролем не пропадёт.—Iluvatar обс 11:19, 16 августа 2019 (UTC)
    • Я пока не очень верю в проблемы с логином и сессиями, ибо если я в бота прописываю данные своей основной учётной записи, то никаких проблем нет, правки (во всяком случае, в test.wikipedia) проходят, и по истории видно, что их сделал я. Это доказывает корректность работы бота с логином и сессиями. Если я иду браузером делать правки от имени учётной записи бота - всё тоже нормально. Это доказывает правильность логина и пароля к боту. Капчу получает только бот в сочетании с предназначенными для него логином/паролем. Отсюда у меня некие сомнения. Наверное, я всё-таки запрошу временный флаг. Владимир Банников (обс.) 10:11, 16 августа 2019 (UTC)
      • По моим оценкам, запросить флаг «наперёд» будет в разы сложнее, чем отбиться от гипотетических претензий к тестовому проходу с основной учётки. — Vort (обс.) 10:22, 16 августа 2019 (UTC)
      • Обращу внимание, что бот (если логин/пароль на первом шаге верные) получает не только ответ, но и через куки доп. ключ (куки-токен, не уверен, как он называется официально). Бот должен этот ключ из куки извлечь и отправить во втором POST запросе, иначе аутентификации не случится, даже если логин и пароль верные. Это нигде не документировано, это я некогда своим ограниченным умом докопал. :-)
        Когда вы в броузере, куки и прочие header обрабатываются самим броузером, его для того и делали. А вот на сервере всё нужно отдельно самому обрабатывать. Как я понимаю, в этом причина разницы поведений при входе через броузер и через программу на сервере. — Neolexx (обс.) 10:29, 16 августа 2019 (UTC)
        • Зачем же вы это пишите, если человек успешен логинится и совершает правки под своей учёткой? Его бот корректно обрабатывает и сохраняет токен/куки, иначе бы не входил.—Iluvatar обс 11:19, 16 августа 2019 (UTC)
          • самоцитата: "Когда вы в броузере, куки и прочие header обрабатываются самим броузером, его для того и делали. А вот на сервере всё нужно отдельно самому обрабатывать." Тот же LWP может имитировать запрос от любого броузера. Но про куки он по умолчанию ничего не знает (внешне как брозер с выключенными куки). Их нужно отдельно включать через cookie_jar и самому обрабатывать.
            Функционально ситуация примерно подобна POST-запросам из формы на странице и из Ajax-скрипта. В последнем случае нужно самому в заголовок application/x-www-form-urlencoded добавлять, иначе упс. А в первом случае голова не болит, за вас всё тег FORM и броузер сделают. То же самое и с куками. — Neolexx (обс.) 11:51, 16 августа 2019 (UTC)
  • На каком языке вы пишете? Если на C#, могу порекомендовать на первое время пользоваться фреймворком DotNetWikiBot, почти все мои боты используют его, хотя я в своё время написал процедуру логина и правки и без его привлечения. А вообще, если вы хотите заниматься автозаменами текста, автоматическим переименованием или удалением страниц, бота писать не нужно, всё написано до вас. Смотрите ВП:АВБ, ВП:Pywikibot - это готовые решения. Ботпассвордами пользоваться необязательно, я до сих пор во всех своих ботах использую обычный пароль. MBH 10:34, 16 августа 2019 (UTC)
    • Без ботпасса сам-знаешь-какая-ошибка случается. Обсуждали в чатиках.—Iluvatar обс 11:19, 16 августа 2019 (UTC)
      • Не помню. MBH 11:54, 16 августа 2019 (UTC)

The blind man said "Let's see..." (Слепой сказал: "Посмотрим...") - см. ниже. — Neolexx (обс.) 11:42, 16 августа 2019 (UTC)

Шаг 0[править код]

Изначально было "Шаг 1", но так правильнее, ибо ground zero, а потом уже три шага к идентификации. — Neolexx (обс.) 20:06, 16 августа 2019 (UTC)

  1. Под моим аккаунтом NeolexxBot пошёл на Special:BotPasswords
  2. Потребовали повторный вход - вошёл
  3. Попросили выбрать "Название бота". (Не "название бота", а будущий суффикс логина, толстоевские... Бот уже назван - NeolexxBot. Ну да ладно, не будем привередничать). Допустим (на самом деле другое) ввёл Foobar и нажал Создать.
  4. На следующей странице выставляем флажками права бота. По умолчанию всё выключено, кроме "Основные права", то есть так бот и лишний раз пукнуть не может. Не жадничал, включил минимум: "Редактирование с высокой интенсивностью" и "Редактирование существующих страниц".
    "Разрешённые диапазоны IP-адресов" в конце в textarea оставил как есть:
    0.0.0.0/0
    ::/0

    Нажал Создать
  5. "Пароль бота создан. Новый пароль для входа под NeolexxBot@Foobar — foobar12345foobar"

Под старыми логин/пароль этого аккаунта вход в броузере как обычно. Под новыми логин/пароль в броузере "Введены неверные имя участника или пароль. Попробуйте ещё раз." Как я понимаю, это про что говорится в mw:Manual:Bot passwords (только для использования через API) То есть сервер проверяет, похож ли запрос аутентификации на запрос от какого известного броузера или не похож. Из чего следует, что запросы под бот-аккаунтом с сервера не должны быть слишком похожими на запросы с броузера, а то не пустят.
Или я что делаю не так (под новый пароль foobar12345foobar пробовал логин и NeolexxBot@Foobar и просто NeolexxBot). — Neolexx (обс.) 11:42, 16 августа 2019 (UTC)

  • Пароль бота может быть использован только для работы через API. Работа через API не может быть похожа на работу из браузера, поскольку движок сайта API не использует. Браузер при входе в аккаунт также никакое API не юзает.—Iluvatar обс 12:42, 16 августа 2019 (UTC)
    • "Работа через API не может быть похожа на работу из браузера" - Не совсем (точнее, совсем не) понял, что вы написали.
      jQuery.get('http://ru.wikipedia.org/w/api.php?action=...', function(data){...}) - это работа через API. Из броузера.
      В целом (при полностью проработанном запросе) сервер Википедия не имеет возможности узнать (да это и не его собачье серверное дело), делается ли запрос к API из броузера Firefox или из модуля Perl на сервере. Но если, судя по этой плеши с раздельными паролями, знать таки хотят, то я с родным проектом воевать не буду, конечно. Лишь бы разобраться, что именно и где они хотят - для того по шагам и двигаюсь. — Neolexx (обс.) 13:25, 16 августа 2019 (UTC)
      • Вы предположили, что если запрос от бота будет «похож на запрос от браузера», то не пустит с бот-пассом. Это не соответствует действительности. Сервер всегда знает, используете вы при логине методы API или логинитесь через форму на сайте. Перепутать сервер не может. Если вы на Ajax реализуете логин через API, то бот-пасс использовать сможете.
        • "Сервер всегда знает, используете вы при логине методы API или логинитесь через форму на сайте." - вы мистик или так шутите? Если только MediaWiki не научилась метить электроны в байтах ароматами или что на Нобелевскую изобрела - сам HTTP(S) запрос просто текст, символ за символом. Откуда он пришёл, из броузера или скрипта на сервере, сервер-получатель видеть не может. Есть разные очень сложные™ обфускаторы. Например, client-side добавлять в форму какое хитрое поле с хитрым значением как типа доказательство, что client-side работал Javascript, а значит был реальный броузер, а не его имитация. Есть и иные подобные способы, но это всё детский сад на "боссу показать".
          Я пока за скрипт засел. Как обычно после перерывов очень мешает "текущий акцент" - ошибка за ошибкой, так как на автомате набиваешь как в Javascript, а не в Perl. Так что сейчас просто даю пальцам вспомнить. — Neolexx (обс.) 16:53, 16 августа 2019 (UTC)
          • Чтобы сервер принял бота за человека, надо совершить много неочевидных действий. Случайно вызвать такую ошибку невозможно. Так можно распугать всех желающих помогать.Vort (обс.) 17:08, 16 августа 2019 (UTC)
            • Мы очевидно о разном говорим. Я говорю только о http-request (заголовки, тело), полученном сервером. Что якобы есть некое неминуемое различие, по которому можно понять: является ли http-request результатом отправки формы из броузера или же построчно собран и отправлен программой с другого сервера. А такого различия нет, никогда не было и никогда не будет. Возможно, имелись в виду разные капчи в форме, но это совсем другой вопрос. Развязался наконец с IRL, посвящу-ка ещё часик сегодня вопросам логина. — Neolexx (обс.) 20:03, 16 августа 2019 (UTC)
      • Раздельные пароли созданы исключительно для безопасности пользователя. Чтобы пользователь не так опасался вводить их в формы всяких утилит (Хаггл, например), использовать в ботах, публикуемых на общих хостингах, чтобы имел над этими паролями полный контроль (при необходимости его можно удалить, не меняя основной пароль; причём для одного акка можно создать неограниченное число паролей с разными правами для разных инструментов). Ни для чего другого раздельные пароли не созданы. Чтобы сервер понимал через что вы к нему обращаетесь существует параметр User-Agent, который Фонд просит заполнять корректно.—Iluvatar обс 14:14, 16 августа 2019 (UTC)

На этом пока пауза на IRL. Позднее сегодня запущу с одного из своих доменов Perl-скрипт c LWP (tools.wmflabs.org пока накушамшись досыти, ну их нафиг) и потыкаюсь с бот-аккаунта в руВики. Без правок, чисто login-logout, и регистрируя каждый чих в ответах, что в теле, что в заголовках. — Neolexx (обс.) 12:05, 16 августа 2019 (UTC)

Шаг 1[править код]

ОК... Apache сервер, вполне свежий Perl (LWP 6.05 в том числе). Подопытный аккаунт NeolexxBot Будем "стрелять по-македонски": проверять процедуру и для исходного логин-пароля, и для дополнительного, полученного на Шаге 0.

Как намекают в справке login, прежде всего нужно получить токен login.
Как я понимаю, это единственный шаг, где можно использовать что GET, что POST (далее только POST). Но для ясности пусть сразу всё будет POST.
Фонд просит каких внятных user agent string - нет проблем, мы за мир...
Код тестового скрипта на этом шаге:

#!/usr/bin/perl

use strict;
use warnings;

use LWP;

my $browser = LWP::UserAgent->new;

$browser->agent('w:ru:User:NeolexxBot (LWP like Gecko) Peace to the world');

$browser->cookie_jar({});

my $response = $browser->post('http://ru.wikipedia.org/w/api.php',
    [
        'action' => 'query',
        'format' => 'json',
        'meta' => 'tokens',
        'type' => 'login'
    ]
);

print "Content-type: text/html\n\n";
print $response->content;
print '<p>';
print join('<br>', split(/\n/, $response->headers_as_string));

На этом шаге логины-пароли вообще не нужны. Назад получаю строку типа
{"batchcomplete":"","query":{"tokens":{"logintoken":"ef8c9aa7b52c6f3014f07fde228b9e145d57062d+\\"}}}
и кучу header'ов. Понятия пока не имею, нужен ли хоть один из них на след. шаге, но вот все вот с куками связанные (прив. дата скрыта под …):

Set-Cookie: ruwikiSession=0rd5qa92ihevjefasmp0pstpo3oj266n; path=/; secure; httponly
Set-Cookie: forceHTTPS=true; path=/; httponly
Set-Cookie: WMF-Last-Access=16-Aug-2019;Path=/;HttpOnly;secure;Expires=Tue, 17 Sep 2019 12:00:00 GMT
Set-Cookie: WMF-Last-Access-Global=16-Aug-2019;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Tue, 17 Sep 2019 12:00:00 GMT
Set-Cookie: GeoIP=…; Path=/; secure; Domain=.wikipedia.org
Strict-Transport-Security: max-age=106384710; includeSubDomains; preload
X-Analytics: ns=-1;special=Badtitle;http=1;nocookies=1

На этом этапе, помнится, один момент так и не понял: контрольная последовательность в конце +\\ часть токена или нет? То есть на следующем шаге отправлять ef8c9aa7b52c6f3014f07fde228b9e145d57062d или как упало - ef8c9aa7b52c6f3014f07fde228b9e145d57062d+\\ ? Кто знает - буду благодарен за ответ, иначе методом тыка разбираться буду. — Neolexx (обс.) 20:49, 16 августа 2019 (UTC)

1. Да, на следующий шаг отправлять вместе с +\\ и куками. 2. Почему вы не можете посмотреть код примера, который я дал? Вы же видите, что +\\ в нём не обрезаются.—Iluvatar обс 20:58, 16 августа 2019 (UTC)
ОК, отправим как есть. Просто помнится, что где-то когда-то для чего-то этот суффикс обрезали - иначе не работало (\ интерпретировало как escape-sequence и всё сыпалось). Все-все куки нужны или только ruwikiSession хватит? — Neolexx (обс.) 21:17, 16 августа 2019 (UTC)
Опять IRL... Пауза пока. И спасибо вам и всем остальным за уже оказанную помощь. — Neolexx (обс.) 21:28, 16 августа 2019 (UTC)
Да, вы правы. Первый слэш служит для экранирование второго в ответе json. Если вы используете что-либо для декодирования json, то он обрезается сам. Если нет, то первый слэш обрезайте вручную.
У меня в куках только <RequestsCookieJar[<Cookie GeoIP=BY:En:Ensk:12.34.56.78:v4 for .wikipedia.org/>, <Cookie WMF-Last-Access-Global=16-Aug-2019 for .wikipedia.org/>, <Cookie WMF-Last-Access=16-Aug-2019 for ru.wikipedia.org/>, <Cookie forceHTTPS=true for ru.wikipedia.org/>, <Cookie ruwikiSession=dhsnsjsnhmdjmimsjndhnshnsun for ru.wikipedia.org/>]> (приватные данные заменены).—Iluvatar обс 21:35, 16 августа 2019 (UTC)
Слеши — это мини-экзамен для программиста :-). Надо всего лишь уметь правильно работать с JSON/XML. — Vort (обс.) 21:41, 16 августа 2019 (UTC)
Слеши (в данном случае) - интересный случай частой в программировании "контекстной аберрации". То есть все отлично знают про \escape в Javascript. Но когда это же видишь в совершенной иной среде, то глаза может вырубить и видишь просто литерал как есть. Пока носом не ткнут - и тогда потом удивляешься, как же сам не увидел.
Форматы выводов с API опций оставляют мало, точнее, вообще не оставляют. "Просто текст" давно убрали, XML безбожно велеречив, PHP возвращает странные заголовки (сразу на загрузку) и тем проблемен в HTTP-запросах. Значит, оставляем JSON. Который на всякий случай подровняем к ясно заданному формату, чтобы не гуляло в ответах.
Ну и как-никак 21 век на дворе, обойдёмся без извлечения подстрок из строк и пр., с самим JSON работать и будем. Окончательный Новый вариант подготовки к шагу 2 тогда ниже (лишний вывод убран). Теперь заканчивается на +\, как и должно быть, а не на +\\ — Neolexx (обс.) 09:50, 17 августа 2019 (UTC)
#!/usr/bin/perl

use strict;
use warnings;

use LWP;
use JSON;

my $browser = LWP::UserAgent->new;
$browser->agent('w:ru:User:NeolexxBot (LWP like Gecko) Peace to the world');
$browser->cookie_jar({});

my $response = $browser->post('http://ru.wikipedia.org/w/api.php',
    [
        'action' => 'query',
        'format' => 'json',
        'formatversion' => 2,
        'meta' => 'tokens',
        'type' => 'login'
    ]
);

my $data = decode_json($response->content);

my $logintoken =  $$data{query}{tokens}{logintoken};

print "Content-type: text/html\n\n";
print $logintoken;

Шаг 2.Б[править код]

Б - потому что входим под доп. логин-паролем бота, полученным на #Шаг 0. Потом попробую 2.А - под исходным (основным) логин-паролем.
Справка: http://ru.wikipedia.org/w/api.php?action=help&modules=login

Как запоздалая пометка к шагу 1: Iluvatar пишет: "параметр User-Agent, который Фонд просит заполнять корректно". Фонд просил лет десять назад, а сейчас он требует. Кто не слушается - вырубают бот-привилегии в запросах, даже если сам вход выполнен идеально. А так как движок излишним интеллектом не наделён, в пролёте окажется, скажем, даже какой вручную заданный "LWPupkinBot". Моя строка не совсем по User-Agent policy, но движок съест, не поперхнётся.

К шагу 2: чуть пригладил скрипт в плане эффективности. Самое важное: LWP сама автоматом изображает броузер с поддержкой cookie. То есть все полученные на шаге 1 ruwikiSession и пр. автоматом отсылаются назад в header, как будто установленные. Если под другим модулем не так, то надо вручную ставить, иначе всё заглохнет уже на этом шаге.

Далее делаем второй запрос и, если всё в порядке, получаем result "Success". Мне на моём сервере скрипт ниже пишет "Success". Но прошу не расслабляться :-) - это не конец, а лишь окончание подготовительного этапа к моменту начала редактирования (Шаг 3). — Neolexx (обс.) 20:20, 17 августа 2019 (UTC)

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use JSON;

# API endpoint:
my $url = 'http://ru.wikipedia.org/w/api.php';

# virtual browser, custom User-Agent header, cookies enabled: 
my $browser = LWP::UserAgent->new;
$browser->agent('w:ru:User:NeolexxBot (LWP like Gecko) Peace to the world');
$browser->cookie_jar({});


# Step 1
# get login token (and a bunch of cookies)
# see http://ru.wikipedia.org/w/api.php?action=help&modules=query+tokens

my $response = $browser->request(POST $url,
    {
        'action' => 'query',
        'format' => 'json',
        'formatversion' => 2,
        'meta' => 'tokens',
        'type' => 'login'
    }
);

my $data = decode_json($response->content);

my $logintoken =  $$data{query}{tokens}{logintoken};


# Step 2.B
# login with bot login/password from Special:BotPasswords
# see http://ru.wikipedia.org/w/api.php?action=help&modules=login

$response = $browser->request(POST $url,
    {
        'action' => 'login',
        'format' => 'json',
        'formatversion' => 2,
        'lgname' => 'NeolexxBot@Foobar',
        'lgpassword' => 'foobar12345foobar',
        'lgtoken' => $logintoken
    }
);

$data = decode_json($response->content);

my $result =  $$data{login}{result};

print "Content-type: text/html\n\n";
print $result;

Шаг 3.Б и 4.Б[править код]

Итак, праздник Одержания, победа разума над природой и пр... Я не только логинюсь, но и выполняю правку на ЛСО своего бота.

  • Ключевой момент повторно: процесс входа в аккаунт и любые последующие запросы всегда происходят на двух уровнях: материальном и мистическом.
    Или, шутки в сторону, 1) на уровне отправки запросов и получения ответов и 2) на уровне получения куки с сервера и их отправки назад.
    Если второго уровня нет, или куки не те, или какого куки не хватает - весь процесс будет сломан. Неважно, насколько верны сами запросы, логины, пароли и пр.
    При работе из броузера или какой высокоуровневой оболочки второй уровень (обмен куками) автоматически берут на себя броузер или оболочка. То есть о нём и не подозреваешь зачастую. В иных ситуациях скрипта на сервере этим нужно заниматься отдельно.
  • Из-под доп. аккаунта через Special:BotPasswords можно делать только то, что сам разрешил в установках аккаунта. На шаге 0 я разрешил аккаунту править существующие страницы, но не создавать новые. ЛСО моего бота уже существует, поэтому и правка ниже удаётся. Иначе бы был отказ. То есть всегда помним, что нам и мы сами себе разрешили.

Итак, выполняем полный процесс входа, получаем (после входа) токен редактирования, создаём новую тему на ЛСО бота. Результат работы скрипта ниже - Обсуждение_участника:NeolexxBot#Test_edit (diff). — Neolexx (обс.) 09:06, 18 августа 2019 (UTC)

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use JSON;

# API endpoint:
my $url = 'http://ru.wikipedia.org/w/api.php';

# virtual browser, custom User-Agent header, cookies enabled: 
my $browser = LWP::UserAgent->new;
$browser->agent('w:ru:User:NeolexxBot (LWP like Gecko) Peace to the world');
$browser->cookie_jar({});


# Step 1
# get login token (and a bunch of cookies)
# see http://ru.wikipedia.org/w/api.php?action=help&modules=query+tokens

my $response = $browser->request(POST $url,
    {
        'action' => 'query',
        'format' => 'json',
        'formatversion' => 2,
        'meta' => 'tokens',
        'type' => 'login'
    }
);

my $data = decode_json($response->content);

my $logintoken =  $$data{query}{tokens}{logintoken};


# Step 2.B
# login with bot login/password from Special:BotPasswords
# see http://ru.wikipedia.org/w/api.php?action=help&modules=login

$response = $browser->request(POST $url,
    {
        'action' => 'login',
        'format' => 'json',
        'formatversion' => 2,
        'lgname' => 'NeolexxBot@Foobar',
        'lgpassword' => 'foobar12345foobar',
        'lgtoken' => $logintoken
    }
);

$data = decode_json($response->content);

my $result =  $$data{login}{result}; # should be Success


# Step 3.B
# get csrf token for page edit action
# see http://ru.wikipedia.org/w/api.php?action=help&modules=query+tokens

$response = $browser->request(POST $url,
    {
        'action' => 'query',
        'format' => 'json',
        'formatversion' => 2,
        'meta' => 'tokens',
        'type' => 'csrf'
    }
);

$data = decode_json($response->content);

my $csrftoken =  $$data{query}{tokens}{csrftoken};


# Step 4.B
# edit page
# see http://ru.wikipedia.org/w/api.php?action=help&modules=edit

$response = $browser->request(POST $url,
    {
        'action' => 'edit',
        'format' => 'json',
        'formatversion' => 2,
        'title' => 'User talk:NeolexxBot',
        'section' => 'new',
        'sectiontitle' => 'Test edit',
        'summary' => 'just testing',
        'text' => 'NeolexxBot test edit.',
        'bot' => 1,
        'token' => $csrftoken
    }
);

$data = decode_json($response->content);

$result =  $$data{edit}{result};

print "Content-type: text/html\n\n";
print $result; # should be Success

Проблема оптимизации хеш-таблицы[править код]

В примере выше есть как минимум одна потенциальная проблема, которая не случилась, но вроде как могла бы случиться. С какой вероятностью могла бы, с какими последствиями и как лучше решить проблему (если она действительно есть) - ответа пока не нашёл. Буду благодарен за подсказки.

В справке говорится: "Токен всегда должен быть послан в качестве последнего параметра, или, по крайней мере, после параметра text". В JavascriptAJAX / jQuery соответственно) оптимизации ключей в корзине хеш-таблицы не делается (в одной древней версии Chrome сделали, огребли несусветных люлей и больше не делали). То есть достаточно параметр token в хеше задавать последним - он последним и в запросе окажется.
Perl (не единственный, но в том числе) может ключи внутри себя оптимизировать. То есть в итоговой таблице, которую метод получит, token может оказаться перед text, а то и вообще первым в запросе.

Вопрос: насколько это страшно, что на самом деле может тогда случиться и как часто случается? — Neolexx (обс.) 13:45, 18 августа 2019 (UTC)

  • Люблю, когда люди сами создают себе проблемы, а потом героически ищут пути их решения. Почему бы не конструировать урл своего запроса явно, напрямую, из символов? Во всех своих ботах делаю так. Вот код запроса отката Реймы: site.PostDataAndGetResult("/w/api.php?action=rollback&format=xml", "title=" + title + "&user=" + user + "&summary=[[u:Рейму Хакурей|автоматическая отмена]] правки участника [[special:contribs/" + user + "|" + user + "]], вредной с вероятностью " + damaging + "&token=" + rollbacktoken); MBH 15:09, 18 августа 2019 (UTC)
    • Чтобы результат был качественный. — Vort (обс.) 15:25, 18 августа 2019 (UTC)
      • Что вы имеете в виду? Чем некачественен мой? Он как раз качественнее - я точно знаю, какой урл я отправляю. MBH 15:55, 18 августа 2019 (UTC)
        • URL-ом POST-запрос вы отправить не можете, это не GET. Отправляется заголовок запроса (размер в байтах и пр.) и его тело. Которое (тело) можно оформить в виде псевдо-URL, достаточно умная среда и такое съест. Но в плане удобочитаемости, лёгкости поддержки и иного потенциальных проблем много больше, чем преимуществ. — Neolexx (обс.) 16:03, 18 августа 2019 (UTC)
        • Шанс ошибки имею в виду. Что-то типа SQL injection. — Vort (обс.) 16:10, 18 августа 2019 (UTC)
  • Насколько я знаю, документация Mediawiki API здесь устарела. Токен редактирования уже давно передаётся не в URL, а в самом теле (body) HTTP POST запроса. Если попробовать послать его как параметр URL, система начнёт ругаться и запрос будет отклонён. -- Q-bit array (обс.) 15:32, 18 августа 2019 (UTC)
    • Насколько помню, пояснялось это обрезанием. Чтобы запрос не ушёл без токена. Разве в плане обрезания запроса POST чем-то отличается? — Vort (обс.) 15:44, 18 августа 2019 (UTC)
  • Perl не знаю, но нашёл вот такой пример: POST 'http://www.perl.org/survey.cgi',. Там используется не {, а [. Может, [ не будет переупорядочивать параметры? — Vort (обс.) 15:42, 18 августа 2019 (UTC)
    • Основной (пока не отвеченный вопрос) - а в чём сыр-бор, что и когда может случиться? Если в реальном POST запросе, который пойдёт к серверу, последовательность полей будет не
      'action' => 'edit',
      ...
      'text' => 'NeolexxBot test edit.',
      'token' => $csrftoken
      
      а
      'action' => 'edit',
      ...
      'token' => $csrftoken,
      'text' => 'NeolexxBot test edit.'
      
      ?
    • Потому что если проблема действительно вероятна, в Perl есть фиксатор порядка полей Tie::IxHash. Аналогичное наверняка есть и в других языках с механизмом оптимизации по умолчанию. Вещь достаточно "дорогая", но на такие мелкие хеши неважно. Просто не хотелось бы ставить что-то заведомо ненужное. — Neolexx (обс.) 15:57, 18 августа 2019 (UTC)
    • (см. API credits) Решился на пинг в тему русскоязычным разработчикам. @VasilievVV, Yurik: не поясните? — Neolexx (обс.) 16:16, 18 августа 2019 (UTC)
    • Пока разбираемся с дальнейшей судьбой моего бота ниже (вот уж классика welcome to our Wikipedia!.. две невинных правки новичка для теста, со второй - 4 года в блок без права переписки..) - а почему csrf а не edit для токена? Про csrf вижу только Межсайтовая подделка запроса (Сross Site Request Forgery). Это типа программистский юмор на тему, что после входа править с таким токеном можно по всем подпроектам, а не только где вошёл? — Neolexx (обс.) 20:12, 18 августа 2019 (UTC)

Блокировка на 4 года[править код]

до 2023, когда попытался тем же скриптом ту же правку сделать на своей ЛСО: {"error":{"code":"blocked","info":"You have been blocked from editing.","blockinfo":{"blockid":13860230,"blockedby":"Ping08","blockedbyid":325516,"blockreason":"{{BlockedHosting}}","blockedtimestamp":"2018-11-18T20:01:22Z","blockexpiry":"2023-11-18T20:01:22Z","blockpartial":false}

Уже спросил: Обсуждение_участника:Ping08#Блокировка_бота_NeolexxBotNeolexx (обс.) 19:31, 18 августа 2019 (UTC)

Считаю такие блокировки нарушением правил. Но без поддержки сообщества эту проблему не решить. — Vort (обс.) 19:42, 18 августа 2019 (UTC)
Ситуация точно как в анекдоте. — Vort (обс.) 19:46, 18 августа 2019 (UTC)
Вообще да, немного странно всё. Ботоподобная в основном вандальная активность с IP или диапазона должна, разумеется, пресекаться. При повторах - в том числе и долгосрочным блоком адресов. Однако тут-то была не попытка правки с IP. Вход был успешен (Success на втором шаге). Ошибка вылетела именно при попытке правки. То есть в правке зарегистрированному и вошедшему в систему боту достаточно добросовестного участника (я) было отказано, потому что он пытался править с заблокированного IP. То есть как бы "дети отвечают за родителей, а участники - за свои IP", если я верно понял.
И почему первая правка на ЛСО бота прошла, если blockedtimestamp:2018-11-18 ? (Некая "мягкая блокировка" IP, зареги с этого IP сохраняют право править свои ЛСО?) — Neolexx (обс.) 19:59, 18 августа 2019 (UTC)
Я говорю о другом: о заявляемых причинах блокировки IP. Ничего про вандализм там не сказано. В вольной интерпретации это звучит так: «нам не нравится Ваш адрес». — Vort (обс.) 20:04, 18 августа 2019 (UTC)
Я ровно про это (или не про это? уже не уверен) и говорю ("дети отвечают за родителей, а участники - за свои IP"). Если указаны верный логин и пароль незаблокированного добросовестного участника, то кому какое дело, с какого IP он входит, заблокированного или нет, в Петербурге или Питтсбурге. Логика какая-то за всем этим наверняка есть, но пока я её не улавливаю. — Neolexx (обс.) 20:16, 18 августа 2019 (UTC)
Просите флаг исключения из IP-блокировок для бота, если запускаете его с хостинга. Причин для отказа нет.—Iluvatar обс 20:30, 18 августа 2019 (UTC)
Попробую... Для чистоты концепции ботом и попрошу. Изменил в скрипте выше text на {{unblock|unknown, I did not do anything bad to anyone}} -- ~~~~Neolexx (обс.) 21:44, 18 августа 2019 (UTC)
Результат выполнения: Обсуждение_участника:NeolexxBot#Unblock_requestNeolexx (обс.) 21:46, 18 августа 2019 (UTC)
Вчера вечером я же всё объяснил в скайпе. -- Q-bit array (обс.) 06:46, 19 августа 2019 (UTC)
Коллега, в ВП-2,01 в итоге получилось не пояснение, а цитирование некоего правила, о котором я ранее искренне никогда не слышал: "Запускать бота надо не с хостинга, а с Лабса или из дома."
То есть, более формально формулируя: "Любой бот любого участника может использоваться только 1) с компьютера данного участника или 2) с сервера http://tools.wmflabs.org Любой иной сервер либо уже заблокирован по умолчанию, либо вскоре будет заблокирован."
Если выше (в вольной или формальной форме) цитируется некое текущее требование Фонда или принятое в руВики правило о ботах, то вопрос, разумеется, закрыт. Достаточно привести ссылку плюс дополнить инструкции для ботоводов, чтобы зря время не теряли.
Если же это просто некая сложившаяся практика предосторожности, то прошу снять какие-либо блокировки с IP 78.108.80.121 (домен tarhovka.spb.ru) - домен не используется как открытый прокси, принадлежит мне, права обновлены до лета следующего года (то есть исключена ситуация "сегодня за IP Neolexx, завтра бог знает кто") — Neolexx (обс.) 08:58, 19 августа 2019 (UTC)
Цитата Q-bit array из чата ВП-2,01 ниже — Neolexx (обс.) 09:46, 19 августа 2019 (UTC)

А сам бот не заблокирован. Заблокирован IP диапазон хостинг-провайдера.
И на форуме ботоводов Iluvatar уже вчера объяснил, что для ботов, которых запускают с хостинг-диапазона, можно запросить флаг исключения из IP блокировок.
Когда бот (имеется в виду сама программа, а не учётка) будет полностью разработан, протестирован и будет готов к установке на хостинг, где он будет работать без ручного контроля - тогда можно обратиться к любому ЧЮ для получения флага исключения из IP блокировок для бота.

Как-то это всё кудряво, всё-таки... На манер анекдота про удава и отрубить ему голову или хвост...
NeolexxBot не заблокирован и править может где угодно. Заблокирован IP 78.108.80.121 - только с которого NeolexxBot подключаться и может. Так что NeolexxBot может править только свою ЛСО. Но он не заблокирован и править может где угодно хоть сейчас.
Надо будет посидеть, лоб почесать над этой философией.
Q-bit array, я никогда толком не пользовался "лабсом" (http://tools.wmflabs.org), поэтому уточню. Если бы скрипт выше работал с "лабса", то ему изначально были бы доступны правки других страниц, помимо собственной ЛСО? Или там тоже есть некий маркер готовности скрипта, а до этого он тоже ограничен в действиях (только своя ЛСО, только правки в песочнице, иное)? — Neolexx (обс.) 10:02, 19 августа 2019 (UTC)
Лабс — это хостинг, чей IP не заблокирован. По-моему, этого достаточно для выводов. — Vort (обс.) 10:05, 19 августа 2019 (UTC)
Знаете, я уже понаделал разных очень логичных выводов, которые в итоге оказались неверными. Так что предпочёл бы конкретные ответы на конкретные вопросы. Технически ничто не мешает кому на лабсе маркировать статусы скриптов (alpha, beta, release) и соответственно давать им различные свободы правок в проекте.
Кроме того, разберёмся с терминами: хостинг ни разу не равен домену. Скажем, http://tools.wmflabs.org - это хостинг со своим диапазоном IP. http://tools.wmflabs.org/ruarbcom/ - это скрипт на таком хостинге, своего IP у него нет, только URL. То есть чтобы его разрешить, нужно весь tools.wmflabs.org разрешить.
http://www.majordomo.ru - это тоже хостинг. Чтобы какой http://www.majordomo.ru/cgi-bin/example.cgi разрешить, нужно весь majordomo.ru разрешить.
http://www.tarhovka.spb.ru - это домен на хостинге majordomo.ru Со своим IP 78.108.80.121 Чтобы какой http://www.tarhovka.spb.ru/cgi-bin/example.cgi разрешить, нужно сам домен tarhovka.spb.ru (78.108.80.121) разрешить. К хостингу majordomo.ru проблема не относится, как его диапазон блокировали, так пусть и блокируют (кроме моего домена).
Это если WWW не изменился каким кардинальным образом за последние лет 10. — Neolexx (обс.) 10:28, 19 августа 2019 (UTC)
Кроме случаев блокировок, права участников никак не зависят от их IP адресов. Хоть, теоретически, админы Toolforge, могут влезть в код бота и подменить защищённые http данные, делать они этого не будут. По-моему, они вообще не следят за тем, что там происходит (пока потребление ресурсов в норме и нет никаких жалоб). — Vort (обс.) 11:02, 19 августа 2019 (UTC)
Домены тут вообще не при чём. Соединение идёт с IP, а не с домена. IP, в свою очередь, или заблокирован или нет. Всё. — Vort (обс.) 11:02, 19 августа 2019 (UTC)
Мы опять о разном говорим, кажется. Домен тут при том, что домен tarhovka.spb.ru - это IP 78.108.80.121 - а не любой IP, принадлежащий хостингу majordomo.ru То есть исключена ситуация, что скрипт http://www.tarhovka.spb.ru/cgi-bin/example.cgi вдруг попытается править ВП с IP 78.108.80.122, 78.108.80.123 или иного. Это, вновь, если WWW не изменился/усложнился за прошедшие годы. — Neolexx (обс.) 12:02, 19 августа 2019 (UTC)

Утром деньги - вечером стулья! или Жизненный цикл ботов[править код]

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

«Жизненный цикл» бота в Википедии состоит из следующих важных частей:

  1. Определиться, какую деятельность будет выполнять бот
  2. Обсуждение нового функционала с сообществом
  3. Реакция на серьёзные аргументы против, если возникнут
  4. Разработка прототипа и тестовые правки
  5. Официальное разрешение бюрократов
  6. Запуск первой продуктивной версии бота под контролем из дома
  7. Размещение полностью отлаженной версии на хостинге
  8. (получение флага исключения из IP блокировок в случае необходимости)

Сейчас обсуждаются шаги 7 и 8 этого списка. А вообще-то, они последние, над чем надо ломать голову при разработке бота.

Поэтому давайте по-порядку шаги 1 до 5:

  1. Что будет делать бот?
  2. Где это обсуждалось?
  3. Были ли обоснованные возражения?
  4. Готов ли прототип? Есть примеры правок?
  5. Есть ли разрешение бюрократов?

Старая заявка на статус бота от 2017 года (Википедия:Заявки_на_статус_бота/NeolexxBot) в принципе не считается, так как там флаг бота был запрошен только для получения 5000 запросов по API. Флаг так просто присвоили, только потому, что бот НЕ ДЕЛАЛ ПРАВКИ. Заявка для бота, делающего правки, не будет такой тривиальной.

Когда шаги 1 — 5 будут выполнены, тогда можно обсудить флаг исключения из IP блокировки, но не раньше. -- Q-bit array (обс.) 10:40, 19 августа 2019 (UTC)

Нарушения правил никогда не рано обсуждать. Касаемо конкретного случая: «любой бот или автоматизированный процесс, затрагивающий лишь собственные личные страницы и подстраницы либо личные страницы ботовладельца, может быть запущен без предварительного одобрения.». — Vort (обс.) 10:53, 19 августа 2019 (UTC)
То есть как решение проблемы предлагается лишить пока NeolexxBot статуса бота и переподать заявку с учётом всех возможных будущих правок (а не просто чтения API).
Попробую сначала решить проблему "малой кровью", пояснив прямо здесь.
Всякие боты на серверах мне по сути мало нужны, кроме ряда мелких задач по расписанию crontab. Потому что на чужом сервере мне никто не даст использовать скрипты по принципу "запустил и забыл, пусть работает пока всё не сделано". На скрипты там даётся жёсткое время максимальной работы. На Apache по умолчанию 10 сек, на "лабсе" более щедро 30 сек, если не ошибаюсь. Потом оболочка просит скрипт вырубиться (SIGTERM), не слушается - сама его вырубает (SIGKILL). Под массу задач этого совершенно недостаточно, то есть придётся устраивать геморрой с "сервер-куками": периодически записывать в файл текущие HTTP-куки и точку останова, выключаться, через 5-10 сек по crontab опять включаться, делать очередную порцию задания, опять выключаться и т.п., и т.д., и ну его нафиг.
Мелкой задачей по расписанию crontab будет, например, пингование или уведомление на их ЛСО всех подписчиков Получатель приглашений на выборы. То есть раз в сутки по расписанию crontab скрипт просыпается, логинится, проверяет наличие свежих заявок на статус администратора или бюрократа. Если такая (такие) есть, проверяет текущий список получателей приглашений и извещает их аналогично как здесь. То есть происходит это без необходимости держать свой компьютер сутками включённым и вообще без моей необходимости - даже если я в отпуске и выключил все свои компьютеры и телефоны.
Если это пояснение звучит удовлетворительно, то прошу удовлетворить заявку моего бота. Само собой подразумевается, но повторю как на ВП:ЗСБ: готов нести ответственность за все совершённые ботом правки. — Neolexx (обс.) 11:21, 19 августа 2019 (UTC)
P.S. И (спасибо Vort за цитату выше), при любом раскладе желательно каким-либо образом но привести текущую ситуацию в соответствие с правилом. То есть чтобы NeolexxBot имел возможность править не только свою ЛСО, но и мою ЛСО. То есть если быстро снять с NeolexxBot статус бота, то правило тоже будет формально выполнено (раз он больше не бот, то и право правок ЛСО Неолекса ему давать не надо) - но это будут слишком уж формальное выполнение правила ;-) — Neolexx (обс.) 11:29, 19 августа 2019 (UTC)
P.P.S. Если нужны доказательства, что домен http://www.tarhovka.spb.ru принадлежит мне и контролируется мною, то стандартный способ - запросить создание на нём страницы с заданным названием и заданным содержимым. Готов выполнить такой запрос, если он последует. — Neolexx (обс.) 11:40, 19 августа 2019 (UTC)
Я конечно польщён, что меня считают «сообществом» и даже «бюрократом», способным единолично принимать такие решения. :-) Но в данном случае это в принципе не мне решать и поэтому ни о каком присвоении флагов в обход процедур не может быть и речи. Особенно для таких массовых и противоречивых действий, как пинги участников. Они уже привели к временным «бессрочкам», срачам на форумах и даже к заявке в АК. Это касается не только флага исключения из IP блокировок, но и флага бота, так как заявка на статус бота образца 2017 года в принципе не является разрешением на массовое пингование участников. Будем считать, что пункт 1 (описание функционала бота) выполнен. Остались пункты 2 - 5. -- Q-bit array (обс.) 11:55, 19 августа 2019 (UTC)
P.S.: Ответ на реплику Vort — если бот будет править только ЛП участника, но при этом переворошит (перепингует) пол-Википедии, то ему официальное одобрение бюрократов ой как нужно, иначе первый массовый запуск может плохо окончится для бота или даже для ботовладельца. -- Q-bit array (обс.) 11:55, 19 августа 2019 (UTC)
  • Потому что на чужом сервере мне никто не даст использовать скрипты по принципу "запустил и забыл, пусть работает пока всё не сделано". На скрипты там даётся жёсткое время максимальной работы. На Apache по умолчанию 10 сек, на "лабсе" более щедро 30 сек, если не ошибаюсь. Потом оболочка просит скрипт вырубиться (SIGTERM), не слушается - сама его вырубает (SIGKILL) - вы что-то очень странное пишете. Боты (запущенные процессы) на лабсе могут работать хоть непрерывно, для запуска таких есть специальная команда, так работает Рейму (это непрерывный процесс, перечитывающий свежие правки через sleep(5)). Однократно запускаемые процессы у меня каждый месяц работают по полтора суток (так генерится некоторая статистика на моих подстраницах). Единственное требование: запускать всё это дело надо не на логин-сервере (куда первым делом попадает залогинившийся на лабс человек), а на "гриде", распределённой сетке ядер лабса, где постоянно выполняется куча ботов, по несколько на одно ядро. Но даже запущенный на логин-сервере процесс будет прибит примерно через 18 часов непрерывной работы (так было года 4 назад с одним моим ботом). MBH 12:07, 19 августа 2019 (UTC)
    • Здесь проблема даже не в хостинге или флаге, а в том, что внезапно оказывается, что создающийся бот в принципе не был согласован — ни с сообществом, ни с бюрократами. А действия он будет совершать, скажем так, очень массовые и не очень консенсусные... -- Q-bit array (обс.) 12:14, 19 августа 2019 (UTC)
      • Вы, коллега, сильно отстали от жизни. Кроме того, в техзадании выше речь шла о тех, кто сам себе установил шаблон:Userbox/Получатель приглашений на выборы (70 человек или около того). Которые (приглашения) рассылались утверждённым техзаданием бота. Который давно сломался, а мне и моим коллегам поднадоело ботов изображать. В принципе, для пингования и текущей блокировки достаточно, просто вместо Обсуждение участника:Bot of the Six будет использовано Обсуждение участника:NeolexxBot.
      • Меня, собственно, обижает сам (наверняка по своей сути практичный) подход к работе с ботоводами, нигде толком не документированный: либо у себя на компьютере, либо на "лабсе", иначе в блоке кроме ЛСО бота. При этом неважно, что 78.108.80.121 не использовался для вандализма или как прокси. Как его предосторожности ради в блок-лист внесли, так там и будет - пока ботовод пошагово не докажет, что ему (ботоводу) доверять можно. То есть сомнения в IP проецируются на сомнения в зареге (зарегистрированном участнике, симметрично анрегам). Возможно, вся обида тут просто из-за новизны (для меня самого) такой концепции. — Neolexx (обс.) 12:22, 19 августа 2019 (UTC)
        • Получить флаг исключения для одобренного бота — чисто формальная вещь, обычно не вызывающая проблем. Конкретно этом обсуждении зацепка в том, что пока нет ни готового бота, ни официального одобрения. Когда всё будет, за флагом дело точно не станет. -- Q-bit array (обс.) 12:44, 19 августа 2019 (UTC)
          • "Получить флаг исключения для одобренного бота — чисто формальная вещь" Всё, обида прошла. Просто из дискуссии как она складывалась и так как у меня такое по первому разу - возникло ощущение, что тут "еже писах, писах". То есть если уж IP бота попал под раздачу вместе со всем majordomo.ru, то там и останется по той или иной причине. А если как в цитате, то особых проблем нет. (Но предупредить потенциальных ботоводов о такой ситуации, что либо со своего компа, либо с лабса, иначе почти гарантированно уже в блоке - предупредить об этом следовало бы). — Neolexx (обс.) 12:54, 19 августа 2019 (UTC)
            • На всякий случай, чтобы потом не возникало вопросов - флаг исключения из IP-блокировок запрашивается на Википедия:ИСКЛ+DR (обс.) 18:53, 20 августа 2019 (UTC)
    • О, а вот это интересно и полезно, спасибо. И откуда это было бы узнать, кроме как от того, кто уже знает? Каких-то монстров на 18 часов работы или вообще в режиме демона я не планирую, но на час-другой работы случается (выборка имеющих право выдвижения/голоса). Если это удастся перенести из Javascript/Greasemonkey на Perl/wmflabs.org, то много комфортнее будет. Только я действительно ничего не понял в плане пользования их аккаунтом (который у меня уже есть), сколько ни читал хелпы и сколько ни ходил по ссылкам. Если есть время и желание, то я бы открыл отдельную тему тут на форуме или на ЛСО. Чтобы тот же скрипт как здесь или самый простой "Hello World!" запустить с "лабса". Допустим, я с мозгами набекрень - программу написать могу, а шнурки завязать или лампу включить - нет. Если принять это как данность, готовы помочь мелкими-мелкими шагами? — Neolexx (обс.) 12:42, 19 августа 2019 (UTC)
      • Могу разве что поделиться опытом, что за загрузку больше одного ядра процесс моего бота прибивала автоматика. Так что с многопоточностью не разгонишься. А понемногу что-то считать, пусть и непрерывно — не проблема (насколько я знаю). — Vort (обс.) 13:16, 19 августа 2019 (UTC)
      • Могу рассказать с достаточно высокой степень подробности, как лично я пользуюсь лабсом. Как туда логиниться, как создать там учётку, как грузить в свою папку файлы с локального компьютера, как их запускать на выполнение, вручную и кроном. MBH 13:45, 19 августа 2019 (UTC)
        • Отлично, заранее спасибо! Я пока другим (тоже проектным) занят, а позднее тогда открою тут новую тему (может, не я один в проекте такой, кому ещё пригодится) и пингану. — Neolexx (обс.) 14:00, 19 августа 2019 (UTC)