1

Тема: Автоответчик

Добрый день. Мне нужен АХК скрипт, который может отвечать на заданные вопросы заданным ответом, но чтобы он отвечал не обычным способом, то есть я хочу чтобы бот отвечал на предложения: Как дела? ; Как здоровье?. Вот такое сообщение: Хорошо.
Но чтобы это было не на любой текст в чате, а на определенный. Пример:

Ivan_Ivanon[228]: Как дела?
(Ник и ID рандомный)

А бот ответил бы таким образом:
/sms 228 Хорошо.
(ID рандомный).

Я не хочу чтобы он отвечал на сообщения такого типа:
Как здоровье (Ivan_Ivanov) [228]

Думаю вы поняли мою мысть :). Надеюсь поможете.

2 (изменено: Palah, 2016-08-07 19:18:17)

Re: Автоответчик

Если вам будет так проще, то я хочу скинуть вам АХК, который нужно отредактировать на то, чтобы он срабатывал не на каждое сообщение которое заданно в чатлоге, а на сообщения только такого типа:
Ivan_Ivanov[228]: Как дела?
Ник и ID рандомные.

FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{

lastline := GetNewLine(FileCLog)

If lastline contains привет,здрав,здаров, ѕривет
{
RegExMatch(lastline, "i).*\[([0-9]*)\]: \{FFCD00\}.*", idPl)
Sendinput {F6}/sms %idPl1% Здравствуйте{Enter}
}

}

GetNewLine(filename)
{ ;функци¤ чтени¤ последней строки, если файл изменен каждыее 2000 мс
static old
static new
if !old
{
FileGetSize, old, %filename%
new := old
}
while old = new
{
sleep 2000
FileGetSize, new, %filename%
}
old := new
Loop, read, %filename%
if A_LoopReadLine
{
last := A_LoopReadLine ;последн¤¤ строка
}
return last
}

3

Re: Автоответчик

Попробуй так:

FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{

  lastline := GetNewLine(FileCLog)

  ; метасимволы: (\.*?+[{|()^$) перед каждым из них нужно ставить \

  if RegExMatch(lastline, "i).*\[([0-9]+)]: (Как дела\?|Как дела7|чо как\?|сап)$", idPl)
  {
    sleep,1000
    Sendinput {F6}/sms %idPl1% Как обычно.{Enter}
  }
  else if RegExMatch(lastline, "i).*\[([0-9]+)]: (Здравствуйте|Приветствую|даров|хэй)$", idPl)
  {
    sleep,1000
    Sendinput {F6}/sms %idPl1% Здравствуйте{Enter}
  }
}

GetNewLine(filename)
{
  static old
  static new
  if !old
  {
    FileGetSize, old, %filename%
    new := old
  }
  while old = new
  {
    sleep 200
    FileGetSize, new, %filename%
  }
  old := new
  Loop, read, %filename%
  if A_LoopReadLine
    last := A_LoopReadLine
  return last
}
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

4 (изменено: Palah, 2016-08-10 14:11:57)

Re: Автоответчик

Не отвечает он к сожалению
Вот приведу пример из строчки:

[04:45:31] Ivan_urgant[604]: {FFCC99}Приветствую

И ответа от ahk почему то не последовало
Можете попробовать сделать чтобы он реагировал на слова после этого цвета?
Да и как мне сделать чтобы бот отвечал на несколько вопросов?
Мои ответы в одной строчке могут содержать и латинский и русскую раскладки.

5 (изменено: Alectric, 2016-08-10 19:05:39)

Re: Автоответчик

RegExMatch(lastline, "i).*\[([0-9]+)]:.*(Здравствуйте|Приветствую|даров|хэй)$", idPl)
Palah пишет:

Да и как мне сделать чтобы бот отвечал на несколько вопросов?

В смысле от нескольких пользователей разные вопросы? И через какое-то время а не сразу?
Тогда так:

FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{
  lastline := GetNewLine(FileCLog)

  ; метасимволы: (\.*?+[{|()^$) перед каждым из них нужно ставить \

  if RegExMatch(lastline, "i).*\[([0-9]+)]: (Как дела\?|Как дела7|чо как\?|сап)$", idPl)
  {
    id1:=idPl1
    settimer,answer1,-1000 ; answer1 сработает через секунду
  }
  else if RegExMatch(lastline, "i).*\[([0-9]+)]:.*(Здравствуйте|Приветствую|даров|хэй)$", idPl)
  {
    id2:=idPl1
    settimer,answer2,-500 ; answer2 сработает через полсекунды
  }
}
return

answer1:
Sendinput {F6}/sms %id1% Как обычно.{Enter}
return

answer2:
Sendinput {F6}/sms %id2% Здравствуйте{Enter}
return

; и т.д.



GetNewLine(filename)
{
  static old
  static new
  if !old
  {
    FileGetSize, old, %filename%
    new := old
  }
  while old = new
  {
    sleep 100
    FileGetSize, new, %filename%
  }
  old := new
  Loop, read, %filename%
  if A_LoopReadLine
    last := A_LoopReadLine
  return last
}
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.