Global $server = "irc.afterworkchat.com" Global $channel = '#autoit' Global $nick = 'TestNick1' Global $port = 6667 Global $USER, $USER_alt, $text, $txt HotKeySet('#!w', '_werfen') ; Aktion des Clients HotKeySet('#!a', '_action') ; Aktion des Clients HotKeySet('#!s', '_say') ; Client spricht HotKeySet('#!q', '_quit') ; Abmelden vom Server, Programmende HotKeySet('#!p', '_part') ; Channel verlassen HotKeySet('#!j', '_join') ; Channel betreten TCPStartup () Global $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) _IRCSendMessage($sock, "Hallo!", $channel) _IRCChangeMode ($sock, "+i", $nick) Case "332" ; Raumthema $titel = '' For $k = 6 To $sTemp[0] $titel &= $sTemp[$k] & ' ' Next ConsoleWrite('Thema: ' & $titel & @CRLF) Case "333" ; Thema von ConsoleWrite('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 ConsoleWrite($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) ConsoleWrite('***' & $USER & ' ' & $text & @CRLF) ElseIf StringInStr($text, 'DCC CHAT', 1) Then ; Direkt-Chatanfrage $text = 'DCC-Chatanfrage von ' & $USER ConsoleWrite($text & @CRLF) Else ConsoleWrite('<' & $USER & '> ' & $text & @CRLF) ; USER spricht EndIf Case 'JOIN' ; Chatraum wird betreten $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1) ConsoleWrite('***' & $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) ConsoleWrite('***' & $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 ConsoleWrite($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 ConsoleWrite($txt & $text & @CRLF) Case Else ; alle Nachrichten, die nicht in andere Kategorien passen, z.B. Server-Infos ConsoleWrite('sonstiges: ' & $sData[$i] & @CRLF) EndSwitch Next WEnd #region HotKey-Funktionen Func _say() _IRCSendMessage($sock, "Hallo ihr alle!", $channel) EndFunc Func _action() _IRCSendAction ($sock, "begrüßt erst mal alle Chatter persönlich mit Handschlag", $channel) EndFunc Func _quit() _IRCQuit($sock, "Bis zum nächsten Mal") Exit EndFunc Func _werfen() _IRCSendAction ($sock, "wirft einen bunten Konfettiregen in den Chat", $channel) EndFunc Func _part() _IRCLeaveChannel($sock, 'Bis gleich', $channel) EndFunc Func _join() _IRCJoinChannel ($sock, $channel) EndFunc #endregion HotKey-Funktionen #region IRC-Func ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 ;=============================================================================== ; ; 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 #endregion IRC-Func #region IRC-Syntax #cs Common recieves: Nick = User who the message is from Name = Settable by user, set in the USER command host = ISP host ~~~~PRIVMSG~~~~ You recieve this when someone has sent a message in a channel, gives you there Nick, host, the channel it was said in and the message. SYNTAX: :Nick!Name@host PRIVMSG #Channel :Message EXAMPLE: :Chip!Chip@OMN-8243F63D.dsl.bell.ca PRIVMSG #Chip :Hey guy's Would be a message from Chip to say 'Hey guy's' in the channel #Chip :Chip!Chip@OMN-8243F63D.dsl.bell.ca PRIVMSG Bob :Hey Bob! Would be a Personal Message from Chip to Bob saying 'Hey Bob!' ~~~~~~~~~ ~~~~MODE~~~~ You recieve this when a mode is changed, a mode can give/take access change certain things like who can join a channel etc.. SYNTAX: :Nick!Name@host MODE #Channel +/- MODE (USER) EXAMPLES: :ChanServ!services@host MODE #Chip +o Chip This says ChanServ (usually a service bot) has given Chip Operator access in the channel #Chip :ChanServ!services@host MODE #Chip +i This makes #Chip invite only, so only OPs can invite users in the channel. :Chip!Chip@OMN-8243F63D.dsl.bell.ca MODE Chip +i This will make Chip invisible to WHOIS. These are usermodes. ~~~~~~~~~ ~~~~PING~~~~ You recieves these at random to make sure your still online and not disconnected. SYNTAX: PING :Randomletters Usually a PING has random letters that you have to respond with. EXAMPLE: PING :29809dj0d You would respond with PONG 29809dj0d ~~~~~~~~~~~ ~~~~JOIN~~~~ You recieve this when someone joins a channel. SYNTAX: :Nick!Name@Host JOIN :#Channel EXAMPLE: :Chip!Chip@OMN-8243F63D.dsl.bell.ca JOIN :#Chip This would be sent to everybody in #Chip to show that Chip has joined the channel #Chip ~~~~~~~~~~~~~ ~~~~KICK~~~~ You recieve this when someone gets kicked (Including yourself!) SYNTAX: :Nick!Name@Host KICK #Channel User :Reason EXAMPLE: :Chip!Name@Host KICK #Chip Bob :Talk in private Would kick Bob from #Chip and say 'Talk in private' in the reason ~~~~~~~~~~~~~~ ~~~~QUIT~~~~ You recieve this when someone disconnects from IRC. SYNTAX: :Nick!Name@Host QUIT :Reason EXAMPLE: :Chip!Chip@OMN-8243F63D.dsl.bell.ca QUIT :I'm bored Would be sent to everyone in the channels Chip was in to say that he left IRC because He was bored. ~~~~~~~~~~~~~~ #ce #endregion IRC-Syntax