Русский чат бот для Вконтакте на Powershell скрипте

Русский чат бот для вконтакте

В прошлой записи я уже писал о том, как можно реализовать у себя автоответчик для популярных социальных сетей, который будет общаться вместо Вас. Раньше я им активно игрался. Этот русский чат бот для Вконтакте мною использовался для того, чтобы выявить спамера в незнакомом собеседнике и не отвлекаться на его сообщения. Но когда Вконтакте ввело кнопку "Спам" и стало успешно бороться со спамом, надобность автоответчика отпала.

Теперь пришла вторая беда: куча незнакомых людей пытаются втянуть меня в политические дискуссии на тему Украина-Россия-США, которые мне абсолютно не интересны.

Посему захотелось возродить тот автоответчик - пускай он дискуссирует о визитках Яроша, великом комбинаторе Бендере, укропах и американцах, которые хотят нас поссорить. Зачем мне на эту ерунду отвлекаться? Лучше уж верну в строй автоответчик, это более веселое занятие =) Только вот захотелось допилить в нем кое-что, для удобства. И обойтись без установки delphi, да и qip не хотел устанавливать. Потому переписал его на Powershell-скрипте.

Кстати о пользе скрипта: вот пишу сейчас эту запись, а параллельно со скриптом какая-то девушка общается, она уже пять часов выпрашивает у моего скрипта скинуть деньги на телефон, при этом скрипт хитер - и телефон получил, и деньги пообещал скинуть (только не сейчас),  и условие поставил: скинет если она, девушка, будет себя хорошо вести. Вот и общаются уже так 5 часов. Собеседница пытается выяснить когда именно и сколько денег скрипт собирается ей скинуть, ну и общается с ним за жизнь, чтобы его не обидеть =)

Помимо самого скрипта нам понадобится:

  • База вопросов-ответов - текстовый файл такого же формата, как и в боте реализованном через QIP плагин. В скрипте используется тот же формат базы. Качайте архивы по ссылкам: раз или два и скопируйте в них файл reg.txt
  • Сгенерировать токен - ключ, благодаря которому вконтакте поймет что скрипт, это Вы. Для этого, в свою очередь, нужно:
    • Создать во вконтакте свое standalone-приложение и скопировать его id.

С базой вопросов-ответов все понятно, идете по ссылкам и качаете одну из тех баз, которыми люди поделились. Рекомендую базу совершенствовать, чем больше в ней будет вопросов и более продуманной ее структура - тем более человеческие диалоги будут получаться. Своей базой я пока не готов делится =) Может потом реализую на сайте api через которое можно будет посылать вопрос и получать ответ из базы.

Генерация токена

По адресу vk.com/editapp?act=create создаем standalone-приложение (под которым будет выступать этот скрипт), название можете вписать любое. При создании приложения вконтакте пошлет Вам на телефон код, который нужно будет ввести.

Далее в созданном приложении переходим на вкладку "настройки" и запоминаем "ID приложения" - оно нам понадобится для генерации токена.

Честно говоря Вам не обязательно создавать свое приложение, достаточно взять ID уже любого, созданного кем угодно приложения. Но есть "Но":

  • Оно должно быть standalone-типа: отправка сообщений доступно только Standalone-приложениям.
  • Во вконтакте есть ограничение по количеству обращений в секунду с какого-либо приложения. И чтобы несколько пользователей используя одно и то же приложение не уперлось в это ограничение, лучше создать свое приложение.
  • Этому приложению будут выданы те права которые вписаны в ссылке получения токена - будьте аккуратны. Лучше создать свое приложение, а не предоставлять чужому какие-либо опасные права

Получили ID приложения? Идем дальше.

Переходим в браузере по такому адресу:

https://oauth.vk.com/authorize?client_id=ТутIDПриложения&scope=offline,messages&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.24&response_type=token

Вместо "ТутIDПриложения" указываем ID своего приложения.

"scope=offline,messages" - говорит о том, что токену будет предоставлен:

  • оффлайновый доступ (срок действия токена будет бесконечный, не нужно будет раз в сутки получать новый)
  • доступ к сообщениям

При переходе по указанному адресу у вас запросят права на:

  • Доступ к сообщениям (мы хотим получать и отправлять сообщения )
  • Личной информации (всегда запрашивается)
  • В любое время (так как токен бессрочный)

Разрешаем.

После чего вы попадете на страницу с текстом:

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

А в адресной строке браузера будет приблизительно такой адрес:

https://oauth.vk.com/blank.html#access_token=6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af&expires_in=0&user_id=24552345

Токен это то, что начинается после "access_token=" и заканчивается перед "&expires_in=". Его и вставляем в скрипт.

Powershell скрипт "Русский чат бот для вконтакте":

#скрипт автответчика для Вконтакте
#Автор: elims.org.ua

#Данные которые нужно указать:
$users_id = 2141,1234234,134156,4525 #id людей, которых игнорировать, то есть с ними скрипт не будет общаться
$base_file_path = "C:\Dropbox\QIPBot\reg.txt" #указываем где находится файл с базой вопросов-ответов 
$token = "6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af" #указываем токен

function get_message_base { #получаем и конвертируем базу вопросов ответов 
 $message_base_file = Get-Content $base_file_path 
 $global:file_modify = [int][double]::Parse($(Get-Date -date (Get-Item C:\Dropbox\QIPBot\reg.txt).LastWriteTime.ToUniversalTime() -uformat %s)) #дата изменения файла в юникс формате
 $global:message_base = @{} #создаем пустой ассоциативный массив
 $global:message_base.matches = @{}
 $global:message_base.answers = @{}
 $i = 0
 foreach ($line in $message_base_file) { #для каждой строки из файла 
 if ($line -match '^\^.*\$$') { #если нашли правило 
 $global:message_base.matches[$i] = $line #записываем правило в масив
 $line_j = $line_i+2 #номер строки с которой начинаются ответы на правило 
 $answers_i = 0 #количество ответов на правило
 $answers = @{} #масив из ответов на определенный вопрос
 do { #записываем ответы на правило в отдельный масив
 $answers[$answers_i] = $message_base_file[$line_j] #записываем ответы на определенный вопрос в масив
 $answers_i++
 $line_j++
 } while (-not($message_base_file[$line_j+1] -match '^\^.*\$$')-and($line_j -le $message_base_file.count)) 
 $global:message_base.answers[$i] = $answers #записываем масив ответов на определенный вопрос в общий масив ответов
 $i++ 
 }
 $line_i++ #номер текущей строки в файле
 } 
}

get_message_base
#получаем id последнего сообщения, на все последующие нужно отвечать:
$uri = "https://api.vk.com/method/messages.get?count=1&v=5.24&access_token="+$token
$request = Invoke-WebRequest -Uri $uri 
$response_array = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив
$message_id_last = $response_array.response.items[0].id 
"id последнего сообщения: " + $message_id_last

#Бесконечный цикл, в котором происходит общение:
do {
 $uri = "https://api.vk.com/method/messages.get?count=10&v=5.24&access_token="+$token
 $request = Invoke-WebRequest -Uri $uri #получили последние 10 входящих сообщений
 $response_array = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив
 $message_id = $response_array.response.items
 $items_i = $response_array.response.items.count
 do { #идем в обратном порядке по сообщениям
  $items_i-- 
  $item = $response_array.response.items[$items_i]
  #если человек не среди исключенных и сообщение имеет id больше того, после которого нужно отвечать
  if (-not($users_id -contains $item.user_id )-and($item.id -gt $message_id_last)) { 
   $i = 0
   do { #для каждого правила
    $i++ 
    if ($item.body -match $message_base.matches[$i]) { #проверяем подпадает ли сообщение под правило
     "Вопрос от " + $item.user_id + " id-сообщения: " + $item.id + " : " + $item.body 
     $maximum = $message_base.answers[$i].count - 1
     if ($maximum -gt 0) {$answer_number = Get-Random -minimum 0 -maximum $maximum}else{$answer_number=0}
     $answer = $message_base.answers[$i][$answer_number]
     $time_sleep = $answer.length / 5 #смотрим сколько символов в ответе и делим на 5 для имитации скорости печати 5 символов в секунду
     $time_sleep_i = 0
     "Время общего сна: " + $time_sleep 
     do { #задержка для имитирования скорости печати, раз в 10 секунд посылаем запрос, который говорит что идет печать
      $uri = "https://api.vk.com/method/messages.setActivity?user_id=" + $item.user_id + "&type=typing&v=5.24&access_token="+$token #посылаем процесс набора текста
      $request = Invoke-WebRequest -Uri $uri
      if ($time_sleep-$time_sleep_i -ge 10) { 
       "спим 10 секунд"
       Start-Sleep -s 10 
      } 
      else { 
       "спим секунд: " + ($time_sleep-$time_sleep_i)
        Start-Sleep -s ($time_sleep-$time_sleep_i) 
      }
      $time_sleep_i = $time_sleep_i + 10
     } while ($time_sleep_i -lt $time_sleep) 
     "Ответ: $i из " + $message_base.matches.count + " " + $answer 
     if ($i -eq ($message_base.matches.count - 1)) { #сохраняем вопросы на которые не были найдены ответы и подпали под общее правило
      $item.body | Out-File -Append "C:\Temp\questions-without-answers.txt" -Encoding UTF8 #ответы на эти вопросы можно придумать и добавить в базу
     } 
     $i = -1 #ответ найден, прерываем дальнейший поиск маски
     $message_id_last = $item.id #обновляем указатель на последнее отвеченное сообщение
     #посылаем ответ
     $uri = "https://api.vk.com/method/messages.send?user_id="+$item.user_id+"&message="+$answer+"&v=5.24&access_token="+$token
     $request = Invoke-WebRequest -Uri $uri 
    }
   } while (($i -le $message_base.matches.count-2)-and($i -ne -1))
  } 
 } while ($items_i -ge 0 ) 
 $file_modify_check = [int][double]::Parse($(Get-Date -date (Get-Item $base_file_path).LastWriteTime.ToUniversalTime() -uformat %s)) #unix-время последней модификации файла вопросов-ответов
 if ($file_modify_check -gt $file_modify) {get_message_base} #если база вопросов ответов изменялась, то снова ее считываем
 $time = [int][double]::Parse($(Get-Date -date (get-date).ToUniversalTime()-uformat %s)) #берем текущее время в юникс-формате и переводит в целое число
 write-host("$time Следующий запрос будет через 5 секунды. Последнее сообщение $message_id_last")
 Start-Sleep -s 5 

} while ( 1 -eq 1) #бесконечный цикл

В самом начале скрипта, после строки "#Данные которые нужно указать:" указываем свои данные (вместо моих): id-людей с которыми автоответчик не должен общаться, путь к файлу с вопросами-ответами и токен.

Запускаем из командной строки Powershell-скрипт и любуемся его работой =)

P.S.: На всякий случай предупрежу - пользуйтесь аккуратно, без злоупотреблений, все-таки ботоводство нигде не приветствуется.

Понравилось? =) Поделись с друзьями:

Обсуждение записи “Русский чат бот для Вконтакте на Powershell скрипте”

  1. mandarin (dietas24.ru) says:

    Прикольная статейка

  2. SUNDUK says:

    Меня очень заинтересовала данная тема, и хотелось бы узнать подробное. Но так как я полностью далек от всего этого по технической части, это печально. Но так как я очень люблю всякие соц. эксперименты, разнообразный тролинг и т.д. мне это интересно) Владимир, можно ли вас попросить представить какой-то вариант того как реагирует бот на сообщения (если можно на примере текста с «переписки»)? Каким образом дает ответы и т.д.? Что если во время разговора вопроса в базе нету?
    (Я не знаю языков програмирования, поэтому меня интересует более социальная сторона даного творчества)=))

  3. Владимир Демянович (elims.org.ua) says:

    SUNDUK, можешь пообщаться с этой девушкой: https://vk.com/id95991786 =)

    Если ответов нет, то присылается случайным образом один из пару сотень вопросов которые я нашел на сервисах типа ask.fm

  4. Владимир Демянович (elims.org.ua) says:

    Пример диалога:

    Annette: Привет. Я из Питера, меня зовут Аня, мне 19 лет
    Вова: эх молодость…)
    Вова: Какая у тебя мечта? У меня — жить где-то на своем красивом райском острове, с домом со всеми удобствами, интернет и тд. и тп) своим причалом с яхтой, небольшим самолетиком, и чтоб все это было автономно) вот)
    Annette: Умереть с пользой для человечества
    Вова: Для кого?
    Annette: Человечества. Даже если эта польза будет маленькой и незначительной. Хочу сделать что то хорошее за свою жизнь, построить церковь, например.
    Вова: Обойдемся без примеров.
    Annette: А что так? ((
    Вова: Да, так. Ничего.
    Annette: ?
    Вова: ?
    Annette: Как ты относишься к политике Порошенко?
    Вова: позитивно отношусь) одобряю)
    Annette: А Путина?
    Вова: На одном сайте встретилось что будучи вице-мэром, Путин через Ленинградское Адмиралтейское объединение организовал продажу подводных лодок за границу. В 1994 году зам. Генерального директора объединения был убит (одна из версий – за отказ осуществить незаконную продажу военного имущества за границу).
    Annette: Я не про это. И у него косяки есть. Правда, что у вас говорчт, будто Путин ввёл войска на Украину?
    Вова: А про что?
    Annette: Правда, что у вас говорчт, будто Путин ввёл войска на
    Украину?
    (тут я не удержался написал одно сообщение сам):
    Вова: как тебя этот вопрос волнует) неужели тебе заплятят за него, что ты так настойчиво его добиваешся)
    Annette: ?? Нене, просто нам в новостях об этом вещают
    Вова: проще не бывает)
    Annette: Я будующий врач) я против войны
    Вова: Ну, что же, будь)
    Annette: У взрослых такие тяжёлые взгляды на мир…
    Вова: такие, это какие?)
    Annette: Ты подумал, что мне заплатят? Что там вообще происходит?
    Вова: да, мне так показалось)
    Annette: Будь проще к русским)
    Вова: научи быть проще)
    Annette: Как?
    Вова: как… как.. а вот так!)
    Annette: Ты не думаешь, что это Россия развязала войну?
    Вова: не то что думаю, считаю…)
    Annette: Да зачем? Зачем?
    Вова: А и, правда, зачем?
    Annette: Зачем?
    Вова: даже не знаю зачем)
    Annette: Зачем тогда воевать с братской страной? Просто так?
    Вова: Вот и плохо.
    Annette: Я думаю это США нас сорит
    Вова: Думать это хорошо)
    Annette: o_O
    Вова: чем или как тебя легче всего обидеть?
    Annette: Но наших войск нет
    Вова: Никаких «но».
    Annette: Наших войск на территории Украины нет. Без «но»
    Вова: Самая древняя известная учёным карта, а также самое древнее поселение Homo Sapiens найдены в Украине, в селе Межиречье (не Межигорье) Ровенской области. Им 14,5 – 15 тысяч лет. Карта выбита на кости мамонта, с этого же материала и поселение. Так что Украина — это одна из древнейших населенных територий.

  5. Олег Клышко (klyshko.ru/sofit) says:

    не знал что такие автоответчики есть, попробую воспользоваться

  6. Юрец says:

    Нда… После примера диалога, прямо на философию пробило. Живешь себе в интернете, думаешь что живешь, но нет — тонешь в море слов… Так и жизнь проходит. Ужас!

    Володя, напиши статью, как избавиться от интернет зависимости. Для меня будет актуально :)

  7. And says:

    Invoke-WebRequest — у меня это не распознаётся PowerShell-ом 2.0…
    Надо более свежую версию или что? :(

  8. Владимир Демянович (elims.org.ua) says:

    And, да, вторая слишком древняя. У меня установлена четвертая версия.

  9. Артем says:

    Очень заинтересовала статья, пытался повторить, но выдало несколько ошибок:
    Имя «Invoke-WebRequest» не распознано как имя командлета, функции, файла скрипта или выполняемой программы.
    Имя «ConvertFrom-Json» не распознано как имя командлета, функции, файла скрипта или выполняемой программы.
    Не удается индексировать в массив NULL.
    Стоит скачать новую версию, или это что-то другое?

  10. Владимир Демянович (elims.org.ua) says:

    Артем, да, установите новую версию PowerShell

  11. Кирилл says:

    Очень здорово! спасибо автору
    Можно ли как то заполучить базу девушки блондинки? =)

  12. Владимир Демянович (elims.org.ua) says:

    Кирилл, базу достаточно долго совершенствовал, жалко ее отдавать в паблик. Но если будет достаточное количество желающих людей, смогу сделать что-то вроде api — скрипт к моему сайту или серверу будет посылать фразу на которую нужно ответить, а мой сервер будет отдавать скрипту ответ которым должен ответить автоответчик.

    Таким образом и можно будет бесплатно пользоваться актуальной версией моей базы, но при этом я ее в паблик не солью)

  13. Кирилл says:

    Согласен что просто сливать глупо. Просто зная, что есть готовое решение, не хочется заново придумывать велосипед =) Возможно ли её приобрести или обменять? Цели сливать в паблик не преследую…
    https://vk.com/genkovich вот контакт для личного общения =) ну или на почту. Буду благодарен

  14. Владимир Демянович (elims.org.ua) says:

    Кирилл, возможен только вариант описанный выше) Хотя все можно купить при большом желании, но… в моем случае цена должна меня удивить и глаза засветиться от жадности) так что вариант с продажей отпадает, так как это не порядок сотень долларов, да и при цене в 1000$ я буду еще колебаться)

  15. Кирилл says:

    Эхх, жаль, жаль =) ну что же, готов в числе первых испытывать API и помогать в развитии бота =) Если, конечно, все будет развиваться…

  16. Эдуард says:

    А возможно ли игнорировать сообщения из бесед вконтакте?

    Если кто-то отписался в беседе, болтун считывает это сообщение и начинает отвечать этому пользователю в личные сообщения..

  17. Владимир Демянович (elims.org.ua) says:

    Эдуард, замените строку с

    messages.get?count=10&v=5.24&access_token=

    на строку

    messages.get?count=10&filters=2&v=5.24&access_token=

    если общение активное то рекомендую увеличить количество получаемых сообщений за раз с 10 до 100, тогда так:

    messages.get?count=100&filters=2&v=5.24&access_token=

  18. Андрей says:

    Не пойму как пользоваться Powershell, как запустить скрипт..

  19. Владимир Демянович (elims.org.ua) says:

    Андрей, вот тут я писал о том, как запускать Powershell: elims.org.ua/blog/windows-powershell/

  20. Денис (justonsant.ru) says:

    Здравствуйте!
    Интересует вопрос, возможно ли сделать ответ с цитированием: Боту задают вопрос «что такое коллайдер?» На что бот берёт слово коллайдер и отвечает к примеру «Ну коллайдер это…»
    И ещё вопрос, можно ли, что бы при многократном приветствии бот анализировал как то что уже было приветствие и отвечал «Здоровались уже» или чтото в этом роде? Заранее спасибо

  21. Владимир Демянович (elims.org.ua) says:

    Денис, да, конечно можно, если есть навыки программирования =)

  22. Александр (vk.com/poddyakonov) says:

    Доброго времени суток. Впервые попробовал установить этот автоответчик, раньше с такими вещами не сталкивался, но тема эта заинтересовала. Попробовал установить, запустил и тут же столкнулся с проблемой — бот отвечает пользователям из беседы в личку, указанный выше метод изменения фильтра не помог, по идее это связанно с обновлением версии API:
    «5.10
    В методе messages.get для параметра filter разрешены только значения 0 (все входящие или все исходящие сообщения, по полю out) или 8 (важные сообщения), остальные значения игнорируются. » (документация ВК)

    Вопрос — можно ли как-то по другому запретить боту отвечать на сообщения в беседах?

  23. Владимир Демянович (elims.org.ua) says:

    Александр, добрый день, замените строку:
    if (-not($users_id -contains $item.user_id )-and($item.id -gt $message_id_last)) {
    На строку:
    if (-not($users_id -contains $item.user_id )-and($item.id -gt $message_id_last)-and($item.chat_id -lt 0)) {

  24. Игорь says:

    Обновил. Часть ошибок уже отсутствуют.
    Осталось только это:
    Invoke-WebRequest : Невозможно разрешить удаленное имя: ‘httpsmessages.get’
    C:\temp\1.ps1:41 знак:13
    + $request = Invoke-WebRequest -Uri $uri #получили последние 10 входящих сообщени …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebEx
    ception
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

    Не подскажете, что я не так сделал?

  25. Владимир Демянович (elims.org.ua) says:

    Игорь, что у Вас в 44-й строке?

  26. Игорь says:

    Спасибо. Уже решил проблему.
    Заменил httpsmessages.get на https://api.vk.com/method/messages

  27. divadii says:

    Бот меня восхитил. :)
    Общение Вовы и Аннетт — потрясающее.

    Было бы интересно почитать общение ДВУХ ботов о политике и Путине — российского и украинского. Это было бы феерично.
    Это шутка, конечно. Мы и так знаем такое общение — его масса по Инету.

    ==

    По теме — изучаю все Ваши наработки. — глаза вот такие: О_О

  28. Владимир Демянович (elims.org.ua) says:

    divadii, спасибо на добром слове =)

  29. Luarviq says:

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

  30. Владимир Демянович (elims.org.ua) says:

    Luarviq, статья написана для технически подкованных читателей. Какой именно путь не может найти?

  31. Дмитрий says:

    Здравствуйте, Владимир я не селен в этом всем, не могли бы вы мне помочь оформить этот бот с помощью Team Viewer , буду очень благодарен

  32. Дмитрий says:

    Кто может помочь настроить бот с помощью Team Viewera??

  33. Владимир Демянович (elims.org.ua) says:

    Дмитрий, мое время стоит не дешево, так как у меня большая нагрузка по поставленным задачам. Если Вы готовы за это платить — то могу помочь. Хотя может найдется тот, кто сможет это Вам сможет сделать безвозмездно.

  34. Никита says:

    а можно ли сделать так что бы бот писал всем кто только что добавился в друзья «Привет»а там уже дальше развивать разговор ?

  35. Андрей says:

    Здравствуйте! Помогите пожалуйста решить проблему.. Я не могу разобраться со словарем бота…
    Там наприме код:
    ^(?i)(.*)(лошок)(.*)$

    иди нафиг придурок больной
    А оно просто игнорирует эту строку, и отвечает непонял… вот фото:
    https://pp.vk.me/c628528/v628528587/2c49e/r3OOt-szdVI.jpg

    Почему не отвечает на «лошок» — «иди нафиг придурок больной»??

  36. Владимир Демянович (elims.org.ua) says:

    Андрей, я бы сначала устранил ошибку которая присутствует в скриншоте. У меня кстати это правильно нормально на боте отработало.

  37. Андрей says:

    Владимир, я не совсем понимаю в чём ошибка и что нужно исправилять.. Не поможете мне?

  38. Владимир Демянович (elims.org.ua) says:

    Удалите просто то правило, на которое ругается и посмотрите поможет ли

  39. Владимир Демянович (elims.org.ua) says:

    Никита, да, конечно, можно, если умеете немного программировать =)

  40. Андрей says:

    выполняется разбор «^(?i)(.*)(((\=)|(\%)\))|(\)\))|O\:\-\)|O\:\)|O\+\)|O\=\)|0\:\-\)|0\:\)|0\+\)|0\=\)|\:\-\)|\:\)|\=
    \)|\+\)|\:\-\(|\:\(|\+\(|\=\(|\;\-\)|\;\)|\^\_\~|\:\-P|\:P|\:\-p|\:p|\+Р|\=P|\:\-b|\:b|\+b|\=b|\8\-\)|\8\)|В\)|B\)|\:
    \-\D|xD|хР|xp|хd|хp|\:D|\+D|\=D|\:\-\[|\:\[|\;\’\>|\;\-\.|\=\-O|\=O|\=\-o|\=0|O\_O|O\_o|o\_O|O\_0|o\_0|0\_O|0\_o|0o|o
    0|0о|о0|\:\-\*|\:\*|\:\-\{\}|\:\{\}|\+\{\}|\=\{\}|\^\.\^|\:\’\(|\:\-\’\(|\:\-Х|\:\-X|х\:|X\:|\:\-\#|\:\#|\>\:o|\>\:O|
    \>\+O|\>\:o|\>\+o|\>\=o|\:\-\@|\:\-\||\:\||\=\||\:-\|\:\-\/|\:\\|\:\||\:\/|\8P|\8р|\]\:\-\>|\}\:\-\>|\]\:\>|\}\:\>|\>
    \:\-\]|\>\:\]|\[\:\-\}|\[\:\}|\:\-\!|\;\-\!|\:\!|\;\!|\:\-\~|\;\-\~|\@\}\-\>\-\-\|\|\-\0|\@\}\-\:\-\-|\@\>\}\-\-\`\-\
    -\-|\@\=|\%\)|\\m\/|\%\)|\%\-\)|\:\$|\=\]|\;\D).{0,}$» — Нераспознанная esc-последовательность \_.
    C:\Users\Radilitskiy\Desktop\Разговорный бот для вк.ps1:54 знак:9
    + if ($item.body -match $message_base.matches[$i]) { #проверяем под …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException

    Где искать это правило, что собственно удалять? хеееееееееелпп плисс(

  41. Владимир Демянович (elims.org.ua) says:

    В файле с фразами куда пытаетесь добавить свое правило.

  42. Андрей says:

    Но где именно искать и в какой строке это правило?

  43. spy686 says:

    Возможно под PS 2 комуто понадобиться:

    # function для конвертации из Json
    function ConvertFrom-Json20([object] $item){
    add-type -assembly system.web.extensions
    $ps_js=new-object system.web.script.serialization.javascriptSerializer
    return $ps_js.DeserializeObject($item)
    }

    # function получения $response_array из запроса
    function response_array($objUrl){
    $client = new-object System.Net.WebClient # new-object
    $client.Encoding = [System.Text.Encoding]::UTF8 # Encoding
    $response_array = $client.DownloadString($objUrl) # DownloadString
    return $response_array = ConvertFrom-Json20($response_array) # Конвертируем полученные данные из формата JSON в массив
    }

  44. Александр says:

    А есть возможность в этом скрипте заложить отправку изображения в ответ на конкретные сообщения? Картинки доступны по прямым ссылкам.

  45. Владимир Демянович (elims.org.ua) says:

    Александр, есть. Возможности ограничиваются лишь Вашими навыками в программировании и фантазии. Исходный код открыт и Вы можете его переделывать как душе угодно =)

  46. Влад says:

    Не работает напиши мне в вк
    vk.com/fichinghackvk
    там что то пишет про parse
    скинь мне нормальный код плз

  47. Диман says:

    Здравствуйте) Подскажите, пожалуйста, как сделать как раз так, чтоб бот отвечал на сообщения в чате не в лс тому что отправил сообщение, а в том же самом чате?

    второй вопрос. Подскажите, пожалуйста, как сделать так, чтоб бот отвечал не на все подряд, а только при определенном обращении к нему например?

    Прошу прощения за такие вопросы) я слегка пенёк во всем этом))

  48. Эра says:

    Что нужно читать чтобы полноценно разобраться конкретно в этом боте? Просто понятие скриптового языка довольно растянуто, а я в этой теме подтянут не сильно

Обсудить