Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание instant messaging Бота на AutoIt

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8

Открыть новую тему     Написать ответ в эту тему

ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поковырявшись, пришёл к выводу, что метод обработки команд в рессивере не годится.
Switch $sMsg
    Case 'a1'
        ;команда пишеться тута
    Case 'a2'
        ;команда пишеться тута
EndSwitch
Ибо есть команды, которые передают параметры, а так же не будет срабатывать если команда находится в середине сообщения.
Например:
  ;получение списка файлов\папок указанной директории
;команда для вызова этой функции: !dir путь_к_каталогу (Пример: !dir C:\ или !dir C:\Program Files)

Как тут быть? не хочется уходить от этого способа, очень удобный.
пока сделал что-то типа этого:  

Код:
$result01 = StringInStr ($sMsg, "!process")
if Not $result01 = 0 then
    $bot_reply = _Process_bot()
    _SendData($hWnd_IcqWindow, $bot_reply)
endif

Но это громоздко...
 
А вот пример использования передачи команды с параметром:


Код:
 
#Include <File.au3>
$resultat = StringInStr ($sMsg, "!dir")
if Not $resultat = 0 then
    $bot_reply = _FileList_bot($sMsg, $resultat)
    _SendData($hWnd_IcqWindow, $bot_reply)
$bot_reply = "" ; очистка переменой
endif
 
;~~~~~~~~~~~~~~
; функция _FileList_bot получает список файлов\папок указанной директории и отправляет хозяину
; команда для вызова этой функции: !dir путь_к_каталогу (Пример: !dir C:\ или !dir C:\Program Files)
; $message - весь текст сообщения;  $position - начальная позиция команды в тексте
;~~~~~~~~~~~~~~

Func _FileList_bot($message, $position)
; прибавляем 5 и считаем, что все символы после команды являются путём, так что лишнего не писать.
$string_dir = StringMid($message, $position+5)
$FileList=_FileListToArray($string_dir)
If @Error=1 Then $otvet = "Path Not Found."
If @Error=4 Then $otvet = "No files\folders found in dir"
If IsArray($FileList) Then
for
$i = 1 to $FileList[0]
    $otvet&= $FileList[$i]&@CRLF
next
EndIf
Return
$otvet
EndFunc

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:27 26-05-2009 | Исправлено: ynbIpb, 18:02 27-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как тут быть? не хочется уходить от этого способа, очень удобный.

Вот и мне на ифки (if...then...endif) тоже не хочется переходить, поэтому, почему бы не сделать так?:
Код:
$sMsg="!dir     C:\"  
 
Switch $sMsg  
Case 'a1'  
;команда пишеться тута  
 
Case "!dir"&stringregexpreplace($sMsg,"!dir(.*)","\1")  
MsgBox(0,"",
_FileList_bot($sMsg))  
;команда пишеться тута  
 
EndSwitch  
 
;-------------------------------Функции------------------------------------  
#Include
<File.au3>  
;~~~~~~~~~~~~~~  
; функция _FileList_bot получает список файлов\папок указанной директории и отправляет хозяину  
; команда для вызова этой функции: !dir путь_к_каталогу (Пример: !dir C:\ или !dir C:\Program Files)  
;$sMsg - весь текст сообщения;  
;~~~~~~~~~~~~~~  
Func _FileList_bot($sMsg)  
Local $sPath, $FileList, $otvet=''  
$sPath=
StringRegExpReplace($sMsg,".*dir(?:\s)*(.*)","\1")  
IF Not $sPath = 0 then  
$FileList=
_FileListToArray($sPath)  
If @Error=1 Then Return "Path Not Found."  
If @Error=4 Then Return "No files\folders found in dir"  
If IsArray($FileList) Then  
for
$i = 1 to $FileList[0]  
$otvet&= $FileList[$i]&@CRLF  
next  
endIf  
Return
$otvet  
Else  
Return
"не указан путь."  
EndIF  
EndFunc
Думаю, работа функции stringregexpreplace($sMsg,"!dir(.*)","\1") понятна: если сообщение начинается с !dir, то эта функция возвратит все то что справа от !dir, иначе - возвратит все сообщение.

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 00:46 28-05-2009 | Исправлено: vicbox777, 01:13 28-05-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отличная идея!
теперь даже не важно есть пробел или нет после !dir
По поводу посредника: Не мог бы ты перекомпилировать Icqbot.exe выкинув из него все встроенные боткоманды, пусть он будет только посредником. А все функци будем писать на втором модуле. И ещё можно ли сделать чтоб фраза отстукивания хозяину "Я в Сети, Boss!" бралась из ini файла.

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 08:30 28-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
перекомпилировать Icqbot.exe выкинув из него все встроенные боткоманды, пусть он будет только посредником.

Раз надо - сделал.
Вот ссылка на программу (исходники прилагаются)Скачать обновленную версию Autoit-Delphi-IcqBot (850 Kb). Список изменений: Выброшены все встроенные в icqbot.exe команды, кроме единcтсенной(команду .close, которая закрывает обе проги, все таки оставил). И еще, раз я уже взялся за переделку, то, в связи с тем, что мной было замечено, что icqbot отказывается пересылать текст, где знаков больше 2500 тысяч, я доделал, чтобы если сообщение очень большое (больше 2500 знаков), то такие сообщения будут автоматом разбиваться icqboto-м,и по 2500 тыс.знаков отсылаться одна за другой; Таким образом можна переслать даже очень большое сообщение (правда больше 10 000 знаков не пробовал) и притом эти сообщения приходят почти как одно, только отделенные в контакт листе ником и датой... Еще по просьбе коллеги, было добавлено в ini файл опцию, где можно указать текст, которым бот будет отвечать, если нужно, своему хозяину при коннекте, получении сообщения.(В связи с этим скрипт-код Receivera тоже изменил, так что имейте в виду)
 
P.S. Когда были убраны все встроенные в icqbot.exe команды, то на этом сайте по он-лайн проверке файлов на вирусы: http://www.virustotal.com/ru/ , в результате проверки файла icqbot.exe 40-ми антивирусами, вирусов не обнаружено!

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 01:11 29-05-2009 | Исправлено: vicbox777, 01:43 29-05-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 

Цитата:
сообщения будут автоматом разбиваться icqboto-м,и по 2500 тыс.знаков

Это хорошее решение, чтоб не напрягать Autoit.

Цитата:
добавлено в ini файл опцию

За это спасибо.

Цитата:
вирусов не обнаружено!

Как раз по этой причине я и просил выкинуть команды, так как по всей видимости эвристический анализатор найдя в EXE'шнике функции сбора иформации о системе и тд, выдавал тревогу.
 
---------------
Уже обживаю потихоньку бота, выделил под него шестизнак.
Функции вынес в отдельный файл Bot_functions.au3, в качестве списка процессов всётаки выбрал этот вариант:
_Process_bot
Формируется список процессов сразу с путями к файлам вместо имён процессов, кроме варианта если нет пути у процесса. Хотел посоветоваться, в первых строках всегда одно и тоже:
System Idle Process:0
System:4

Так вот может это исключить из ответа?
--------------------
 
Я тут подумал может в функциях работы с файлами передавать пути в кавычках?
Ведь например в оперции копирования, нужно будет передать 2 пути...
например: !copy "откуда" "куда"
Как наиболее эфективно вытаскивать текст в ковычках из сообщения?
мне пришло в голову только так...
И ещё не очень догоняю как всётаки это работает stringregexpreplace($sMsg,"!dir(.*)","\1"), в спрвке чего непонятно всё... (.*) - это я как понимаю из справки одиночный символ, а в комбинации со звёздочкой? А что точно делает это: "\1" ?

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 08:23 29-05-2009 | Исправлено: ynbIpb, 15:00 30-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ynbIpb 07:23 29-05-2009
Цитата:
как всётаки это работает stringregexpreplace($sMsg,"!dir(.*)","\1")

Сдесь .* - это любой текст (точка - это любой символ, а звездочка указывает на то что эти символы могут, как присуствовать, так и отсуствовать), который идет после слова !dir, а так как этот "любой текс" заключен в кавычки, то это называется 1 групировка. Так вот назначение как раз этой функции в этом случае: Case "!dir"&stringregexpreplace($sMsg,"!dir(.*)","\1"),- это вернуть весь текст который идет после слова !dir, а 1 групировка именно производит захват этого текста, а параметр "\1" как раз возвращает только текст этой групировки. "\1", еще можно было бы записать как "$1".
 
В этом случае: $sPath=StringRegExpReplace($sMsg,".*dir(?:\s)*(.*)","\1"), тоже самое, за исключением того что это - (?:\s)* означает, любое количество пробелов, которые могут, как присуствовать, так и нет, а это ?: означает, не захватывать эту групировку, но можно было бы написать и так:  $sPath=StringRegExpReplace($sMsg,".*dir(\s)*(.*)","\2")...
 

Цитата:
Я тут подумал может в функциях работы с файлами передавать пути в кавычках?  
Ведь например в оперции копирования, нужно будет передать 2 пути...  
например: !copy "откуда" "куда"

В кавычках, так в кавычках, я не против. А насчет параметров, которые нужно будет извне передавать в скрипт, а потом правильно их обработать, то проще будет так:
Код:
$sTekst='!Copy "1параметр" "2параметр" "и т.д. параметр"'
$arrayOFparametrs=
StringRegExp($sTekst, '(?:"(.*?)")+', 3)
If (Not @Error) Then
for
$i = 0 to UBound($arrayOFparametrs) - 1
   
msgbox
(0, "$arrayOFparametrs["& $i&"]", $arrayOFparametrs[$i])
Next
EndIf

В тексте, который в переменной $sTekst параметры один от другого должны как то быть отделены, или пробелами, или любым символом.

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 18:15 30-05-2009 | Исправлено: vicbox777, 21:03 30-05-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну вроде понял...
Как бы на этом методе реализовать вытаскивание двух групп в кавычках "" , пример которого я показал выше, слишком много строк.

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 20:40 30-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
реализовать вытаскивание двух групп в кавычках ""

Смотри выше, в этом случае удобнее использовать функцию: StringRegExp, которая возвращает массив совпадений...
Или параметры могут быть не отделены ничем ,идти рядом:
Код:
$sTekst='!Copy "1параметр""2параметр" "и т.д. параметр"'
$arrayOFparametrs=
StringRegExp($sTekst, '(?:"(.*?)")+?', 3)
If (Not @Error) Then
for
$i = 0 to UBound($arrayOFparametrs) - 1
   
msgbox
(0, "$arrayOFparametrs["& $i&"]", $arrayOFparametrs[$i])
Next
EndIf
Один символ добавил, а работает уже по всякому...Сам еще учусь "регулярно выражаться"...

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 20:50 30-05-2009 | Исправлено: vicbox777, 23:00 30-05-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отличная реализация! всё понял.
пора пополнять коллекцию команд...
Вот сварганил удаление файла, вроде продумал все варианты чтоб скрипт не упал от ошибки. Работает даже если послать команду в таком виде:  
!filedel  а теперь удалика мне этот файлег: "C:\common\хитрая папка\file.txt" нука нука


Код:
;~~~~~~~~~~~~~~
; функция _Filedel_bot удаляет файл в указанной директории, даже с атрибутом только для чтения.
; команда для вызова этой функции: !filedel "путь_к_файлу" (Пример: !filedel "C:\file.exe" )
; если в качестве пути указать путь к папке, то удалятся все файлы, находящиеся в ней.
;~~~~~~~~~~~~~~

Func _Filedel_bot($sMsg)
Local $otvet=""
$filepath = StringRegExp($sMsg, '(?:"(.*?)")+?', 3); выявляем путь к файлу из всего текста сообщения
If IsArray ($filepath) Then ; если результат является массивом, то продолжаем работу с файлом
$attrib = FileGetAttrib($filepath[0]); проверяем атрибуты файла
If StringInStr($attrib, "R") Then ; если атрибут, только для чтения
FileSetAttrib($filepath[0], "-R",1) ; снимаем этот атрибут
EndIf
$result_filedel = FileDelete($filepath[0])
Else ; Иначе выставляем результат удаления - 0
$result_filedel = 0
EndIf
If
$result_filedel = 1 Then; если результат удаления - 1 то отвечаем, что всё ОК
$otvet= "File was deleted successfully!"
Else; если результат удаления - 0 то отвечаем, что всё плохо
$otvet= "Can not delete a file or file does not exist!"
EndIf
Return
$otvet ; возвращаем сформированный ответ из функции
EndFunc


vicbox777, так как у тебя опыта больше проанализируй, может оптимизируешь лучше.
И если можно делай подробные каменты в коде, чтоб даже новички могли понять работу кода.
з.ы.
Тут подумал о команде !dir, можно ли сделать чтоб он различал каталоги и файлы? Ведь не всегда отсутствие расширения является признаком, что это папка. Например чтоб команда брала каталог в квадратные скобки [папка]
з.з.ы.
Вот ещё функция определения дисков


Код:
;~~~~~~~~~~~~~~
; функция _Alldrives_bot возвращает список имеющихся дисков и их типы
; команда для вызова этой функции: !alldrives
;~~~~~~~~~~~~~~

Func _Alldrives_bot()
Local $otvet =""
$all_drives = DriveGetDrive("all"); получаем массив из букв всех дисков
If NOT @error  Then ; если нет ошибки крутим цикл, пока не перечислим все диски
    For $i = 1 to $all_drives[0]
        $drive_type = DriveGetType ($all_drives[$i]); определяем тип диска
        ; формируем строчку  диск:\ - тип

        $otvet &= StringUpper ($all_drives[$i])&"\ - "&$drive_type&@CRLF
    Next
Else
; если ошибка отвечаем что всё плохо
$otvet = "Can not get list of drives!"
EndIf
Return
$otvet ; возвращаем сформированный ответ из функции
EndFunc


Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 14:19 31-05-2009 | Исправлено: ynbIpb, 15:38 31-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Тут подумал о команде !dir, можно ли сделать чтоб он различал каталоги и файлы? Ведь не всегда отсутствие расширения является признаком, что это папка. Например чтоб команда брала каталог в квадратные скобки [папка]

Можно, я взял функцию _FileListToArray() из UDF - file.au3, и немного изменил её, теперь она ( FileListToArray() -я так ее назвал, только убрал 1 символ из оригинального названия, чтоб не было конфликта с UDF) будет в списке функций, а библиотека file.au3, не нужна:

Код:
$sMsg="!dir c:\"  
MsgBox(0,"папки и файлы",
_FileList_bot($sMsg) )
 
;-------------------------------Функции------------------------------------  
;~~~~~~~~~~~~~~  
; функция _FileList_bot получает список файлов\папок указанной директории и отправляет хозяину  
; команда для вызова этой функции: !dir путь_к_каталогу (Пример: !dir C:\ или !dir C:\Program Files)  
;$sMsg - весь текст сообщения;  
;~~~~~~~~~~~~~~  
Func _FileList_bot($sMsg)  
Local $sPath, $FileList, $otvet=''  
$sPath=
StringRegExpReplace($sMsg,".*dir(?:\s)*(.*)","\1")  
IF Not $sPath = 0 then  
$FileList=
FileListToArray($sPath)  
If @Error=1 Then Return "Path Not Found."  
If @Error=4 Then Return "No files\folders found in dir"  
If IsArray($FileList) Then  
for
$i = 1 to $FileList[0]  
$otvet&= $FileList[$i]&@CRLF  
next  
endIf  
Return
$otvet  
Else  
Return
"No Path"  
EndIF  
EndFunc
 
 
Func
FileListToArray($sPath)
Local $hSearch, $sFile, $asFileList[1]
   
If Not FileExists($sPath) Then Return SetError(1, 1, "")
   
If (StringMid($sPath, StringLen($sPath), 1) = "\") Then $sPath = StringTrimRight($sPath, 1)
; needed for Win98 for x:\  root dir
   
$hSearch = FileFindFirstFile($sPath & "\*")
   
If $hSearch = -1 Then Return SetError(4, 4, "")
   
While 1
       
$sFile = FileFindNextFile($hSearch)
       
If @error Then
           
SetError(0)
           
ExitLoop
        EndIf
       
$asFileList[0] += 1
       
If UBound($asFileList) <= $asFileList[0] Then
ReDim $asFileList[UBound($asFileList) * 2]
       
If StringInStr(FileGetAttrib($sPath & "\0" ), "D") = 0 Then
            If
StringInStr(FileGetAttrib($sPath&"\"&$sFile), "D") Then
               
$asFileList[$asFileList[0]] = "["&$sFile&"]"  
           
Else  
               
$asFileList[$asFileList[0]] = $sFile
           
EndIf
        EndIF
    WEnd
   
FileClose($hSearch)
   
ReDim $asFileList[$asFileList[0] + 1] ; Trim unused slots
   
Return $asFileList
EndFunc  
;==>FileListToArray


Цитата:
так как у тебя опыта больше проанализируй

P.S.Насчот побольше опыта, не уверен, я б проще не сделал. Все должно работать без ошибок.
 
Добавлено:

Цитата:
пора пополнять коллекцию команд...

Вот написал функцию, которая показывает сообщение на компьютере, явно что она не такая уж нужная, но может и пригодится...
Подробнее...

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 21:17 31-05-2009 | Исправлено: vicbox777, 00:36 01-06-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
классно!
думаю нужно к каждой команде прикрутить распознование знака ?, при появление которого отвечало бы подробной справкой по команде типа: !dir?

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 18:24 01-06-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
думаю нужно к каждой команде прикрутить распознование знака ?

Можно и так:
Код:
$sMsg="!dir? C:\"  
 
Switch $sMsg  
Case 'a1'  
;команда пишеться тута  
Case "!dir"&stringregexpreplace($sMsg,"!dir(.*)","\1")
   
If
stringregexpreplace($sMsg,"!dir(\?)+(.*)","\1")=="?" Then
       
$Tekst="Описание команды !dir"&@CRLF&"!dir -получить список файлов\папок указанной директории; полная команда должна быть такой: !dir путь_к_каталогу (Пример: !dir C:\ или !dir C:\Program Files) "
       
MsgBox("0","Описание команды !dir",$Tekst)
;тоесть если после !dir идет вопросительный знак - !dir?, то только пошлется описание (вместо MsgBox)
   
Else
       
MsgBox(0,"",
_FileList_bot($sMsg))  
   
EndIf
EndSwitch
Func _FileList_bot($sMsg) ;это только упрощение для примера
Return $sMsg
EndFunc

Но, думаеш что не хватит общего описания команд (которое естественно будет), а нужно усложнять так код?

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 22:25 01-06-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну я предполагал типа команда !help
выдаёт список всех команд и краткое описание, чтоб в одну строку умещалось по каждой команде.
Типа:  
Добро пожаловать в справочную систему бота.
!proclist - получает список запущеных процессов
!dir  - получает список файлов\папок указанной директории
!filedel - удаляет указанный файл
!folderdel - удаляет указанный каталог
!alldrives - список имеющихся дисков и их типы

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

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:44 01-06-2009 | Исправлено: ynbIpb, 22:55 01-06-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
тогда придется переделывать эту команду:
$sPath=StringRegExpReplace($sMsg,".*dir(?:\s)*(.*)","\1")
учитывая еще то что вопросительный знак в !dir? может как быть так и не быть, сможеш сделать?
 
Ой, а это и не нужно же...
Пусть будет так как ты говориш. Лично я участвую, чтоб лучше изучить Autoit, ведь так лучше изучать, когда что то делать, н идея стосовно бота - интересная, поэтому заинтересовала еще с самого начала(С самого начала мне нужно была только лишь возможность удаленно узнать состояние текущей закачки файлов...). Думаю еще что 2 файла - 1 посредник, а второй обработчик команд, тоже идея самая правильная; когда Sproxy напишет jabber Udf, то схему можно будет оставить туже, только посредником будет уже jabberBot. Тогда код не нужно будет менять совсем, за исключением того, что нужно будет лиш скоректировать название jabberBota, чтоб правильно получать\передавать команды.
 Основа есть, теперь нужны идеи, какие команды добавить в бот, а с этим уже можна и на форумы выйти, если уж так сложно будет...Так что нужно доделать проэкт до конца.

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 23:55 01-06-2009 | Исправлено: vicbox777, 01:11 02-06-2009
timsky



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мой интерес пока отвалился в виду отсутствия свободного времени
Зато мониторю тему периодически

Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 15:15 04-06-2009 | Исправлено: timsky, 15:16 04-06-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Накалякал ещё 1 функцию:

Код:
;~~~~~~~~~~~~~~
; функция _ALLprogs возвращает список установленных программ
; команда для вызова этой функции: !allprogs
;~~~~~~~~~~~~~~

Func _ALLprogs()
Local $otvet = ""
; заносим в переменную ключ, где хранится информация о всех установленных программах
Local $uninstall_key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
For $i= 1 to 300 ; крутим цикл до 300, где 300 это предположительно максимальное клличество программ)
    $subkey = RegEnumKey($uninstall_key , $i); по порядку читаем имя подключа
    If @error <> 0 then ExitLoop ; если ошибка, значит ключи кончились, выход из цикла
    $DisplayName = RegRead ( $uninstall_key&"\"&$subkey, "DisplayName" ); отображаемое имя
    If Not $DisplayName = "" Then $otvet &= $DisplayName & @CRLF; если имя не пустое, то в список его
Next
; если ответ пустой, то формируем ответ чтов всё плохо...
If $otvet = "" Then $otvet = "Can not get list of installed progs!"
Return $otvet ; возвращаем сформированный ответ из функции
EndFunc

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:03 04-06-2009
araneon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Замутка СУПЕР, РЕСПЕКТ ВАМ РЕБЯТА и УДАЧИ.

У меня вопросик, а как сделать чтобы я допустим посылаю команду к примеру
!down "ссылка на файл"
и ссылка копировалась в буфер обмена ?

Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 17:58 07-08-2009 | Исправлено: araneon, 18:03 07-08-2009
araneon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Накалякал ещё 1 функцию:

Друг а не подскажеш как её вставить

Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 22:19 11-08-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я ближайшее время не дома (отпуск) так что при себе ничего нет.
но это элементарно.
в скрипте vicbox777'a есть участок где срабатывают ключевые слова (цикл и много Case), вот на одну Case ставишь сработку ключевого слова !allprogs и вызываешь эту функцию а ответ её отправляется хозяину.

Код:
Case "!process"
        _SendData($hWnd_IcqWindow, _ALLprogs())

типа так вроде...
естественно код самой функции нужно запихать куданить в самый конец скрипта или вообще вынести в отдельный файл как у меня: #include <Bot_functions.au3> ; функции бота
 
А про ссылку на закачку, можно даж написать скрипт чтоб запускал какойнить манагер закачек и начинал её качать...
ток сейчас ничего нет под руками.
 

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 00:44 12-08-2009 | Исправлено: ynbIpb, 00:51 12-08-2009
araneon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
в скрипте vicbox777'a есть участок где срабатывают ключевые слова (цикл и много Case), вот на одну Case ставишь сработку ключевого слова !allprogs и вызываешь эту функцию а ответ её отправляется хозяину.  
 
Код:Case "!process"  
        _SendData($hWnd_IcqWindow, _ALLprogs())  
 
типа так вроде...  
естественно код самой функции нужно запихать куданить в самый конец скрипта

 
Я вроде так и сделал, но чёт от бота тишина, курим дальше
 
УДАЧНОГО ОТПУСКА
 
Добавлено:
 
разобрался, в место
    Case '!allprogs'
 
 я поставил  
 
    Case '!allprogs '  
тоесть с пробелом

Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 01:48 12-08-2009 | Исправлено: araneon, 01:59 12-08-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание instant messaging Бота на AutoIt


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru