[..] Problème Protocole IRC avec autoIT
Posté : sam. 12 mars 2011 18:35
par Fish
Salut tout le monde!
Alors j'ai besoin d'aide car j'ai fait avec un ami un programme pour parler (chater) avec IRC. Le problème c'est que la liste des membres et la possibilité de voir les messages des autres est assez anarchique. On voit les autres membres déjà connectés quand le programme le décide!
Merci de m'aider.
Voici le code :
Alors j'ai besoin d'aide car j'ai fait avec un ami un programme pour parler (chater) avec IRC. Le problème c'est que la liste des membres et la possibilité de voir les messages des autres est assez anarchique. On voit les autres membres déjà connectés quand le programme le décide!
Merci de m'aider.

Voici le code :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <IE.au3>
Global $Form1 = GUICreate("Chat programMax by Fish-Panai & Djrix", 642, 458, 269, 139)
Global $List1 = GUICtrlCreateList("", 8, 8, 473, 370)
Global $Input1 = GUICtrlCreateInput("", 8, 384, 473, 21)
Global $Label2 = GUICtrlCreateLabel("Membres connectés :", 488, 8, 106, 17)
Global $List2 = GUICtrlCreateList("", 488, 32, 145, 344)
Global $Button1 = GUICtrlCreateButton("Envoyer", 488, 384, 147, 25, $WS_GROUP)
Global $Button2 = GUICtrlCreateButton("About", 8, 416, 115, 33, $WS_GROUP)
Global $Button3 = GUICtrlCreateButton("Aller sur ProgramMax", 128, 416, 115, 33, $WS_GROUP)
Global $Button4 = GUICtrlCreateButton("Commandes", 248, 416, 123, 33, $WS_GROUP)
Global $Button5 = GUICtrlCreateButton("Se déconnecter", 376, 416, 107, 33, $WS_GROUP)
Global $Button6 = GUICtrlCreateButton("Changer le pseudo", 488, 416, 147, 33, $WS_GROUP)
GUISetState(@SW_HIDE)
Global $dll = DllOpen("user32.dll")
Global $serveur = "irc.epiknet.org"
Global $port = 6667 ;6667
Global $channel = "#ProgramMax"
Global $touche = "0D"
Global $compteur = 0
Global $guiName = "Chat ProgramMax by Fish-Panai"
$pseudo = InputBox ("Chat ProgramMax", "Choisisez un pseudo :")
GUISetState (@SW_SHOW)
Global $masock
TCPStartup()
$masock = TCPConnect(TCPNameToIP($serveur), $port)
TCPSend($masock, "NICK " & $pseudo & @CRLF)
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF)
While 1
If WinActive($form1) Then $guiName = "Chat ProgramMax by Fish-Panai & Djrix"
WinSetTitle($Form1, "", $guiName)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
If GUICtrlRead($input1) = "/cls" then
_GUICtrlListBox_ResetContent($list1)
$compteur = 0
GUICtrlSetData($input1, "")
EndIf
If GUICtrlRead($input1) <> "" then
$compteur = $compteur + 1
If $compteur >= 29 Then _GUICtrlListBox_DeleteString($List1,0)
TCPSend($masock, "PRIVMSG " & $channel & " :" & GUICTrlRead($Input1) & @CRLF)
_GUICtrlListBox_AddString($List1,"["&@HOUR&":"&@MIN&":"&@SEC&"] <" &$pseudo & "> " & GUICTRLRead($input1))
GUiCtrlsEtData($Input1, "")
EndIf
Case $Button2
MsgBox (0,"About","Ce programme de chat a été créé par xX-Fish-Panai-Xx"&@CRLF&"Et Djrix. Il est concu pour prograMmax.")
Case $Button3
_IECreate("http://www.programmax.xooit.fr")
Case $Button4
MsgBox (0,"Liste des commandes","/cls : Supprime tout les messages du chat.")
Case $Button5
Exit
Case $Button6
$pseudo = InputBox ("Chat ProgramMax", "Choisisez un pseudo :")
TCPSend($masock, "NICK " & $pseudo & @CRLF)
Case Else
If _IsPressed ($touche,$dll) And GUICtrlRead($input1) <> "" then
If GUICtrlRead($input1) = "/cls" then
_GUICtrlListBox_ResetContent($list1)
$compteur = 0
GUiCtrlsEtData($Input1, "")
EndIf
If _IsPressed($touche,$dll) And GUICtrlRead($input1) <> "" then
$compteur = $compteur + 1
If $compteur >= 29 Then _GUICtrlListBox_DeleteString($List1,0)
TCPSend($masock, "PRIVMSG " & $channel & " :" & GUICTrlRead($Input1) & @CRLF)
_GUICtrlListBox_AddString($List1,"["&@HOUR&":"&@MIN&":"&@SEC&"] <" &$pseudo & "> " & GUICTRLRead($input1))
GUiCtrlSetData($Input1, "")
EndIf
EndIf
EndSwitch
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
;~ If $data <> "" Then MsgBox(0, "", $data)
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue (ca permet de verifier que la donnée recu est importante
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1)
$ou = $datasplit2[3] ;et sur quel canal
$compteur = $compteur + 1
For $j = 6 To $datasplit2[0]
_GUICTrlListBox_AddString($List2, $datasplit2[$j])
Next
If $compteur >= 30 Then _GUICtrlListBox_DeleteString($List1,0)
_GUICtrlListBox_AddString($List1,"["&@HOUR&":"&@MIN&":"&@SEC&"] <" & $qui & "> " & $quoi)
If Not WinActive($Form1) Then
$guiName = "Nouveau Message !"
WinFlash($Form1)
Beep(480,100);
Beep(1568,100);
Beep(1568,100);
EndIf
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
Case "353"
$compteur = $compteur + 1
If $compteur >= 30 Then _GUICtrlListBox_DeleteString($List1,0)
For $j = 6 To $datasplit2[0]
_GUICTrlListBox_AddString($List2, $datasplit2[$j])
Next
If Not WinActive($Form1) Then
$guiName = "Nouveau Message !"
WinFlash($Form1)
Beep(480,100);
Beep(1568,100);
Beep(1568,100);
EndIf
EndSwitch
Next
WEnd
DllClose($dll)