Что нового

В чём ошибка?

louie1743shkirondo

Новичок
Сообщения
28
Репутация
0
В общем, есть скрипт, который, в принципе, работает.. Но один раз. То бишь, он отправляет запрос и возвращает данные по непрочитанным диалогам в вк, дальше я беру текст сообщения, ид человека.. Формирую ответ на сообщение, используя обычный текстовый документ, разделённый | и варианты ответа через / . Пример:
Как у тебя дела|Всё нормально/Всё отлично/Всё путём/Какая банальщина/Всё ОК/Да норм, вроде/Всё как всегдаа/Всё как всегда)/Всё как обычно)/Всё хорошоо/Норм/Лучше всех/Лучше и быть не может/Хорошо ;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.
Если есть какие-то предложения по оптимизации, буду только за)
 
Верх