Тема: Off-bot plugin
Решил поделиться своим опытом автоматизации работы. Все выполнено одним скриптом + task scheduler. Итак:
1) Поддержка подключения к интернет(если используется комутируемый доступ, Dialup/PPPoE).
Запуск:
В Task Schedeler настраиваем время начала, в доп. свойствах выставляем повторять каждую минуту,
командная строка
wscript cmbmgmt.vbs -reconnect
Описание:
Если combats.com не доступен, пытаться установить соединение с интернетом.
Если после установки соединения combats.com не доступен, зарываем бота.
Если после установки соединения combats.com стал доступен, перезапускаем бота.
PS:
Если соединение не коммутируемое, можно использовать как проверку на доступность combats.com (можно),
строчку про rasdial надо закомментировать.
2) Рестарт бота.
Запуск:
В Task Schedeler настраиваем время начала, в доп. свойствах выставляем повтор каждые X минут
(например 127 минут), командная строка
wscript cmbmgmt.vbs -restart
Описание:
Каждые X минут бот будет перезапускаться.
3) Аларм на приватное сообщение.
Запуск:
Поставить галочку Combots - Настройки - Дополнительно - Ведение лога собщений в чате - Включить
Запускаем командную строка(Пуск-Выполнить-cmd).
cscript cmbmgmt.vbs -alarm
Описание:
Запускается бесконечный цикл, который каждый X секунд провеяет дату изменения файла лога.
Если было изменение, проверяется имя отправителя.
Если имя не в белом листе то срабытывает тревога.
Если запустить из меню выполнить, без cmd, то черного окна не будет, в списке процессов будет висеть
cscript или wscript, в зависимости от настроек по умолчанию.
PS:
В белый лист заносятся знакомые(т.е. точно не тарм/палы), чтобы не будили в 3 часа ночи.
Можно попытаться черный список сделать, но есть высокая вероятность ложного не срабатывания,
поэтому использую белый.
Настройки скрипта(требуется настройка только секции Varible):
COMBOTS_PATH = "C:\Program Files\Combots\" - путь к программе
EXE_NAME = "Program.exe" - имя файла программы
PERS_NAMES = "PERSNAME1,PERSNAME2,PERSNAME3" - список логинов через запятую, без пробелов
CONNECTION_NAME = "INET" - имя соединения с интернетом(для комутируемого доступа)
INET_USER_NAME = "LOGIN" - логин для интернета
INET_PASSWORD = "PASSWORD" - пароль для интернета(внимание: пароль хранится в открытом виде!)
URL = "combats.com" - можно указать точный город, например mooncity.combats.com
ALARM_FILE = "C:\alarm\R-Tem-Voiceless.wav" - файл тревоги(только wav) R-Tem-Voiceless самое подходящее
CHECK_INTERVAL = 45 - проверка лога каждые X секунд
WHITE_LIST = "PERS_NAME1,PERS_NAME2,PERS_NAME3" - белый лист
PS:
Будьте внимательны с антивирусом(проверяйте работоспособность), некоторые АВ могут блокировать работу, или вообще счесть за вирус.
Вроде все, мож кому сгодится)).
Сам скрипт(копируем текст, сохраняем как cmbmgmt.vbs):
On Error Resume Next
'========= Varible =========
COMBOTS_PATH = "C:\Program Files\Combots\"
EXE_NAME = "Program.exe"
PERS_NAMES = "PERSNAME1,PERSNAME2,PERSNAME3"
CONNECTION_NAME = "INET"
INET_USER_NAME = "LOGIN"
INET_PASSWORD = "PASSWORD"
URL = "combats.com"
ALARM_FILE = "C:\alarm\R-Tem-Voiceless.wav"
CHECK_INTERVAL = 45
WHITE_LIST = "PERS_NAME1,PERS_NAME2,PERS_NAME3"
'============================
CHAT_LOG=COMBOTS_PATH&"Logs\"&PERS_NAMES&"_ChatLog.txt"
Set objShell = CreateObject("WScript.Shell")
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oArgs = wscript.Arguments
sAction = 0
Select Case oArgs(0)
case "-restart"
sAction = 1
Case "-alarm"
sAction = 2
Case "-reconnect"
sAction = 3
End Select
'==== Restart Section ====
If sAction = 1 Then
KillCombotsProcess
StartCombots
WScript.Quit
End If
'=======================
'==== Alarm Section ====
If sAction = 2 Then
Set objFile=objFSO.GetFile(CHAT_LOG)
mod1 = objFile.DateLastModified
Do While True
mod2 = objFile.DateLastModified
If mod1<>mod2 Then
Set fileText = objFile.OpenAsTextStream(1,-2)
logText = fileText.ReadAll
logText = Left(logText,InStrRev(logText,"]")-1)
logText = Left(logText,InStrRev(logText,"]")-1)
sender_name = Right(logText,Len(logText)-InStrRev(logText,"["))
If instr(WHITE_LIST,sender_name)=0 Then
objShell.Run "sndrec32 /play /close " & chr(34) & ALARM_FILE & chr(34), 0, True
End If
mod1 = mod2
End If
WScript.Sleep(CHECK_INTERVAL*1000)
Loop
End If
'=======================
'==== Reconnect Section ====
If sAction = 3 Then
status1 = Ping(URL)
If status1=0 Then
objShell.Run "rasdial "&CONNECTION_NAME&" "&INET_USER_NAME&" "&INET_PASSWORD,0,True
Else
If CombotsStarted=0 Then
StartCombots
Else
WScript.Quit
End If
End If
status2 = Ping(URL)
If status2=0 Then 'если после подключения URL не доступен - закрываем бота
KillCombotsProcess
Else
If status1=0 Then 'если после подключения URL стал доступен - перезапускаем бота
KillCombotsProcess
StartCombots
End If
End If
WScript.Quit
End If
'=================
MsgBox "For restart combots:"&vbCr&"cmbmgmt.vbs -restart"&vbCr&vbCr&"For enable alarm:"&vbCr&"cscript cmbmgmt.vbs -alarm"&vbCr&vbCr&"For internet reconnect:"&vbCr&"cmbmgmt.vbs -reconnect",0,"Usage"
WScript.Quit
Function CombotsStarted
Set colProcessList = objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '"&EXE_NAME&"'")
CombotsStarted = 0
For Each objProcess in colProcessList
CombotsStarted = 1
Next
End Function
Sub KillCombotsProcess
Set colProcessList = objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '"&EXE_NAME&"'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End Sub
Sub StartCombots
PERS_NAMES_LIST = Split(PERS_NAMES,",")
objShell.CurrentDirectory = COMBOTS_PATH
For i = 0 To uBound(PERS_NAMES_LIST)
objShell.Run """"&COMBOTS_PATH&EXE_NAME&""""&" "&PERS_NAMES_LIST(i),6,False
Next
End Sub
Function Ping(strName)
Set objPing =objService.ExecQuery("select * from Win32_PingStatus where Timeout=400 and address = '"& strName & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) Or objStatus.StatusCode<>0 Then
Ping = 0
Else
Ping = 1
End If
Next
End Function
Отредактировано uniken1 (2011-09-20 08:29:40)