Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Написание instant messaging Бота на AutoIt

Автор: ynbIpb
Дата сообщения: 12.04.2009 20:34
Дабы на захламлять основную тему по AutoIt, было решено вывести это обсуждение в отдельную тему.

Написание instant messaging Бота на AutoIt

(Writing instant messaging Bot on the AutoIt)


Цель:

Написание бота под протоколы популярных instant messaging сервисов. ( ICQ, Jabber, MRA и т.д.)
В которого будут входить функции удалённого управления компьютером, на котором бот запущен.
Никаких зловредных функций и скрытой работы! (мы не троян пишем)
Какие команды будут полезны?
- получить список процессов
- список файлов в определённой директории
- выключение\перезагрузка компьютера
- скачивание файла из интернета
- копирование, перемещение, удаление файлов
- запуск файлов
- запуск\остановка служб
- работа с реестром
- компиляция и выполнение произвольного кода AutoIt, переданного в сообщении


Первые наработки:
JabberXML_UDF.rar от sproxy
icqbot от vicbox777 (обновлённая версия)

Готовые функции:
показ сообщения на компьютере, список файлов\папок, удаление файлов и определение дисков, список процессов с путями

Ссылки по теме:
_TocLib, a library for TOC Protocol, Talk to AIM servers with event-based options
instant messaging bot, no not a spamming project
How to use this dll, Jabber client
YMSG Protocol Support (Yahoo-Oo-oO!)
написание ICQ Control'a на Visual Basic

XMPP Standards Foundation
Programming Jabber
Протоколы прикладного уровня: Jabber/XMPP часть1
Автор: sproxy
Дата сообщения: 12.04.2009 21:06
а серьезней:....

Пообщайтесь с русским разработчиком из команды миранды.
Что бы определить:

Какая dll (модуль/плагин) отвечает за отправку/получение новых сообщений.
И есть ли возможность её использовать в стороннем продукте (думаю да, так как миранда GNU GPL).
+ есть исходный код.

Или, как уже писал, пообщаться с любителями делать сборки, - там то уж точно знают и расскажут какой фалик за что отвечает ))
-----------------------
в если вариантов с dll не найдется, с удовольствием помогу развивать идею по Qip фрону =)
Автор: ynbIpb
Дата сообщения: 12.04.2009 21:23

Цитата:

Какая dll (модуль/плагин) отвечает за отправку/получение новых сообщений.

Я вот не знаю вообще реальзуемо ли это. а так наверное всё запихано в ICQ.dll
Жаль к ней документации нет, какие вызовы и тд, как например в bass.dll была справка (очень всё подробно)

Вот ещё коечто: JabberCOM

JabberCOM является Win32 COM компонентом, который можно использовать для очень быстрого создания Jabber клиентов. Он воплощает все XML парсинг и интерпретации, и весь сокет код. Он обеспечивает лёгкость в использовании событий и методов, разрешает любое количество клиентов, для легкого и быстрого создания в любой Win32 среде разработки.

(перевёл как смог
У этого хоть документация есть...

Добавлено:
[more=Первый тупой набросок на миранде]


Код: AutoItSetOption ( "MouseCoordMode", 2)
$resultat=""
$otvet=""
If WinExists("Заголовок окна") Then
$winn = WinGetText("Заголовок окна")
$resultat = StringRegExp ($winn, "!process", 0)
if $resultat = 1 Then
$Process = ProcessList ()
for $i = 1 to $Process[0][0]
$otvet&= $Process[$i][0]&@CRLF
next
WinActivate("Заголовок окна")
ControlSetText ( "Заголовок окна", "", "[CLASS:Edit; INSTANCE:1]",$otvet)
ControlEnable ("Заголовок окна", "", "[CLASS:Button; INSTANCE:1]")
ControlClick ( "Заголовок окна", "", "[CLASS:Button; INSTANCE:1]")
Sleep (3000)
MouseClick( "right",50 ,50)
Sleep (1000)
MouseClick( "left",55 ,55)
Sleep (1000)
MsgBox (0, "", "всё")
EndIf
EndIf
Автор: sproxy
Дата сообщения: 12.04.2009 22:35

Цитата:
ICQ.dll

у нее есть документация, правда наврядтли найдется что нить новое, всеж это нелегально получается...
А вот работать с мирандой - смотря как у нее релизованноо..

Добавлено:
вот пример...
хз, с Си не знаком, хотя и разобраться не долго.
но вот как это прикручивается к сайту? ...для меня пока загадка )))

в общем думаю пообщаться с людьми, в комментах были посты, кто то что то крутил
на php (это для меня понятней будет) - а значит далее можно разобраться как и че там...
Автор: vicbox777
Дата сообщения: 12.04.2009 23:16
Я вот пользуюсь Qip и вот набрел на ссылку http://forum.qip.ru/showthread.php?t=9060 данная прога токо перехвачивает сообщения из запущенного Qip, и может запускать разные файлы...по указаным ранее командам. Да, если бы можно было напрямую как то сделать чтобы конвертик с qip-a не маячил...
Автор: sproxy
Дата сообщения: 12.04.2009 23:18

а вот и под PHP библиотека.
все работает через замечательный XML - отправлет в нем и в нем же принимает.

по идее AutoIt с этим справится.
пока не нашел документации....но уже можно рыть XMPPHP и на его примере тестить...

Добавлено:
icq - сплошной гемор, частое обновление - частые правки.
в этом случае jabber актуальнее.

Добавлено:
Вооот то что нужно !!
Автор: ViSiToR
Дата сообщения: 13.04.2009 00:52
Интузиазм и новые идеи это конечно хорошо, но...
Я если честно вообще суть всего этого не понимаю... зачем нужен бот для программ, в которых люди обычно общаются? Я ровно также не понимаю смысл игровых ботов... интереснее же самому поиграть , чем на ботов всё вешать .

P.S
Сорри за некий офтоп.
Автор: timsky
Дата сообщения: 13.04.2009 00:55
_TocLib, a library for TOC Protocol, Talk to AIM servers with event-based options
http://www.autoitscript.com/forum/index.php?showtopic=42832

Добавлено:
Вот эта либа вроде что надо

ViSiToR
О некоторых событиях очень удобно получать мессагув асю.
Автор: sproxy
Дата сообщения: 13.04.2009 04:44
ViSiToR
а) лично мне нужна прогу - интернет мессенжер - для своего сайта.
можно делать:
1. чтение/отправка через _INetGetSource
2. чтение rss/отправка _INetGetSource
3. чтение/отправка напрямую через базу
4. наилучшее решение - icq, jabber.

покачто нашел оооооочень много негативных отзывов про написание под icq (в принципы мне и не принципиально) )))


б) а в целом - это же мега решение! любая програ на AutoIt работающая с интернетом - получает мощное
информационное средство + удаленного управления!!!
причем очень тривиальное и не требующа большой специфики - как скажем напрямую через сокеты.
хотя в этом и минус - стороний сервис, зависимость от него. но как показывает практика - jabber (да и icq) работают хорошо.

Добавлено:
timsky 01:55 13-04-2009
Цитата:
_TocLib, a library for TOC Protocol, Talk to AIM servers with event-based options
http://www.autoitscript.com/forum/index.php?showtopic=42832

или уже старая UDF или туплю - пример, не заработал:
[more]

Код: #region: - Options
;~ Opt('GUIOnEventMode', 1)
;~ Opt('MustDeclareVars', 1)

Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#endregion

#include <GuiButton.au3>
#include <GUIConstants.au3>
#include <GUIEdit.au3>
#include <_TocLib.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>

Global $myUser = ""
Global $myPass = ""
Global $targetUser = ""

Global $doQuit = false

$login = _TocLogin( $myUser, $myPass)
if not $login Then
if
@error == $TOC_ERROR Then
_DebugPrint( "TOC Error: code " & $login )
Else
_DebugPrint( "_TocLogin @error = " & @error )
EndIf
Else

_DebugPrint( "Logged in successfully" )
EndIf

_TocRegisterFunc( $TOC_CMD_IMRECV, "HandleRecv" )
_TocInitLoop()

;~ _TocSendIM($targetUser, "This is a test")
;~ _TocSendIM($targetUser, "haha auto response", true)


$GUI = GUICreate("AIM TOC", 299, 353)
$Input = GUICtrlCreateInput("", 0, 306, 299, 21)
$History = GUICtrlCreateEdit("", 0, 0, 299, 305, BitOR($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL))
$Button = GUICtrlCreateButton ("Send", 5, 330, 289, Default, $BS_DEFPUSHBUTTON)
GUISetState(@SW_SHOW)

Do
$guimsg = GUIGetMsg ()
Switch $guimsg
Case $Button
If GUICtrlRead ($Input) <> "" Then
_TocSendIM ($targetUser, GUICtrlRead($Input))
GUICtrlSetData ($History, GUICtrlRead($History)&@CRLF&"You: "&GUICtrlRead($Input)&@CRLF)
_GUICtrlEdit_Scroll($History, _GUICtrlEdit_GetLineCount($History))

GUICtrlSetData ($Input, "")
EndIf
Case
$GUI_EVENT_CLOSE
$doQuit
= True
EndSwitch
Until
$doQuit

Func HandleRecv($packet)
_DebugPrint("Recieved message: " & $packet)
$msg = _TocParseIm( $packet )

;~ MsgBox(0,"_TocLib Test", "("&$msg[0]&") said: " & $msg[3], 2)

;~ _ArrayDisplay ($msg, "message")

;~ if StringInStr($msg[3], "goodbye") Then $doQuit = true

$from = $msg[0]
$message = _StringStripHtml ($msg[3])
;~ MsgBox (0, "", $msg[3])
;~ MsgBox (0, "", $message)

GUICtrlSetData ($History, GUICtrlRead($History)&@CRLF&$from&": "&$message&@CRLF)
_GUICtrlEdit_Scroll ($History, _GUICtrlEdit_GetLineCount($History))

EndFunc

Func
_StringStripHtml ($s)
Return StringRegExpReplace ($s, "<[^<>]+>", "")
EndFunc

Func
_StringNum($sStr1, $sStr2)
For $i = 1 to StringLen($sStr1)
If not StringInStr($sStr1, $sStr2, 1, $i) Then ExitLoop
Next
Return
$i
EndFunc
Автор: ynbIpb
Дата сообщения: 13.04.2009 07:37

Цитата:
Я если честно вообще суть всего этого не понимаю... зачем нужен бот для программ, в которых люди обычно общаются?

Ну это не совсем такой бот. Есть боты которые имитируют живого человека отвечая на сообщения. В нашей же ситуации - это инструмент удалённого контроля.
Допустим у меня на работе сервер. и вдруг там упала какаято важная служба, и он бы сразу отстучался, я бы дал команду на перезагрузку или запуск этой службы.
Хороший пример вот: этот бот, но НЕ используйте его!. Там скрытый бэкдор, тоесть сам автор может послать ему команду на загрузку любого файла например и скачать трояна к вам на комп. И этот бот всёже больше для зловредных целей мне кажется, так как у него скрытый режим работы, наша цель не эта. никаких троянских действий.
timsky
sproxy, круто _TocLib.au3 рабочий. только UTF-8 не знает. иероглифы прут, если в своём клиенте отрубить UTF, то всё ок
И пугает его древность...
Автор: sproxy
Дата сообщения: 13.04.2009 07:52
в общем, думаю самое правильное, изучать работу джаббера по Xml....

Добавлено:
ynbIpb
зы - в общем брать исходники миранды и зубрить с++ )))))))))))
Автор: ynbIpb
Дата сообщения: 13.04.2009 08:14
Эххх... знал бы я другие языки, не работал бы с автоитом.
Для меня автоит это предел возможностей.
А может попробовать на JabberCOM сварганить? Хотя он ещё древнее 2002 год )))
Пока не появится человек, который более менее может поковырять исходники миранды и на их основе не написать UDF, будем юзать AIM'овскую...
Я вот только не догоняю: в чём разница между аимом и аськой?
Автор: sproxy
Дата сообщения: 13.04.2009 09:27
ynbIpb 09:14 13-04-2009
Цитата:
Я вот только не догоняю: в чём разница между аимом и аськой?

AIM
ICQ

т.е. ICQ это подразделение AOL (AIM).
Мэссенжеры: AIM и ICQ обслуживает одна и та же сеть (сервера).
По идее у них полностью одинаковый протокол (+/- отличия по специфике).
У AIM номера буквенный (AIM SN), пример: myname
У ICQ номера циферные (UIN), пример: 123321123

А с этой UDF, пока не разобрался как принимать сообщения.
+ что то не отправляется через QIP на AIM, если он не в сети, а он не в сети если зайти с этой UDF....

undefined
Цитата:
Эххх... знал бы я другие языки, не работал бы с автоитом.
Для меня автоит это предел возможностей.

не все так сложно, как кажется - там то же как и в AU все просто.
Главное разобраться )) ...было оно время.......эххххххххх


Добавлено:

C Джабером не все так сложно.
Там банально:
1. сокет подключение на джабер сервер
2. создает строка в xml и отправляется...

вот только документацию на его парсер не могу найти....все только на си вокруг.....

Добавлено:

в общем вот так все делается.
вполне простой пример на php

вечерком попробую...
Автор: ynbIpb
Дата сообщения: 13.04.2009 11:31

Цитата:
А с этой UDF, пока не разобрался как принимать сообщения.

Офлайн сообщения не принимает.
А вот когда вошёл я вижу его онлайн и спокойно шлю ему сообщения и отвечаю. (вводил в UDF обычный асечный UIN) Прикрутил к этому примеру ini файлик.


Код: #include <file.au3>
; Проверяем наличие ini файла, если нет создаём.
If Not FileExists("bot.ini") Then
_FileCreate ("bot.ini") ;создаём ini файл
$File = FileOpen ( "bot.ini", 1 )
;и пишем в него всю структуру
FileWrite ( $File, "[account]"&@CRLF&"uin="&@CRLF&"pass="&@CRLF&"[master]"&@CRLF&"uin1=")
FileClose ($File)
EndIf
;читаем из ini файла уин, пароль и уин хозяина
Global $myUser = IniRead ( "bot.ini", "account", "uin", "NotFound")
Global $myPass = IniRead ( "bot.ini", "account", "pass", "NotFound")
Global $targetUser = IniRead ( "bot.ini", "master", "uin1", "NotFound")
Автор: kirmalex
Дата сообщения: 13.04.2009 12:40
Нашел книгу по граф. интерфейсу в Делфи. Если кому надо http://letitbit.net/download/5a573f637667/-----------GUI.djvu.html
Автор: timsky
Дата сообщения: 13.04.2009 13:06

Цитата:
или уже старая UDF или туплю - пример, не заработал

По-любому старая. С тех уже сколько раз в протоколе всякого наковыряли.
Мне кажется, что охотнее всех помогут девелоперы ICQ.dll официальных / альтернативных от Миранды.
К тому же вроде есть Джабер-АСЯ гейты?
А еще интересна возможность прикрутить IRC к Автоиту
Автор: sproxy
Дата сообщения: 13.04.2009 13:36
timsky 14:06 13-04-2009
Цитата:
А еще интересна возможность прикрутить IRC к Автоиту

на офф форуме походу была разработка...


Цитата:
Мне кажется, что охотнее всех помогут девелоперы ICQ.dll официальных / альтернативных от Миранды.

да, думаю стоит, вечером поищу точные контакты..

+ еще неопробован джаберр
Автор: vicbox777
Дата сообщения: 13.04.2009 16:43
Интересный компонент TICQClient описан на сайте http://progs.volkov.spb.su/ticqclient/ Но...опять таки - Delphi!
Автор: ynbIpb
Дата сообщения: 13.04.2009 17:46
Да он выполнен в виде компонента. И афтор его уже не поддерживает.
У меня тут ещё мысль возникла: А что если выхватывать команды из памяти процесса месенджера? И тогда можно юзать свой любимый клиент, а скрипт будет следить за ним и ловить наше сообщение (команду)
А _TocLib более мене сносная UDF , глюки конечно наблюдаются (пропускает сообщения входящие, смысле через раз доходят), но для тренировки самое то. он у меня уже умеет 2 команды выполнять: список процессов и список файлов в папке.
Как я понял TOC это вообще другой протокол и создан специально для девелоперов, они и сервер ему отдельный выделили. Кстати там написано что порт другой: toc.oscar.aol.com:9898, поменял и с ним работает норм.
Автор: timsky
Дата сообщения: 13.04.2009 18:01
Вот здесь неамло полезной инфы:
http://forum.asechka.ru/showthread.php?t=17895
Пофиксенный вроде TICQClient здесь:
http://forum.asechka.ru/showthread.php?t=97186&page=24

Вот еще интересная штучка:
http://www.climm.org/index.shtml.ru

Добавлено:
Судя по ФАКу даже Jabber (XMPP) поддерживает. И версия последняя от 2009-02-22
Автор: sproxy
Дата сообщения: 13.04.2009 18:29
хе ))
про это:
ynbIpb 18:46 13-04-2009
Цитата:
toc.oscar.aol.com:9898

и это:
timsky 19:01 13-04-2009
Цитата:
Судя по ФАКу даже Jabber (XMPP) поддерживает.


писалось выше...

...и всетаки стоит попробовать джабббер, ща высплюсь - займусь ))) а тож хочется что бы все напрямую
и что бы через протокол которым хоть пользуюсь ))
Автор: ynbIpb
Дата сообщения: 13.04.2009 19:18
Народ. откопал в кеше гугла вот такой скриптик: [more=jabberit.au3]

Код: <t_2>#cs ----------------------------------------------------------------------------

AutoIt Version: 3.1.1.0
Author: myName

Script Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------</t_2>

; Script Start - Add your code below here

#include <GUIConstants.au3>
#include <GUICombo.au3>
#include <Misc.au3>
#include <INet.au3>

Opt("GUIOnEventMode", 1)
;Opt("TCPTimeout",5000)

Dim $OptsWin, $optsok, $optscanc, $optsjid, $optspass, $optsrad1, $optsrad2

GUICreate("JabberIt", 500, 555)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$lblcon = GUICtrlCreateLabel("XMPP Console:", 7, 7, 80, 20)
$lblmain = GUICtrlCreateEdit("", 5, 25, 490, 195, BitOR($WS_VSCROLL, $ES_READONLY))
$lblcon = GUICtrlCreateLabel("Chat Console:", 5, 227, 80, 20)
$lblchat = GUICtrlCreateEdit("", 5, 245, 490, 195, BitOR($WS_VSCROLL, $ES_READONLY))
$usercmb = GUICtrlCreateCombo("Select JID...", 7, 445, 250, 20)
;$input1 = GUICtrlCreateInput("abu_rashid@.ibrahim.ms", 5, 445, 150, 20)
$input2 = GUICtrlCreateInput("", 7, 470, 251, 20)
$btnacc = GUICtrlCreateButton("Options", 295, 457, 60, 22)
GUICtrlSetOnEvent(-1, "AccOpts")

GUICtrlCreateGroup ("Translation:", 370, 450, 70, 95)
$nolang = GUICtrlCreateRadio ("None", 375, 465, 60, 20)
$langfr = GUICtrlCreateRadio ("French", 375, 485, 60, 20)
$langes = GUICtrlCreateRadio ("Spanish", 375, 505, 60, 20)
$langit = GUICtrlCreateRadio ("Italian", 375, 525, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
GUICtrlSetState ($nolang, $GUI_CHECKED)

$optsfile = @scriptdir & "\jabberit.ini"
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")
$hello = "<?xml version='1.0' encoding='UTF-8' ?><stream:stream to='" & $server & "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>"
$login1 = "<iq type='get' to='" & $server & "' id='auth1'><query xmlns='jabber:iq:auth'><username>" & $jidname & "</username></query></iq>"
$login2 = "<iq type='set' id='auth2'><query xmlns='jabber:iq:auth'><username>" & $jidname & "</username><password>" & $jidpass & "</password><resource>jabberit</resource></query></iq>"
;$message = "<message to='abu_rashid@bayt.ibrahim.ms' type='normal'><body>Saluton Mondo!</body></message>"

GUISetState(@SW_SHOW)

TCPStartUp()
$socket = TCPConnect(TCPNameToIP($server), 5222 )

If $socket = -1 Then
msgbox(1, "Failed to Connect", "Connection failure occured")
Exit
EndIf


_ProgInit()

While 1
if _IsPressed("0D") And GUICtrlRead($input2) <> "" Then SendText()
Sleep(100)
_JabPoll()
WEnd

Func
_ProgInit()
Select
Case
FileExists($optsfile)
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")

Case RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "JID") <> ""
$jid = RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "JID")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "Pass")

Case Else
AccOpts()
WinWaitClose("Account")
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")
EndSelect
_JabHello($server)
_JabAuth($jidname, $jidpass, "jabberit")
EndFunc

Func
CLOSEClicked()
TCPsend($socket, "</stream:stream>")
TCPCloseSocket($socket)
TCPShutdown()
Exit
EndFunc

Func
AccOpts()
$OptsWin = GUICreate("Account", 265, 130)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseAccOpts")
$optsjid = GUICtrlCreateInput("Enter JID...", 15, 15, 150, 22)
$optspass = GUICtrlCreateInput("Enter Pass...", 15, 45, 150, 22)
$optsok = GUICtrlCreateButton("Ok", 70, 90, 60, 22)
GUIctrlSetOnEvent(-1, "UpdateAccOpts")
$optscanc = GUICtrlCreateButton("Cancel", 140, 90, 60, 22)
GUIctrlSetOnEvent(-1, "CloseAccOpts")
GUICtrlCreateGroup ("Store in:", 180, 10, 70, 60)
$optsrad1 = GUICtrlCreateRadio ("Registry", 185, 25, 60, 20)
$optsrad2 = GUICtrlCreateRadio ("INI File", 185, 45, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
GUICtrlSetState ($optsrad2, $GUI_CHECKED)
GUISetState(@SW_SHOW)
EndFunc

Func
UpdateAccOpts()
IniWrite($optsfile, "Account", "jid", GUICtrlRead($optsjid))
IniWrite($optsfile, "Account", "pass", GUICtrlRead($optspass))
CloseAccOpts()
EndFunc

Func
CloseAccOpts()
GUIDelete($OptsWin)
EndFunc

Func
SendText()
$typed = GUICtrlRead($input2)
GUICtrlSetData($input2, "")
Select
Case
BitAND(GUICtrlRead($nolang), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), $typed)
Case BitAND(GUICtrlRead($langfr), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("fr", $typed))
Case BitAND(GUICtrlRead($langes), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("es", $typed))
Case BitAND(GUICtrlRead($langit), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("it", $typed))
EndSelect
EndFunc
;

Func AddUser($uname)
;Msgbox(1, "test", "Does this " & _GUICtrlComboGetList($usercmb) & " contain " & $uname)
If Not StringInStr(_GUICtrlComboGetList($usercmb), $uname) Then GUICtrlSetData($usercmb, $uname)
EndFunc

Func
_ChatWin($JIDWin)
$chatwin = GUICreate("Chat with: " $JIDWin, 400, 400)
$lblchat = GUICtrlCreateEdit("", 5, 5, 390, 195, BitOR($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL))
EndFunc

;#####-#####-(Future Jabber UDF begins here)-#####-#####

Func _JabHello($JabServ)
$socket = TCPConnect(TCPNameToIP($JabServ), 5222)
If $socket = -1 Then CLOSEClicked()
TCPSend($socket, "<?xml version='1.0' encoding='UTF-8' ?><stream:stream to='" & $JabServ & "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>")
;$recd = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $recd)

EndFunc

Func
_JabAuth($JabUser, $JabPass, $JabRes)
TCPSend($socket, "<iq type='get' to='" & $server & "' id='auth1'><query xmlns='jabber:iq:auth'><username>" & $JabUser & "</username></query></iq>")
;$recd = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $recd)

TCPSend($socket, "<iq type='set' id='auth2'><query xmlns='jabber:iq:auth'><username>" & $JabUser & "</username><password>" & $JabPass & "</password><resource>" & $JabRes & "</resource></query></iq><presence type='available'></presence>")
;$rece = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $rece)

EndFunc

Func
_JabMsg($Target, $Message)
TCPSend($socket, "<message to='" & $Target & "' type='normal'><body>" & $Message & "</body></message>")
EndFunc

Func
_JabPoll()
$recv = TCPRecv($socket, 2048)
if $recv <> "" then
GUICtrlSetData($lblmain, $recv, "-")
if StringInStr($recv, "<message type=") And StringInStr($recv, "<body>") Then
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, ">") + 2)
$body = StringInStr($recv, "<body>") + 5
$body2 = StringLen($recv) - StringInStr($recv, "</body>") + 1
$messbod = StringTrimRight(StringTrimLeft($recv, $body), $body2)
GUICtrlSetData($lblchat, "<" & $from & "> " & $messbod & @CRLF , "-")
AddUser($from)
AddUser($from)
EndIf
EndIf
if
StringInStr($recv, "<presence from=") And StringInStr($recv, "<priority>") Then
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, " ") + 2)
$recv = ""
EndIf
EndFunc


;+++++Extras+++++;

Func _Translate($lang, $transtext)
$getsrc = _INetGetSource('http://google.ca/translate_t?text=' & $transtext & '&langpair=en%7C' & $lang & '&hl=en&ie=UTF8')
$translated1 = stringTrimleft($getsrc, StringInStr($getsrc, "id=result_box dir=ltr>") + 21)
$translated2 = StringTrimRight($translated1, StringLen($translated1) - StringInStr($translated1, "</div></td></tr><tr><td id=submitcell>") + 2)
Return($translated2)
EndFunc
Автор: sproxy
Дата сообщения: 13.04.2009 20:31
с первого запуска (после прописания нужных UDF) не заработала. но.... )))
самое главное - брать XMPP и строчиьт udf под джаббер ))
Автор: timsky
Дата сообщения: 13.04.2009 22:58
Вот еще IRC бот:
http://code.google.com/p/greenbot/downloads/list
Мельком глянул функции _IRC* - неужели так все просто?
Автор: sproxy
Дата сообщения: 13.04.2009 23:24
timsky 23:58 13-04-2009
Цитата:
Мельком глянул функции _IRC* - неужели так все просто?

вот и славно )) пора начинать писать.....
Автор: vicbox777
Дата сообщения: 14.04.2009 01:02
ynbIpb 19:18 13-04-2009
Цитата:
Народ. откопал в кеше гугла вот такой скриптик: jabberit.au3 [?], может чё толковое?

Только что опробовал, Скрипт может и отправлять и получать сообщения, это уже дело! Только там нужно инклуды поправить, чтоб остались только эти:

Код: #include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <INet.au3>
Автор: ynbIpb
Дата сообщения: 14.04.2009 07:26
Следует учитывать что он был написан в 3.1.1.0 версии, а за это время некоторые команды изменились.
Погодите с этим ковыряться, я там ещё нашёл вторую весрию: [more=jabberit2.au3]

Код: #cs ----------------------------------------------------------------------------

AutoIt Version: 3.1.1.0
Author: myName

Script Function:
Template AutoIt script.

#ce
----------------------------------------------------------------------------

; Script Start - Add your code below here


#include <GUIConstants.au3>
#include <GUICombo.au3>
#include <Misc.au3>
#include <INet.au3>

Opt("GUIOnEventMode", 1)
;Opt("TCPTimeout",5000)

Dim $OptsWin, $optsok, $optscanc, $optsjid, $optspass, $optsrad1, $optsrad2

GUICreate("JabberIt", 500, 555)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$lblcon = GUICtrlCreateLabel("XMPP Console:", 7, 7, 80, 20)
$lblmain = GUICtrlCreateEdit("", 5, 25, 490, 195, BitOR($WS_VSCROLL, $ES_READONLY))
$lblcon = GUICtrlCreateLabel("Chat Console:", 5, 227, 80, 20)
$lblchat = GUICtrlCreateEdit("", 5, 245, 490, 195, BitOR($WS_VSCROLL, $ES_READONLY))
$usercmb = GUICtrlCreateCombo("Select JID...", 7, 445, 250, 20)
;$input1 = GUICtrlCreateInput("abu_rashid@.ibrahim.ms", 5, 445, 150, 20)
$input2 = GUICtrlCreateInput("", 7, 470, 251, 20)
$btnacc = GUICtrlCreateButton("Options", 295, 457, 60, 22)
GUICtrlSetOnEvent(-1, "AccOpts")
$btnacc = GUICtrlCreateButton("Subscribe", 295, 487, 60, 22)
GUICtrlSetOnEvent(-1, "_Subscribe")

GUICtrlCreateGroup ("Translation:", 370, 450, 70, 95)
$nolang = GUICtrlCreateRadio ("None", 375, 465, 60, 20)
$langfr = GUICtrlCreateRadio ("French", 375, 485, 60, 20)
$langes = GUICtrlCreateRadio ("Spanish", 375, 505, 60, 20)
$langit = GUICtrlCreateRadio ("Italian", 375, 525, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
GUICtrlSetState ($nolang, $GUI_CHECKED)

$optsfile = @scriptdir & "\jabberit.ini"
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")
$hello = "<?xml version='1.0' encoding='UTF-8' ?><stream:stream to='" & $server & "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>"
$login1 = "<iq type='get' to='" & $server & "' id='auth1'><query xmlns='jabber:iq:auth'><username>" & $jidname & "</username></query></iq>"
$login2 = "<iq type='set' id='auth2'><query xmlns='jabber:iq:auth'><username>" & $jidname & "</username><password>" & $jidpass & "</password><resource>jabberit</resource></query></iq>"
;$message = "<message to='abu_rashid@bayt.ibrahim.ms' type='normal'><body>Saluton Mondo!</body></message>"

GUISetState(@SW_SHOW)

TCPStartUp()
$socket = TCPConnect(TCPNameToIP($server), 5222 )

If $socket = -1 Then
msgbox(1, "Failed to Connect", "Connection failure occured")
Exit
EndIf


_ProgInit()

While 1
if _IsPressed("0D") And GUICtrlRead($input2) <> "" Then SendText()
Sleep(100)
_JabPoll()
WEnd

Func
_ProgInit()
Select
Case
FileExists($optsfile)
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")

Case RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "JID") <> ""
$jid = RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "JID")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = RegRead("HKEY_LOCAL_MACHINE\Software\JabberIt", "Pass")

Case Else
AccOpts()
WinWaitClose("Account")
$jid = IniRead($optsfile, "Account", "jid", "test@jabber.org")
$server = StringTrimLeft($jid, StringInStr($jid, "@"))
$jidname = StringTrimRight($jid, StringLen($jid) - StringInStr($jid, "@") + 1)
$jidpass = IniRead(@scriptdir & "\jabberit.ini", "Account", "pass", "")
EndSelect
_JabHello($server)
_JabAuth($jidname, $jidpass, "jabberit")
EndFunc

Func
CLOSEClicked()
TCPsend($socket, "</stream:stream>")
TCPCloseSocket($socket)
TCPShutdown()
Exit
EndFunc

Func
AccOpts()
$OptsWin = GUICreate("Account", 265, 130)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseAccOpts")
$optsjid = GUICtrlCreateInput("Enter JID...", 15, 15, 150, 22)
$optspass = GUICtrlCreateInput("Enter Pass...", 15, 45, 150, 22)
$optsok = GUICtrlCreateButton("Ok", 70, 90, 60, 22)
GUIctrlSetOnEvent(-1, "UpdateAccOpts")
$optscanc = GUICtrlCreateButton("Cancel", 140, 90, 60, 22)
GUIctrlSetOnEvent(-1, "CloseAccOpts")
GUICtrlCreateGroup ("Store in:", 180, 10, 70, 60)
$optsrad1 = GUICtrlCreateRadio ("Registry", 185, 25, 60, 20)
$optsrad2 = GUICtrlCreateRadio ("INI File", 185, 45, 60, 20)
GUICtrlCreateGroup ("",-99,-99,1,1)
GUICtrlSetState ($optsrad2, $GUI_CHECKED)
GUISetState(@SW_SHOW)
EndFunc

Func
UpdateAccOpts()
IniWrite($optsfile, "Account", "jid", GUICtrlRead($optsjid))
IniWrite($optsfile, "Account", "pass", GUICtrlRead($optspass))
CloseAccOpts()
EndFunc

Func
CloseAccOpts()
GUIDelete($OptsWin)
EndFunc

Func
SendText()
$typed = GUICtrlRead($input2)
GUICtrlSetData($input2, "")
Select
Case
BitAND(GUICtrlRead($nolang), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), $typed)
Case BitAND(GUICtrlRead($langfr), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("fr", $typed))
Case BitAND(GUICtrlRead($langes), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("es", $typed))
Case BitAND(GUICtrlRead($langit), $GUI_CHECKED) = $GUI_CHECKED
_JabMsg(GUICtrlRead($usercmb), _Translate("it", $typed))
EndSelect
EndFunc
;

Func AddUser($uname)
If Not StringInStr(_GUICtrlComboGetList($usercmb), $uname) Then GUICtrlSetData($usercmb, $uname)
EndFunc

;Func _ChatWin($JIDWin)
; $chatwin = GUICreate("Chat with: " $JIDWin, 400, 400)
; $lblchat = GUICtrlCreateEdit("", 5, 5, 390, 195, BitOR($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL))
;EndFunc

;#####-#####-(Future Jabber UDF begins here)-#####-#####


Func _JabHello($JabServ)
$socket = TCPConnect(TCPNameToIP($JabServ), 5222)
If $socket = -1 Then CLOSEClicked()
TCPSend($socket, "<?xml version='1.0' encoding='UTF-8' ?><stream:stream to='" & $JabServ & "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>")
;$recd = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $recd)

EndFunc

Func
_JabAuth($JabUser, $JabPass, $JabRes)
TCPSend($socket, "<iq type='get' to='" & $server & "' id='auth1'><query xmlns='jabber:iq:auth'><username>" & $JabUser & "</username></query></iq>")
;$recd = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $recd)

TCPSend($socket, "<iq type='set' id='auth2'><query xmlns='jabber:iq:auth'><username>" & $JabUser & "</username><password>" & $JabPass & "</password><resource>" & $JabRes & "</resource></query></iq><presence type='available'></presence>")
;$rece = TCPRecv($socket, 2048)
;GUICtrlSetData($lblmain, guictrlread($lblmain) & $rece)

EndFunc

Func
_JabMsg($Target, $Message)
TCPSend($socket, "<message to='" & $Target & "' type='normal'><body>" & $Message & "</body></message>")
EndFunc

Func
_JabPoll()
$recv = TCPRecv($socket, 2048)
if $recv <> "" then
GUICtrlSetData($lblmain, $recv, "-") ;Write raw msg to XMPP console
If StringInStr($recv, "<message ") And StringInStr($recv, "<body>") Then ;Message Event
_JabHandleMSG(StringTrimLeft($recv, StringInStr($recv, "<message ")))
EndIf
If
StringInStr($recv, "<presence ") Then ;Presence Event
_JabHandlePRES(StringTrimLeft($recv, StringInStr($recv, "<presence from=")))
EndIf
;GUICtrlSetData($lblmain, @CRLF & "No handleable XMPP events detected" & @CRLF, "-")
EndIf
EndFunc

Func
_JabHandleMSG($recv)
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, """") + 1)
$body = StringInStr($recv, "<body>") + 5
$body2 = StringLen($recv) - StringInStr($recv, "</body>") + 1
$messbod = StringTrimRight(StringTrimLeft($recv, $body), $body2)
GUICtrlSetData($lblchat, "<" & $from & "> " & $messbod & @CRLF , "-") ; Write sanitised msg to chat console
EndFunc

Func
_JabHandlePRES($recv)
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, """") + 1)
If StringInStr($recv, "type=""subscribe") Then
TCPSend($socket, '<presence to="' & $from & '" type="subscribed" from="' & $jidname & '"/>')
EndIf
AddUser($from)
EndFunc

Func
_Subscribe()
$uname = GUICtrlRead($usercmb)
If StringInStr($uname, "/") Then
$uname = StringTrimRight($uname, StringLen($uname) - StringInStr($uname, "/") + 1)
EndIf
TCPSend($socket, '<presence to="' & $uname & '" type="subscribe" from="' & $jidname & '"/>')
MsgBox(1, "Subscription Request", "You have sent a subscription request to: " & $uname)
EndFunc

Func
_JabPoll2()
$recv = TCPRecv($socket, 2048)
if $recv <> "" then
GUICtrlSetData($lblmain, $recv, "-") ;Write raw msg to XMPP console
if StringInStr($recv, "<message type=") And StringInStr($recv, "<body>") Then ;We have actually received a message.
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, ">") + 2)
$body = StringInStr($recv, "<body>") + 5
$body2 = StringLen($recv) - StringInStr($recv, "</body>") + 1
$messbod = StringTrimRight(StringTrimLeft($recv, $body), $body2)
GUICtrlSetData($lblchat, "<" & $from & "> " & $messbod & @CRLF , "-") ; Write sanitised msg to chat console

EndIf
if
StringInStr($recv, "<presence from=") And StringInStr($recv, "<priority>") Then
$from1 = StringTrimLeft($recv, StringInStr($recv, "from=") + 5)
$from = StringTrimRight($from1, StringLen($from1) - StringInStr($from1, " ") + 2)
AddUser($from) ; Add user to username/contacts combo
EndIf
$recv = ""
EndIf
EndFunc


;+++++Extras+++++;

Func _Translate($lang, $transtext)
$getsrc = _INetGetSource('http://google.ca/translate_t?text=' & $transtext & '&langpair=en%7C' & $lang & '&hl=en&ie=UTF8')
$translated1 = stringTrimleft($getsrc, StringInStr($getsrc, "id=result_box dir=ltr>") + 21)
$translated2 = StringTrimRight($translated1, StringLen($translated1) - StringInStr($translated1, "</div></td></tr><tr><td id=submitcell>") + 2)
Return($translated2)
EndFunc
Автор: vicbox777
Дата сообщения: 14.04.2009 12:05

Цитата:
я там ещё нашёл вторую весрию: jabberit2.au3

И эта работает, только тоже нужно инклуды заменить на:
Код: #include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <INet.au3>
#include <GUIComboBox.au3>
Автор: ynbIpb
Дата сообщения: 14.04.2009 17:43
чего-то хреново работает этот исламский жабер клиент
В онлайне его не видно, русское собщение посылаю ему в логе xml error видно.
Хотя там же UTF-8 не один ли жрен ему?
Может сказывается компиляция в 3.3 и какието мелкие нестыковки в функциях по сравнению с 3.1
----------
вот нарыл Немцы чего-то мутят с XMPP: Ссылка
Автор: sproxy
Дата сообщения: 15.04.2009 06:27
Пример XML консоли для тестирования XMPP функций:

[more]

Код: #region: - Options
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#endregion

#region: - Include

;Defined Functions:
#include <Array.au3>
;~ #include <ComboConstants.au3>
;~ #include <Constants.au3>
;~ #include <Inet.au3>

#Include <Misc.au3>
#include <GuiEdit.au3>
;~ #include <GuiButton.au3>
#include <GUIComboBox.au3>
#include <GUIConstantsEx.au3>
;~ #Include <GuiTab.au3>
;~ #Include <GuiStatusBar.au3>
;~ #include <StaticConstants.au3>
;~ #include <string.au3>

#Include <Timers.au3>
;~ #include <WinAPI.au3>
#include <WindowsConstants.au3>
#endregion

#region: - Program Global, AutoIt Win Title, One instance

Global $sProName = 'XML console for testing Jabber XMPP functions'
Global $sProVerNo = '0.1'
Global $sProVer = 'v' & $sProVerNo
Global $sProNameVer = $sProName & ' ' & $sProVer
Global $sProIDText = $sProNameVer & ' [ID] ' & $sProNameVer
Global $sProGUID = _Get_GUID()

Global $iProOneInstance = 0
Global $iProSleepTime = 10

AutoItWinSetTitle(@AutoItPID & ' ' & $sProIDText)
Global $hAutoItWin = WinGetHandle(@AutoItPID & ' ' & $sProIDText)

If $iProOneInstance Then
If NOT
_Singleton($sProIDText, 1) Then
Opt('WinTitleMatchMode', 2)
ControlSetText('[TITLE:' & $sProIDText & '; CLASS:AutoIt v3;]', '', '[CLASS:Edit; INSTANCE:1]', 'Already run')
_Pro_Exit()
EndIf
EndIf

Func
_Get_GUID()
Local $oTypeLib = ObjCreate('Scriptlet.TypeLib')
If IsObj($oTypeLib) Then Return $oTypeLib.GUID
Return SetError(1, 0, 0)
EndFunc

Global
$i, $hToolTipTimerID
Global $hConnect, $sConnectedJid, $iId
#endregion

#region: - Ini Global, Functions

Global $sIniFilePath = StringRegExpReplace(@ScriptFullPath, '(.+\.).*', '\1') & 'ini'

Global $aJidList[1][2]
$aJidList[0][0] = 0
Local $aJidListTemp, $iJidNo
$aJidListTemp
= IniReadSection($sIniFilePath, 'Jid List')
If IsArray($aJidListTemp) Then
For
$i=1 To $aJidListTemp[0][0]
If StringInStr($aJidListTemp[$i][0], 'login') Then
$iJidNo = StringReplace($aJidListTemp[$i][0], 'login', '')
$aJidListTemp[$i][1] = StringReplace(StringLower($aJidListTemp[$i][1]), '"', '')
If StringInStr($aJidList[0][1], '|' & $aJidListTemp[$i][1] & '|') Then ContinueLoop
If StringIsDigit($iJidNo) Then
$aJidList[0][1] &= '|' & $aJidListTemp[$i][1] & '|'
$aJidList[0][0] += 1
ReDim $aJidList[$aJidList[0][0]+1][2]
$aJidList[$aJidList[0][0]][0] = $aJidListTemp[$i][1]
$aJidList[$aJidList[0][0]][1] = IniRead($sIniFilePath, 'Jid List', 'pass' & $iJidNo, '')
EndIf
EndIf
Next
EndIf
$aJidList[0][1] = StringReplace($aJidList[0][1], '||', '|')
_JidList_SaveToIni()
#endregion

#region: - Main Win Global, Functions
;~ Handle
Global $hMainWin

;~ Title, Width, Height, X, Y, Style, ExStyle
Global $sMainWin_Title = $sProNameVer
Global $iMainWin_Width = 750
Global $iMainWin_Height = 530
Global $iMainWin_X = -1
Global $iMainWin_Y = -1
Global $iMainWin_Style = $WS_OVERLAPPEDWINDOW
Global $iMainWin_ExStyle = -1

;~ GUI Ctrl
Global $hMainWin_XML_Console, $hMainWin_Messages
Global $hMainWin_Message_Input, $hMainWin_JidList
Global $hMainWin_JidSettings, $hMainWin_JidSettings_Menu

Func _MainWin_Create()
$hMainWin = GUICreate($sMainWin_Title, $iMainWin_Width, $iMainWin_Height, $iMainWin_X, $iMainWin_Y, $iMainWin_Style, $iMainWin_ExStyle)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')

GUICtrlCreateLabel('XML-Console:', 11, 10, 100, 18)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$hMainWin_XML_Console = GUICtrlCreateEdit('', 10, 25, $iMainWin_Width-20, 200, BitOR($ES_READONLY, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetResizing(-1, 2+4+32+512)

GUICtrlCreateLabel('Messages:', 11, 10+200+19, 100, 18)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$hMainWin_Messages = GUICtrlCreateEdit('', 10, 25+200+20, $iMainWin_Width-20, 200, BitOR($ES_READONLY, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetResizing(-1, 2+4+32+512)

$hMainWin_Message_Input = GUICtrlCreateEdit('', 10, 450, $iMainWin_Width-95, 40, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL))
GUICtrlSetResizing(-1, 2+4+32+512)
GUICtrlCreateButton('Send', $iMainWin_Width-80, 450, 70, 40)
GUICtrlSetResizing(-1, 4+32+768)

$hMainWin_JidList = GUICtrlCreateCombo('No Jid', 10, 495, 200, 20, $CBS_DROPDOWNLIST)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
_JidList_Update()

$hMainWin_JidSettings = GUICtrlCreateButton('Settings', 10+204, 494, 70, 23)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlSetOnEvent(-1, '_MainWin_JidSettings')

$hMainWin_JidSettings_Menu = GUICtrlCreateContextMenu($hMainWin_JidSettings)
GUICtrlCreateMenuItem('Add Jid', $hMainWin_JidSettings_Menu)
GUICtrlSetOnEvent(-1, '_AddJidWin_Create')
GUICtrlCreateMenuItem('Del Jid', $hMainWin_JidSettings_Menu)
GUICtrlSetOnEvent(-1, '_JidList_Del')
GUICtrlCreateMenuItem('', $hMainWin_JidSettings_Menu)
GUICtrlCreateMenuItem('Show all Jid', $hMainWin_JidSettings_Menu)
GUICtrlSetOnEvent(-1, '_MainWin_ShowAllJid')
GUICtrlCreateMenuItem('Open ini file', $hMainWin_JidSettings_Menu)
GUICtrlSetOnEvent(-1, '_MainWin_OpenIniFile')

GUICtrlCreateButton('Connect', 10+205+72, 494, 70, 23)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlSetOnEvent(-1, '_MainWin_Connect')

GUICtrlCreateButton('Disconnect', 10+205+72+73, 494, 70, 23)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlSetOnEvent(-1, '_MainWin_Disconnect')

GUICtrlCreateButton('Exit', $iMainWin_Width-80, 494, 70, 23)
GUICtrlSetResizing(-1, 4+32+768)
GUICtrlSetOnEvent(-1, '_Pro_Exit')

GUISetState(@SW_SHOW, $hMainWin)
EndFunc
Func _MainWin_JidSettings()
_ShowMenu($hMainWin, $hMainWin_JidSettings, $hMainWin_JidSettings_Menu)
EndFunc
Func _MainWin_ShowAllJid()
_ArrayDisplay($aJidList, 'Jid List')
EndFunc
Func _MainWin_OpenIniFile()
Run('notepad.exe ' & $sIniFilePath)
;~ ShellExecute($sIniFilePath)
EndFunc

Func _MainWin_Connect($sJid_P='')
Local $sJid
If $sConnectedJid Then _MainWin_Disconnect()
If NOT IsDeclared('sJid_P') Then
$sJid = GUICtrlRead($hMainWin_JidList)
Else
$sJid = $sJid_P
If $sJid = '' Then GUICtrlRead($hMainWin_JidList)
EndIf

Local $sLogin = StringRegExpReplace($sJid, '(.+)@.+', '\1')
;~ Local $sServer = StringRegExpReplace($sJid, '.+@(.+)', '\1')
Local $sServer = 'jabber.org'; WARRNING !!!!!!!!!!

$hConnect = _J_Connect_Server($sServer, 5222)
If $hConnect == -1 Then
Return
Else
$sConnectedJid = $sJid
EndIf
AdlibEnable('_MainWin_Listen', 100)
_J_Auth($hConnect, $sServer, $sLogin, 'ru', 'test')
EndFunc

Func _MainWin_Listen()
_J_Listen($hConnect)
EndFunc

Func _MainWin_Disconnect()
_J_Disconnect_Server($hConnect)
AdlibDisable()
EndFunc
#endregion

#region: - Add Jid Win Global, Functions
;~ Handle
Global $hAddJidWin

;~ Title, Width, Height, X, Y, Style, ExStyle
Global $sAddJidWin_Title = 'Add Jid'
Global $iAddJidWin_Width = 240
Global $iAddJidWin_Height = 160
Global $iAddJidWin_X = -1
Global $iAddJidWin_Y = -1
Global $iAddJidWin_Style = BitOR($WS_BORDER, $WS_POPUP)
Global $iAddJidWin_ExStyle = -1

;~ GUI Ctrl
Global $hAddJidWin_Jid, $hAddJidWin_Pass

Func _AddJidWin_Create()
$hAddJidWin = GUICreate($sAddJidWin_Title, $iAddJidWin_Width, $iAddJidWin_Height, $iAddJidWin_X, $iAddJidWin_Y, $iAddJidWin_Style, $iAddJidWin_ExStyle, $hMainWin)
GUISetOnEvent($GUI_EVENT_CLOSE, '_AddJidWin_Close')

GUICtrlCreateGroup('Add new Jid:', 5, 5, $iAddJidWin_Width-10, $iAddJidWin_Height-10)
GUICtrlSetFont(-1, 9.5, 700)

GUICtrlCreateLabel('Login:', 15, 10+15, 70, 18)
$hAddJidWin_Jid = GUICtrlCreateInput('', 15, 25+15, $iAddJidWin_Width-30, 22)

GUICtrlCreateLabel('Password:', 15, 10+45+15, 70, 18)
$hAddJidWin_Pass = GUICtrlCreateInput('', 15, 10+45+15+15, $iAddJidWin_Width-30, 22)

GUICtrlCreateButton('OK', $iAddJidWin_Width-15-50*2-2, $iAddJidWin_Height-40, 50, 25)
GUICtrlSetOnEvent(-1, '_AddJidWin_AddJid')

GUICtrlCreateButton('Cancel', $iAddJidWin_Width-15-50, $iAddJidWin_Height-40, 50, 25)
GUICtrlSetOnEvent(-1, '_AddJidWin_Close')

GUISetState(@SW_DISABLE, $hMainWin)
GUISetState(@SW_SHOW, $hAddJidWin)
EndFunc
Func _AddJidWin_Close()
_ToolTip_Close('', '', '', '')
GUISetState(@SW_ENABLE, $hMainWin)
GUIDelete($hAddJidWin)
EndFunc
Func _AddJidWin_AddJid()
Local $aAddJidWin_Pos = WinGetPos($hAddJidWin)

Local $sJid = StringStripWS(GUICtrlRead($hAddJidWin_Jid), 8)
If $sJid == '' Then
GUICtrlSetData($hAddJidWin_Jid, '')
GUICtrlSetState($hAddJidWin_Jid, $GUI_FOCUS)
_ToolTip(3, 'Enter Login', $aAddJidWin_Pos[0]+20, $aAddJidWin_Pos[1]+60, '', Default, 1)
Return
EndIf

Local $sPass = StringStripWS(GUICtrlRead($hAddJidWin_Pass), 8)
If $sPass == '' Then
GUICtrlSetData($hAddJidWin_Pass, '')
GUICtrlSetState($hAddJidWin_Pass, $GUI_FOCUS)
_ToolTip(3, 'Enter Password', $aAddJidWin_Pos[0]+20, $aAddJidWin_Pos[1]+60+45, '', Default, 1)
Return
EndIf

_JidList_Add($sJid, $sPass)
_AddJidWin_Close()
EndFunc
#endregion

#region: - Jid List Functions
Func _JidList_Update($sJidList_Selected_P='')
Local $sJidList_Selected
If NOT IsDeclared('sJidList_Selected_P') Then
$sJidList_Selected = GUICtrlRead($hMainWin_JidList)
Else
$sJidList_Selected = $sJidList_Selected_P
If $sJidList_Selected = '' Then GUICtrlRead($hMainWin_JidList)
EndIf
GUICtrlSetData($hMainWin_JidList, '')
If NOT StringInStr($aJidList[0][1], '|' & $sJidList_Selected & '|') AND $aJidList[0][0] > 0 Then $sJidList_Selected = $aJidList[1][0]
If $aJidList[0][0] == 0 Then
GUICtrlSetData($hMainWin_JidList, 'No Jid', 'No Jid')
Else
GUICtrlSetData($hMainWin_JidList, $aJidList[0][1], $sJidList_Selected)
EndIf
EndFunc
Func _JidList_Add($sJid, $sPass)
$aJidList[0][1] &= '|' & $sJid & '|'
$aJidList[0][0] += 1
$aJidList[0][1] = StringReplace($aJidList[0][1], '||', '|')
ReDim $aJidList[$aJidList[0][0]+1][2]
$aJidList[$aJidList[0][0]][0] = $sJid
$aJidList[$aJidList[0][0]][1] = $sPass
IniWrite($sIniFilePath, 'Jid List', 'login' & $aJidList[0][0], '"' & $sJid & '"')
IniWrite($sIniFilePath, 'Jid List', 'pass' & $aJidList[0][0], $sPass)
_JidList_Update($sJid)
EndFunc
Func _JidList_Del()
Local $sJid = GUICtrlRead($hMainWin_JidList)
$aJidList[0][1] = StringReplace($aJidList[0][1], '|' & $sJid & '|', '|')
For $i=1 To $aJidList[0][0]
If $aJidList[$i][0] == $sJid Then
$aJidList[0][0] -= 1
_ArrayDelete($aJidList, $i)
ExitLoop
EndIf
Next
_JidList_SaveToIni()
GUICtrlSetData($hMainWin_JidList, '')
_JidList_Update()
EndFunc
Func _JidList_SaveToIni()
IniWriteSection($sIniFilePath, 'Jid List', '')
For $i=1 To $aJidList[0][0]
IniWrite($sIniFilePath, 'Jid List', 'login' & $i, '"' & $aJidList[$i][0] & '"')
IniWrite($sIniFilePath, 'Jid List', 'pass' & $i, $aJidList[$i][1])
Next
EndFunc
#endregion

#region: - After creating all GUI
_MainWin_Create()
#endregion

#region: - Sleep, Exit, OnAutoItExit
While 1
Sleep($iProSleepTime)
WEnd

Func _Pro_Exit()
Exit
EndFunc
#endregion

#region: - ToolTip
Func _ToolTip($iTimeShow, $sText, $iX=Default, $iY=Default, $sTitle=Default, $iIcon=Default, $iOptions=Default)
If $hToolTipTimerID <> '' Then _Timer_KillTimer($hAutoItWin, $hToolTipTimerID)
ToolTip($sText, $iX, $iY, $sTitle, $iIcon, $iOptions)
$hToolTipTimerID = _Timer_SetTimer($hAutoItWin, $iTimeShow*1000, '_ToolTip_Close')
EndFunc
Func _ToolTip_Close($hWnd, $Msg, $iIDTimer, $dwTime)
_Timer_KillTimer($hAutoItWin, $hToolTipTimerID)
$hToolTipTimerID = ''
ToolTip('')
EndFunc
#endregion

#region: - Context Menu
; Show a menu in a given GUI window which belongs to a given GUI ctrl
Func _ShowMenu($hWnd, $CtrlID, $nContextID)
Local $arPos, $x, $y
Local $hMenu = GUICtrlGetHandle($nContextID)

$arPos = ControlGetPos($hWnd, "", $CtrlID)

$x = $arPos[0]
$y = $arPos[1] + $arPos[3]

_ClientToScreen($hWnd, $x, $y)
_TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc ;==>ShowMenu

; Convert the client (GUI) coordinates to screen (desktop) coordinates
Func _ClientToScreen($hWnd, ByRef $x, ByRef $y)
Local $stPoint = DllStructCreate("int;int")

DllStructSetData($stPoint, 1, $x)
DllStructSetData($stPoint, 2, $y)

DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

$x = DllStructGetData($stPoint, 1)
$y = DllStructGetData($stPoint, 2)
; release Struct not really needed as it is a local
$stPoint = 0
EndFunc ;==>ClientToScreen

; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd)
Func _TrackPopupMenu($hWnd, $hMenu, $x, $y)
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc ;==>TrackPopupMenu
#endregion
;

; Next only XMPP functions, UDF type

;

Func _J_Listen($hSocket)
Local $sResult = TCPRecv($hSocket, 2048)
if $sResult <> '' then
$sResult = StringReplace($sResult, '><', '>' & @CRLF & '<'); debug
$sResult = 'Server response: ' & @CRLF & $sResult; debug
_GUICtrlEdit_InsertText($hMainWin_XML_Console, @CRLF & @CRLF & $sResult, _GUICtrlEdit_GetTextLen($hMainWin_XML_Console)); debug
EndIf
EndFunc

Func _J_Connect_Server($sServer, $iPort)
Local $sMsg = 'Connecting to server: ' & $sServer & ', port: ' & $iPort & ', please wait...'; debug
_GUICtrlEdit_InsertText($hMainWin_XML_Console, @CRLF & $sMsg, _GUICtrlEdit_GetTextLen($hMainWin_XML_Console)); debug

TCPStartUp()
Local $iResult = TCPConnect(TCPNameToIP($sServer), $iPort); -1 if error

$sMsg = 'TCP Connect: ' & $iResult & ', server: ' & $sServer & ', port: ' & $iPort; debug
_GUICtrlEdit_InsertText($hMainWin_XML_Console, @CRLF & $sMsg, _GUICtrlEdit_GetTextLen($hMainWin_XML_Console)); debug

Return $iResult
EndFunc

Func _J_Disconnect_Server($hSocket)
Local $iResult = TCPCloseSocket($hSocket)

Local $sMsg = 'TCP Disconnect: ' & $iResult; debug

_GUICtrlEdit_InsertText($hMainWin_XML_Console, @CRLF & @CRLF & $sMsg, _GUICtrlEdit_GetTextLen($hMainWin_XML_Console)); debug
TCPShutDown()
Return $iResult
EndFunc

Func _J_Auth($hSocket, $sServer, $sLogin, $slang, $sId='test')
$iId += 1
Local $sMsg = _
'<stream:stream to="' & $sServer & '" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" xml:lang="' & $slang & '" />' & @CRLF & _
'<iq type="get" id="' & $sId & '_' & $iId & '">' & @CRLF & _
'<query xmlns="jabber:iq:auth">' & @CRLF & _
'<username>"' & $sLogin & '"</username>' & @CRLF & _
'</query>' & @CRLF & _
'</iq>'; @CRLF - debug

_GUICtrlEdit_InsertText($hMainWin_XML_Console, @CRLF & @CRLF & $sMsg, _GUICtrlEdit_GetTextLen($hMainWin_XML_Console)); debug
$sMsg = StringReplace($sMsg, @CRLF, ''); debug

TCPSend($hSocket, $sMsg)
EndFunc

Страницы: 12345

Предыдущая тема: HEX редактирование LINUX программ


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.