IRC Client mit dcc funktion

  • Hallo zusammen,

    ich habe mir schon BugFix's IRC UDF angeschaut und mal im englischen Forum gesucht. Dabei hab ich folgenden Client gefunden: Link

    Das Problem ist, ich möchte damit Dateien empfangen... und ich weiß nicht wie. Ich will im Prinzip nur
    - Network
    - Channel
    - Bot
    angeben und dann eine Nachricht schicken, z.B. /ctcp ichbineinbot xdcc send #1

    Weiß von euch da jemand genaueres?

    Danke für jede Hilfe.

    MFG

  • Tja, leider hab ichs noch nicht geschafft, sowas zu schreiben. Aber ich bin auf ne andere Idee gekommen.

    Ist es möglich andere Anwendungen in die GUI zu packen oder ist das nur mit dem IE möglich? Evtl. könnte ich dann einfach einen fertigen IRC Client einbinden...

  • Hi, die UDF von Bugfix ist wirklich gut. Habe mir die letztens auch mal angeschaut, denn ich habe auch ein Irc-Bot in mein Programm gebastelt. Was etwas doof ist, er konnte anfangs nicht zwischen Privaten Nachrichten und Channelnachrichten unterscheiden. Nimm am besten BugFix seine UDF, ist sehr übersichtlich geschrieben (echt schön ;D) und das IRC Protkoll ist ja auch nicht die Welt. Man findet einige Theards wo ein DCC Send erklärt sein sollte.

    Was ist eigentlich dein Ziel? Du willst einen Bot schreiben, der, wenn er eine DCC anfrage bekommt, diese auch annimmt?

  • Also wenns nicht geht, dannm muss ich mich wohl oder übel da durchbeißen, aber nochmal die Frage: Kann ich fremde Programme in die GUI einbinden?

  • Alles klar, dann probier ich das heut oder morgen mal aus.
    Ich will einen IRC Downloader basteln, wenn er die DCC Anfrage automatisch annehmen kann ists mir natürlich recht, aber mir würde auch ein normales Fenster reichen, in dem ich dann auf [Annehmen] klicke, sowie bei den anderen Clients eben.
    So viel Features drumherum brauch ich deshalb auch nicht, nur das Chatfenster. Der Connect wird per button erledigt und das abschicken der /msg auch. Naja mal sehen, vielleicht probier ich es erstmal in Bugfixs UDF mit den Shortcuts (/msg ***) ...

    • Offizieller Beitrag

    Kleiner Tipp:
    Starte meinen Bsp.-Client, dort werden ja Ereignisse (eingehende Nachrichten etc.) in die Console geschrieben. Dann schicke von einem anderen Client (mIRC, Miranda...) eine DCC-Anforderung. Dann kannst du genau sehen, wie diese Anforderung vom Protokoll her behandelt wird und brauchst nur analog reagieren.

  • OT: BugFix : Den Free Tibet Aufkleber hab ich heut auf nem Auto vor mir gesehen. Ich dacht mir schon, dass ich den kenne, aber wusste nicht mehr woher ^^

  • So, bin jetzt fast fertig, nur mein IRC will nicht funktionieren.
    Eigentlich wollt ich ja nicht so viel Code preisgeben und euch überraschen, aber da es momentan irgendwo hängt, geb ich euch gleich alles:

    Spoiler anzeigen
    [autoit]

    #cs================================================
    AutoIt Version: 3.2.12.1
    Author: Taek
    Script Function: XDCC Autoloader
    #ce================================================
    #include <File.au3>
    #include <IE.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <GUIConstants.au3>
    #include <GuiMenu.au3>
    #include <StaticConstants.au3>
    #include <GuiListView.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GuiTab.au3>
    #include <GuiEdit.au3>
    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIDataSeparatorChar","~")
    ;==================================================
    ; GUI
    ;==================================================
    $xdcc_Autoloader = GUICreate("XDCC Autoloader",900,507)
    $tab = GUICtrlCreateTab(2,2,898,505)
    $tabsuche = GUICtrlCreateTabItem("Suche")
    $createinput = GUICtrlCreateInput("",10,30,300,20)
    $seitecombo = GUICtrlCreateCombo("",320,30,120,20)
    $suchen = GUICtrlCreateButton("Suchen",450,30,90,20)
    $downloaden = GUICtrlCreateButton("Download",550,30,90,20)
    GUICtrlSetData($seitecombo,"Seite wählen~packetnews.com~xdccing.com~packetfind.com","Seite wählen")
    $statuslabel = GUICtrlCreateLabel("",645,35,250,20,BitOR($BS_BOTTOM ,$GUI_SS_DEFAULT_LABEL,$SS_CENTER))
    GUICtrlSetFont($statuslabel,Default,800)
    GUICtrlSetBkColor($statuslabel,$GUI_BKCOLOR_TRANSPARENT)
    $searchresult = GUICtrlCreateListView("Packname~Größe~Speed~Status~DLs~Quelle",3,60,894,444,BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_SINGLESEL),$LVS_EX_FULLROWSELECT)
    _GUICtrlListView_SetColumnWidth($searchresult,0,300)
    _GUICtrlListView_SetColumnWidth($searchresult,1,65)
    _GUICtrlListView_SetColumnWidth($searchresult,2,70)
    _GUICtrlListView_SetColumnWidth($searchresult,3,90)
    _GUICtrlListView_SetColumnWidth($searchresult,4,35)
    _GUICtrlListView_SetColumnWidth($searchresult,5,315)
    _GUICtrlListView_RegisterSortCallBack($searchresult,True,True)
    $tabirc = GUICtrlCreateTabItem("IRC")
    $lbl_server = GUICtrlCreateLabel("Server:",10,30,200,15)
    $lbl_channel = GUICtrlCreateLabel("Channel:",10,45,200,15)
    $lbl_botname = GUICtrlCreateLabel("Bot:",10,60,200,15)
    $lbl_packname = GUICtrlCreateLabel("Datei:",10,75,200,30)
    $connect = GUICtrlCreateButton("Verbinden",10,120,110,22)
    $getmsg = GUICtrlCreateButton("DCC senden",10,145,110,22)
    $disconnect = GUICtrlCreateButton("Trennen",10,170,110,22)
    $console = GUICtrlCreateEdit("",215,30,675,470,BitOR($ES_READONLY,$ES_AUTOVSCROLL))
    GUICtrlSetBkColor($console,0xFFFFFF)
    GUISetState(@SW_SHOW)
    ;==================================================
    ; Globale Konstanten
    ;==================================================

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================
    ; Programmschleife
    ;==================================================

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $searchresult
    _GUICtrlListView_SortItems($searchresult, GUICtrlGetState($searchresult))
    Case $suchen
    FileDelete(@ScriptDir&"\source.txt")
    $begriff = GUICtrlRead($createinput)
    $seite = GUICtrlRead($seitecombo)
    If _getsource($begriff,$seite) = True Then
    $results = _createitems($seite)
    EndIf
    GUICtrlSetData($statuslabel,"")
    Case $downloaden
    For $k = 1 To 100
    If _GUICtrlListView_GetItemFocused($searchresult,$k-1) = True Then
    $citem = _GUICtrlListView_GetItemTextArray($searchresult,$k-1)
    For $l = 1 To 100
    If $citem[1] = $results[$l][0] And $citem[6] = $results[$l][5]&" ... "&$results[$l][6]&" ... "&$results[$l][7] Then
    GUICtrlSetData($lbl_server,"Network: "&$results[$l][5])
    GUICtrlSetData($lbl_channel,"Channel: "&$results[$l][6])
    GUICtrlSetData($lbl_botname,"Bot: "&$results[$l][7])
    GUICtrlSetData($lbl_packname,"Datei: "&$results[$l][0])
    $message = $results[$l][8]
    EndIf
    Next
    Endif
    Next
    _GUICtrlTab_SetCurFocus($tab,1)
    Case $connect
    $1 = StringTrimLeft(GUICtrlRead($lbl_server),9)
    $2 = StringTrimLeft(GUICtrlRead($lbl_channel),9)
    $3 = StringTrimLeft(GUICtrlRead($lbl_botname),5)
    If Not $1 = "" And Not $2 = "" And Not $3 = "" Then
    _IRC_Client($1,$2,"anonymous"&Random(0000,9999,1))
    EndIf
    Case $getmsg
    _IRCSendMessage($sock,$message,$3)
    Case $disconnect
    _IRCQuit($sock,"cya")
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================
    ; Sourcecode speichern
    ;==================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _getsource($searchstring,$searchsite)
    If $searchstring = "" Then
    MsgBox(48,"Keinen Suchbegriff!","Bitte einen Suchbegriff eingeben.")
    Else
    If $searchsite = "Seite wählen" Then
    MsgBox(48,"Keine Seite!","Bitte eine Seite zur Suche auswählen.")
    Else
    GUICtrlSetData($statuslabel,"Verbindungsversuch...")
    If Not Ping("www.google.de",400) Then
    Msgbox(48,"Fehler "&@error,"Die Verbindung mit dem Internet konnte nicht hergestellt werden.")
    Else
    GUICtrlSetData($statuslabel,"Suche läuft. Bitte warten...")
    If $searchsite = "packetnews.com" Then
    $searchstring = StringReplace($searchstring," ","+")
    If StringInStr(_INetGetSource("http://www.packetnews.com/search.php?type=0&kw="&$searchstring),"No Results found.") Then
    GUICtrlSetData($statuslabel,"Suche fehlgeschlagen...")
    MsgBox(64,"Suche","Keine Ergebnisse gefunden!"&@CRLF&"Bitte anderen Suchbegriff wählen.")
    Return False
    Else
    $file = FileOpen(@ScriptDir&"\source.txt",10)
    FileWrite($file,_INetGetSource("http://www.packetnews.com/search.php?type=0&kw="&$searchstring))
    FileClose($file)
    Return True
    EndIf
    ElseIf $searchsite = "xdccing.com" Then
    $oIE = _IECreate("http://xdccing.com/"&$searchstring,0,0,1)
    _IEPropertySet($oIE,"silent",True)
    If StringInStr(_IEBodyReadText($oIE),"No such pack") Then
    GUICtrlSetData($statuslabel,"Suche fehlgeschlagen...")
    MsgBox(64,"Suche","Keine Ergebnisse gefunden!"&@CRLF&"Bitte anderen Suchbegriff wählen.")
    Return False
    Else
    $file = FileOpen(@ScriptDir&"\source.txt",10)
    FileWrite($file,_IEBodyReadHTML($oIE))
    FileClose($file)
    Return True
    EndIf
    _IEQuit($oIE)
    ElseIf $searchsite = "packetfind.com" Then
    $searchstring = StringReplace($searchstring," ","+")
    If StringInStr(_INetGetSource("http://www.packetfind.com/search.php?Description="&$searchstring),"zero results") Then
    GUICtrlSetData($statuslabel,"Suche fehlgeschlagen...")
    MsgBox(64,"Suche","Keine Ergebnisse gefunden!"&@CRLF&"Bitte anderen Suchbegriff wählen.")
    Return False
    Else
    $file = FileOpen(@ScriptDir&"\source.txt",10)
    FileWrite($file,_INetGetSource("http://www.packetfind.com/search.php?Description="&$searchstring))
    FileClose($file)
    Return True
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc; ==> _getsource

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================
    ; Suchergebnisse darstellen
    ;==================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _createitems($site)
    If $site = "packetnews.com" Then
    $file = FileOpen(@ScriptDir&"\source.txt",0)
    Local $array[101][9]
    Local $arrayzeile = 0
    $i = 100
    Do
    GUICtrlSetData($statuslabel,"Daten werden verarbeitet...")
    $line = FileReadLine($file,$i)
    If StringInStr($line,"Network:") Then
    $anetwork = _StringBetween($line,'network-link"><b>',"</b></a>")
    $network = $anetwork[0]
    EndIf
    If StringInStr($line,"Channel:") Then
    $achannel = _StringBetween($line,'channel-link">',"</a></td>")
    $channel = $achannel[0]
    EndIf
    If StringInStr($line,'<td nowrap width=115>') Then
    $abotname = _StringBetween($line,'#000000">',"</font>")
    $botname = $abotname[0]

    $line = FileReadLine($file,$i+1)
    $abotstatus = _StringBetween($line,'0">',"</font>")
    $botstatus = $abotstatus[0]& " Online"
    $line = FileReadLine($file,$i+4)
    $abotspeed = _StringBetween($line,'0"><i>',"</i></font></td>")
    If StringCompare($abotspeed[0],"&nbsp;") = 0 Then
    $botspeed = "N/A"
    Else
    $botspeed = $abotspeed[0]&" KB/s"
    EndIf
    $line = FileReadLine($file,$i+6)
    $adownloads = _StringBetween($line,'00">',"x</font>")
    $downloads = $adownloads[0]
    $line = FileReadLine($file,$i+5)
    $agetpack = _StringBetween($line,"toclip('","');")
    $getpack = $agetpack[0]
    $line = FileReadLine($file,$i+7)
    $apacksize = _StringBetween($line,'0">',"M</font>")
    $packsize = $apacksize[0]&" MB"
    $line = FileReadLine($file,$i+8)
    $apackname = _StringBetween($line,'000">',"</font></td>")
    $packname = StringReplace(StringReplace($apackname[0],'<b style="color:#003399;">',""),"</b>","")
    $arrayzeile += 1
    $array[$arrayzeile][0] = $packname
    $array[$arrayzeile][1] = $packsize
    $array[$arrayzeile][2] = $botspeed
    $array[$arrayzeile][3] = $botstatus
    $array[$arrayzeile][4] = $downloads
    $array[$arrayzeile][5] = $network
    $array[$arrayzeile][6] = $channel
    $array[$arrayzeile][7] = $botname
    $array[$arrayzeile][8] = $getpack
    $i += 8
    EndIf
    $i += 1
    Until $i = _FileCountLines(@ScriptDir&"\source.txt")-50
    ElseIf $site = "xdccing.com" Then
    $file = FileOpen(@ScriptDir&"\source.txt",0)
    Local $array[101][9]
    Local $arrayzeile = 0
    $i = 40
    Do
    GUICtrlSetData($statuslabel,"Daten werden verarbeitet...")
    $line = FileReadLine($file,$i)
    If StringInStr($line,"<TD bgColor=white>&nbsp;<A onclick=") And StringInStr($line,"packname=") Then
    $agetpack = _StringBetween($line,"tclip('","');")
    $getpack = $agetpack[0]
    $apackname = _StringBetween($line,"packname=","','w")
    $packname = StringReplace($apackname[0],"+"," ",0)
    $line = FileReadLine($file, $i+1)
    $apacksize = _StringBetween($line,"ht>&nbsp;","&nbsp;")
    If StringInStr($line,"MB") Then
    $packsize = $apacksize[0]&" MB"
    EndIf
    If StringInStr($line,"KB") Then
    $packsize = $apacksize[0]&" KB"
    EndIf
    $line = FileReadLine($file, $i+2)
    $abotspeed = _StringBetween($line,"ec>&nbsp;","&nbsp;</TD>")
    If $abotspeed[0] = "-" Then
    $botspeed = "N/A"
    Else
    $botspeed = StringReplace($abotspeed[0],"&nbsp;"," ")
    EndIf
    $line = FileReadLine($file, $i+3)
    If StringLen($line) > 15 Then
    $anetwork = _StringBetween($line,"http://",".xdccing.com")
    $network = $anetwork[0]
    EndIf
    $line = FileReadLine($file, $i+4)
    If StringLen($line) > 15 Then
    $achannel = _StringBetween($line,"http://",".xdccing.com")
    $channel = "#"&$achannel[0]
    EndIf
    $line = FileReadLine($file, $i+5)
    If StringLen($line) > 15 Then
    $abotname = _StringBetween($line,"<TD>&nbsp;","&nbsp;</TD>")
    $botname = $abotname[0]
    EndIf
    $line = FileReadLine($file, $i+7)
    If StringInStr($line,"green") Then
    $botstatus = "Online"
    Else
    $botstatus = "Offline"
    EndIf
    $arrayzeile += 1
    $array[$arrayzeile][0] = $packname
    $array[$arrayzeile][1] = $packsize
    $array[$arrayzeile][2] = $botspeed
    $array[$arrayzeile][3] = $botstatus
    $array[$arrayzeile][4] = "N/A"
    $array[$arrayzeile][5] = $network
    $array[$arrayzeile][6] = $channel
    $array[$arrayzeile][7] = $botname
    $array[$arrayzeile][8] = $getpack
    $i += 5
    EndIf
    $i += 1
    Until $i = _FileCountLines(@ScriptDir&"\source.txt")-20
    ElseIf $site = "packetfind.com" Then
    $file = FileOpen(@ScriptDir&"\source.txt",0)
    Local $array[151][9]
    Local $arrayzeile = 0
    $i = 18
    $findstart = False
    Do
    $i+= 1
    $line = FileReadLine($file,$i)
    If StringInStr($line,'form name="myform"') Then
    $findstart = True
    EndIf
    Until $findstart = True
    $split1 = StringSplit($line,"<td",1)
    $k = 1
    Do
    If StringInStr($split1[$k],"Network:") Then
    $anetwork = _StringBetween($split1[$k],"</strong> ","</b>")
    $network = $anetwork[0]
    EndIf
    If StringInStr($split1[$k],"Channel:") Then
    $achannel = _StringBetween($split1[$k],"</strong> ","</b>")
    $channel = $achannel[0]
    EndIf
    If StringInStr($split1[$k],"Bot:") Then
    $abotname = _StringBetween($split1[$k],"</strong> ","</b>")
    $botname = $abotname[0]
    EndIf
    If StringInStr($split1[$k],"><a onClick=") Then
    $agetpack = _StringBetween($split1[$k],"('","')")
    $getpack = $agetpack[0]
    $apacksize = _StringBetween($split1[$k+1],">","<")
    $packsize = Stringreplace(StringReplace(StringReplace($apacksize[0],"K"," KB"),"M"," MB"),"G"," GB")
    $abotspeed = _StringBetween($split1[$k+2],">","<")
    $botspeed = $abotspeed[0]
    $abotstatus = _StringBetween($split1[$k+3],">","<")
    $botstatus = StringReplace(StringReplace($abotstatus[0],"0 d, ",""),"0 h, ","")&" Online"
    $adownloads = _StringBetween($split1[$k+5],">","<")
    $downloads = $adownloads[0]
    $apackname = _StringBetween($split1[$k+8],">","<")
    $packname = $apackname[0]
    $arrayzeile += 1
    $array[$arrayzeile][0] = $packname
    $array[$arrayzeile][1] = $packsize
    $array[$arrayzeile][2] = $botspeed
    $array[$arrayzeile][3] = $botstatus
    $array[$arrayzeile][4] = $downloads
    $array[$arrayzeile][5] = $network
    $array[$arrayzeile][6] = $channel
    $array[$arrayzeile][7] = $botname
    $array[$arrayzeile][8] = $getpack
    EndIf
    $k += 1
    Until $k = UBound($split1)-1
    EndIf
    FileClose($file)
    GUICtrlSetData($statuslabel,"Dateien werden gelistet...")
    _GUICtrlListView_DeleteAllItems($searchresult)
    For $j = 1 To 100
    If StringLen($array[$j][0]) > 1 Then
    GUICtrlCreateListViewItem($array[$j][0]&"~"&$array[$j][1]&"~"&$array[$j][2]&"~"&$array[$j][3]&"~"&$array[$j][4]&"~"&$array[$j][5]&" ... "&$array[$j][6]&" ... "&$array[$j][7],$searchresult)
    EndIf
    Next
    GUICtrlSetData($statuslabel,"")
    Return $array
    EndFunc; ==> _createitems

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================
    ; IRC Client
    ;==================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _IRC_Client($1,$2,$3)
    TCPStartup ()
    $server = $1
    $channel = $2
    $nick = $3
    $port = 6667
    $sock = _IRCConnect($server, $port, $nick); Verbindung zu IRC und Identifizierung Nickname
    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then
    Exit
    EndIf
    $recv = TCPRecv($sock, 8192); Empfängt vom Server
    If @error Then
    Exit MsgBox(1, "IRC Example", "Server has errored or disconnected"); Verbindung zum Server besteht nicht mehr
    EndIf
    Local $sData = StringSplit($recv, @CRLF); Splittet die Nachrichten, wenn sie vom Server gruppiert werden
    For $i = 1 To $sData[0] Step 1; behandelt jede Nachricht einzeln
    Local $sTemp = StringSplit($sData[$i], " "); Splittet die Nachricht an den Leerzeichen
    If $sTemp[1] = "" Then ContinueLoop; Weiter, wenn leer
    If $sTemp[1] = "PING" Then _IRCPing($sock, $sTemp[2]); Prüft ob PING zurückgegeben wird
    If $sTemp[0] <= 2 Then ContinueLoop; meist nutzlose Informationen
    Switch $sTemp[2]; Splittet die Command Nachricht
    Case "266"; Indikator der zeigt, dass alle Infos gesendet wurden
    _IRCJoinChannel ($sock, $channel)
    _IRCChangeMode ($sock, "+i", $nick)
    Case "332" ; Raumthema
    $titel = ''
    For $k = 6 To $sTemp[0]
    $titel &= $sTemp[$k] & ' '
    Next
    _GUICtrlEdit_AppendText($console,'Thema: ' & $titel & @CRLF)
    Case "333" ; Thema von
    _GUICtrlEdit_AppendText($console,'Thema von: ' & $sTemp[5] & @CRLF)
    Case "353" ; Userlist
    $text = 'User:' & @CRLF
    For $k = 6 To $sTemp[0]
    If $k = 6 Then
    $text &= @TAB & StringTrimLeft($sTemp[$k],1) & @CRLF
    Else
    $text &= @TAB & $sTemp[$k] & @CRLF
    EndIf
    Next
    _GUICtrlEdit_AppendText($console,$text & @CRLF)
    Case 'PRIVMSG' ; Nachricht empfangen
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $text = ''
    $txtUSER = ''
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    $text = StringTrimLeft($text, 1)
    If StringInStr($text, 'ACTION', 1) Then ; Aktion von USER
    $text = StringTrimLeft($text, 8)
    $text = StringLeft($text, StringLen($text)-2)
    _GUICtrlEdit_AppendText($console,'***' & $USER & ' ' & $text & @CRLF)
    ElseIf StringInStr($text, 'DCC CHAT', 1) Then ; Direkt-Chatanfrage
    $text = 'DCC-Chatanfrage von ' & $USER
    _GUICtrlEdit_AppendText($console,$text & @CRLF)
    Else
    _GUICtrlEdit_AppendText($console,'<' & $USER & '> ' & $text & @CRLF) ; USER spricht
    EndIf
    Case 'JOIN' ; Chatraum wird betreten
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    _GUICtrlEdit_AppendText($console,'***' & $USER & 'betritt den Raum' & @CRLF)
    Case 'NICK' ; Nick wird gewechselt
    $USER_alt = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $USER = StringTrimLeft($sTemp[3], 1)
    _GUICtrlEdit_AppendText($console,'***' & $USER_alt & ' heißt jetzt: ' & $USER & @CRLF)
    Case 'PART' ; Chatraum wird verlassen
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = $USER & ' verläßt den Chatraum '
    $text = ''
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    If $k = 4 Then
    $text &= StringTrimLeft($sTemp[$k], 1) & ' '
    Else
    $text &= $sTemp[$k] & ' '
    EndIf
    Next
    $text = StringTrimRight($text, 1)
    EndIf
    _GUICtrlEdit_AppendText($console,$txt & $text & @CRLF)
    Case 'QUIT' ; Server wird verlassen
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = $USER & ' verläßt den Chatraum '
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    $text = StringTrimRight($text, 1)
    $text = $txt & $text
    EndIf
    _GUICtrlEdit_AppendText($console,$txt & $text & @CRLF)
    Case Else ; alle Nachrichten, die nicht in andere Kategorien passen, z.B. Server-Infos
    _GUICtrlEdit_AppendText($console,'sonstiges: ' & $sData[$i] & @CRLF)
    EndSwitch
    Next
    WEnd
    EndFunc ; ==> _IRC_Client

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Connects you to a IRC Server, and gives your chosen Nick
    ; Parameter(s): $server - IRC Server you wish to connect to
    ; $port - Port to connect to (Usually 6667)
    ; $nick - Nick you choose to use (You can change later)
    ; Requirement(s): TCPStartup () to be run
    ; Return Value(s): On Success - Socket identifer
    ; On Failure - It will exit on error
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCConnect ($server, $port, $nick)
    Local $i = TCPConnect(TCPNameToIP($server), $port)
    If $i = -1 Then Exit MsgBox(1, "IRC.au3 Error", "Server " & $server & " is not responding.")
    TCPSend($i, "NICK " & $nick & @CRLF)
    $ping = tcprecv($i,2048)
    if stringleft($ping,4) = "PING" Then
    $pong = stringreplace($ping,"PING :","")
    tcpsend($i,"PONG " & $pong & @LF)
    EndIf
    TCPSend($i, "USER " & $nick & " 0 0 " & $nick &@CRLF)
    Return $i
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Close the IRC Connection
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message to send with quit
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCQuit($irc, $msg="")
    If $irc = -1 Then Return 0
    TCPSend($irc, "QUIT :" & $msg & @CRLF)
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Leave the IRC Channel
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message to send with part
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCLeaveChannel ($irc, $msg="", $chan="")
    If $irc = -1 Then Return 0
    TCPSend($irc, "PART " & $chan & " :" & $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Joins an IRC Channel
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $chan - Channel you wish to join
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCJoinChannel ($irc, $chan)
    If $irc = -1 Then Return 0
    TCPSend($irc, "JOIN " & $chan & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Sends a message using IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message you want to send
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCSendMessage ($irc, $msg, $chan="")
    If $irc = -1 Then Return 0
    If $chan = "" Then
    TCPSend($irc, $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "PRIVMSG " & $chan & " :" & $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Sends a message as ACTION using IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message you want to send
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCSendAction ($irc, $msg, $chan="")
    If $irc = -1 Then Return 0
    If $chan = "" Then
    TCPSend($irc, $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "PRIVMSG " & $chan & " :" & Chr(1) & "ACTION " & $msg & Chr(1) & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Changes a MODE on IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $mode - Mode you wish to change
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCChangeMode ($irc, $mode, $chan="")
    If $irc = -1 Then Return 0
    If $chan = "" Then
    TCPSend($irc, "MODE " & $mode & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "MODE " & $chan & " " & $mode & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Returns a PING to Server
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $ret - The end of the PING to return
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCPing($irc, $ret)
    If $irc = -1 Then Return 0
    If $ret = "" Then Return -1
    TCPSend($irc, "PONG " & $ret & @CRLF)
    If @error Then
    MsgBox(1, "irc.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit]

    @ "IRC-Checker": Den Download von Dateien hab ich auch noch nicht drin.

  • Ne bin noch nicht dazugekommen, aber die Dateisuche funktioniert schon. SSL geht denke ich nicht, da es afaik ja kein irc standard ist.

  • gibt es hier was neues, finde das ganze recht interessant.
    hab mich mal zu dcc eingelesen (leider nur auf engl., darum bin ich nicht sicher, ob es alles richtig verstanden habe).

    grob habe ich rausgelesen, dass dcc/ctcp quasi nur die kommunikation rund um den datentransfer ist, der transfer selber
    findet per tcp statt, ist das korrekt? tcpsend etc geht ja mit autoit schon recht "easy" ... wie schauts da mit verschlüsseln aus?

  • Momentan steht das Projekt, weil ich noch am RSM (siehe Sig) arbeite, einem Mediaplayer und an einem Tool für Uploaded.to. Falls du am Programm weitermachen möchtest, kann ich dir die Source ja mal schicken. Gibst mir halt Bescheid.