louie1743shkirondo
Новичок
- Сообщения
- 28
- Репутация
- 0
В общем, есть скрипт, который, в принципе, работает.. Но один раз. То бишь, он отправляет запрос и возвращает данные по непрочитанным диалогам в вк, дальше я беру текст сообщения, ид человека.. Формирую ответ на сообщение, используя обычный текстовый документ, разделённый | и варианты ответа через / . Пример:
Но всё это происходит только один раз... В чём проблема?
Дальше я отправляю это самое сообщение...
Вот сам скрипт:
P.S.
Если есть какие-то предложения по оптимизации, буду только за)
Как у тебя дела|Всё нормально/Всё отлично/Всё путём/Какая банальщина/Всё ОК/Да норм, вроде/Всё как всегдаа/Всё как всегда)/Всё как обычно)/Всё хорошоо/Норм/Лучше всех/Лучше и быть не может/Хорошо ;D/А какого цвета у тебя трусы?/Мама довольна/Здравствуй. Пока что дел нет. Как появятся, я тебе позвоню. Поможешь/Ответы на вопрос “как дела? ” за 1500!/Привет. Только что ответила, на такой же вопрос одному знакомому. У него случился инфаркт/Как у картошки, если весной не посадят, то осенью съедят/Лучше всех, и никто не завидует/Дела у прокурора, у нас делишки/Надо бы хуже, да дальше некуда/Как у английского короля, не знаю, куда деньги девать/Плохо, корова не доится/Хорошо, но деньги не помешали бы/У меня ничего, а вот как там у чукчей?/Да вот 3 рубля не хватает на вертолет/Да такие дела, только приснится, могут/Если бы не спросил, были бы лучше/Все как в лучших домах Парижа и Лондона/Спасибо, вас также, тем же и по тому же месту/По высшей гильдии/С пивом потянет/Как в курятнике, все в потемках
Но всё это происходит только один раз... В чём проблема?
Дальше я отправляю это самое сообщение...
Вот сам скрипт:
Код:
#include <String.au3>
#include <Array.au3>
#include <File.au3>
#include <IE.au3>
HotKeySet("{ESC}", "Close")
$Offset = 0
Global $File = @ScriptDir & "\Answers.txt"
If Not FileExists($File) Then _FileCreate($File)
Global $FileOpen = FileOpen($File, $FO_APPEND)
Global $Token = 'Токен'
While 1
VK()
WEnd
Func VK()
Global $dShell = "https://api.vk.com/method/messages.getDialogs?count=6&" & $Offset & "&unread=1&access_token=" & $Token & "&v=5.59"
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', $dShell)
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
$oHTTP.Send('')
$oHTTP.WaitForResponse
$res = $oHTTP.ResponseText
Sleep(1500)
VKJSON_GetItemsFromResponse($res)
Sleep(1500)
$Ust_pos = StringInStr($res, '"user_id"')
$Ust_pos = StringInStr($res, '"user_id":', 0, 1, $Ust_pos)
$Uend_pos = StringInStr($res, ',"read_state"', 0, 1, 1)
Global $User_Id = StringMid($res, $Ust_pos + 10, $Uend_pos - $Ust_pos - 10)
;ConsoleWrite($User_Id & @CRLF)
$Ust_pos = StringInStr($res, '"count"')
$Ust_pos = StringInStr($res, '"count":', 0, 1, $Ust_pos)
$Uend_pos = StringInStr($res, ',"items"', 0, 1, 1)
Global $DialogsCount = StringMid($res, $Ust_pos + 8, $Uend_pos - $Ust_pos - 8)
$Offset += 1
If $Offset = $DialogsCount Then
$Offset = 0
EndIf
Global $Text = _StringBetween($res, '"body":"', '"')
For $i = 0 To $DialogsCount - 1
Global $Message = $Text[$i]
ConsoleWrite($Message & @CRLF)
$i += 1
CheckKnowledge()
ConsoleWrite($i & @CRLF)
Next
EndFunc
Func VKJSON_GetItemsFromResponse($res)
Local $Obj = ObjCreate('scripting.Dictionary')
Local $Last_Pos = 1
Local $counter = 1
Local $resp
While 1
$resp = VKJSON_GetItem($res, $Last_Pos)
If $Last_Pos = 0 Then ExitLoop
$Obj.add($counter, StringReplace($resp, '\"', ''))
$counter += 1
WEnd
Return $Obj
EndFunc
;=======================================================================================
Func VKJSON_GetItem(ByRef $res, ByRef $lastSt_pos)
Local $st_pos = $lastSt_pos, $end_pos = 0, $next_pos = 0, $return_Pos = 0
$st_pos = StringInStr($res, "{", 0, 1, $st_pos)
If $st_pos = 0 Then
$lastSt_pos = 0
Return 0
EndIf
$end_pos = StringInStr($res, "}", 0, 1, $st_pos)
$next_pos = StringInStr($res, "{", 0, 1, $st_pos + 1)
$lastSt_pos = $end_pos
While ($next_pos < $end_pos)
$lastSt_pos = $end_pos
$end_pos = StringInStr($res, "}", 0, 1, $end_pos + 1)
$next_pos = StringInStr($res, "{", 0, 1, $next_pos + 1)
WEnd
Return SetError(0, $return_Pos + 1, StringMid($res, $st_pos + 1, $end_pos - $st_pos - 1))
EndFunc
;=====================================================================================================================================
Func CheckKnowledge()
$Message = StringSplit($Message, " ")
$Sent = UBound($Message)
$c = 1
$prob = 0
$b = 1
$Words = FileReadToArray($File)
$Num = UBound($Words)
For $f = 0 To $Num - 1
$b = 1
$c = 1
$quest = ""
$answer = ""
$line = $Words[$f]
$line = StringSplit($line, "|")
$quest = $line[1]
$quest = StringSplit($quest, " ")
$qNum = UBound($quest) - 1
While $b <> $qNum
; ConsoleWrite($b & @CRLF)
If $quest[$b] = $Message[$c] Then
$answer = $line[2]
$answer = StringSplit($answer, "/")
$aNum = UBound($answer) - 1
$Rand = Random(1, $aNum, 1)
$ans = $answer[$Rand]
$c += 1
$prob += 1
EndIf
$b += 1
WEnd
$del = Round($prob / $qNum)
If $del >= 0.5 Then
Global $ans
Else
Global $ans = "Я не понимаю.. Перефразируй"
EndIf
Next
$Shell = "https://api.vk.com/method/messages.send?user_id=" & $User_id & "&message=" & $ans & "&access_token=" & $Token & "&v=5.59"
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', $Shell)
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
$oHTTP.Send('')
EndFunc
;========================================================================================================
Func Write()
FileWrite($FileOpen, $Message & "|" & @CRLF)
EndFunc
;======================================================================================================================================
Func Close()
Exit
EndFunc
P.S.
Если есть какие-то предложения по оптимизации, буду только за)