All pastes #817097 Raw Edit

FooIRC

public text v1 · immutable
·published 2007-12-15 06:27 UTC
rendered paste body
#NoTrayIcon
#include <GUIConstants.au3>
#include <GuiEdit.au3>
#include <file.au3>

; ---- Variables ----
; -- IRC Variables
;Global $addr = "82.96.64.4" ;irc.freenode.net
Global $addr = "irc.freenode.net"
Global $port = "6667"
Global $channel = "#thesoftwarejedi"
Global $nick = "version2"
Global $nick_pw = ""
; -- App Variables
Global $appname = "FooIRC Client"
Global $appversion = "0.1.2"
Global $iconpath = "images/icons/irc_online.ico"
Global $connected = 0
Global $settingsfile = "settings.ini"
; -- Environment Variables
Global $fontcolor = "000000"
Global $backgroundcolor = "ffffff"
; -- Predefined Variables
Global $sock = -1

; Create settings file if it doesn't exist.
If Not FileExists ($settingsfile) Then
	IniWrite($settingsfile, "App", "server", $addr)
	IniWrite($settingsfile, "App", "port", $port)
	IniWrite($settingsfile, "App", "channel", $channel)
	IniWrite($settingsfile, "Environment", "fontcolor", $fontcolor)
	IniWrite($settingsfile, "Environment", "backgroundcolor", $backgroundcolor)
	IniWrite($settingsfile, "Profile", "nick", $nick)
	IniWrite($settingsfile, "Profile", "password", $nick_pw)
EndIf
$addr = IniRead($settingsfile, "App", "server", $addr)
$port = IniRead($settingsfile, "App", "port", $port)
$channel = IniRead($settingsfile, "App", "channel", $channel)
$fontcolor = IniRead($settingsfile, "Environment", "fontcolor", $fontcolor)
$backgroundcolor = IniRead($settingsfile, "Environment", "backgroundcolor", $backgroundcolor)
$nick = IniRead($settingsfile, "Profile", "nick", $nick)
$nick_pw = IniRead($settingsfile, "Profile", "password", $nick_pw)

; ---- Set Script Options ----
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
AutoItSetOption("RunErrorsFatal", 0)
Opt("TCPTimeout",100) ;in ms

; --- GUI
$gui = GuiCreate($appname & " - " & $appversion, 500, 517)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
$serveroutput = GUICtrlCreateEdit("", 3, 25, 494, 466, $ES_READONLY+$WS_VSCROLL)
GUICtrlSetBkColor($serveroutput, "0x" & $backgroundcolor) ; Set background color of output field
GUICtrlSetColor($serveroutput, "0x" & $fontcolor) ; Set font color of output field
$serverinput = GuiCtrlCreateInput("", 3, 494, 494, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$submit = GUICtrlCreateButton ("Submit", 500, 496, 60, 22, $BS_DEFPUSHBUTTON)
GUICtrlSetOnEvent(-1, "Submit")
GuiSetIcon(@ScriptDir & "/" & $iconpath, 0)
GuiSetState()

GUICtrlCreatePic("images/bmp/irc_channel.bmp",6,4, 0,0)
GUICtrlSetOnEvent(-1, "QuickConnect")
GUICtrlCreatePic("images/bmp/irc_profile.bmp",30,4, 0,0)
GUICtrlSetOnEvent(-1, "Profile")
GUICtrlCreatePic("images/bmp/color.bmp",54,4, 0,0)
GUICtrlSetOnEvent(-1, "Colors")
GUICtrlCreatePic("images/bmp/irc_settings.bmp",78,4, 0,0)
GUICtrlSetOnEvent(-1, "Settings")
GUICtrlCreatePic("images/bmp/exit.bmp",102,3, 0,0)
GUICtrlSetOnEvent(-1, "Quit")

TraySetState()
TraySetToolTip($appname & " - Quate.net")
TrayCreateItem("About")
TrayItemSetOnEvent(-1, "AboutTray")
TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "Quit")
TraySetIcon(@ScriptDir & "/" & $iconpath, "")

TCPStartup()

;QuickConnect()

While $connected = 0
	Sleep(100)
WEnd

GuiCtrlSetData($serveroutput, "*** Attempting to connect to " & $addr & "" & @CRLF)

$ip = TCPNameToIP($addr)
$sock = TCPConnect($ip, $port)
If @error Then
	ReportError("Could not connect to " & $addr & ":" & $port & ".")
	Exit
EndIf

$prev = GuiCtrlRead($serveroutput)
GuiCtrlSetData($serveroutput, $prev & "*** Connected to " & $addr & "" & @CRLF)

$loop = 0

While 1
	$irc = TCPRecv($sock, 384)
	If @error Then
		ReportError("Could not recieve data from " & $addr & ":" & $port & ".")
		Exit
	EndIf
	
	If $irc <> "" Then
; Create a log of the raw data. Below uses two different log files.
; One displays the data & time, which can be useful sometimes.
; The other does not display the data & time, so that you can see exactly what was receieved without any problems.
; Eventually I will choose one and stick with it, probably the second one.
_FileWriteLog(@ScriptDir & "\log_backup.txt", $irc)

; Analize data
if StringinStr($irc,"/quote pong")Then
		$irc = $irc&"PONG " & StringMid($irc,StringInStr($irc,"/quote pong")+12,StringInStr($irc," or /raw")-StringInStr($irc,"/quote pong")-12)&@crlf&"JOIN "&$channel&@crlf
		IRC_Send("PONG " & StringMid($irc,StringInStr($irc,"/quote pong")+12,StringInStr($irc," or /raw")-StringInStr($irc,"/quote pong")-12)&@crlf&"JOIN "&$channel&@crlf)
		endif
		
If StringinStr($irc, ":") Then
	$message1 = StringSplit ($irc, ":", 1)
	$irc1 = $message1[1]
	$irc2 = $message1[2]
	If StringinStr($irc1, "NOTICE AUTH ") Then
		$message = StringReplace($irc, "NOTICE AUTH :", "")
		$irc = $message
	ElseIf StringinStr($irc1, "PING ") OR StringinStr($irc, "VERSION") Then
		; Do nothing. (just as long as it doesn't parse under PRIVMSG)
		;MsgBox(0, $irc, $irc)
		$irc = ""
	ElseIf StringinStr($irc2, "PRIVMSG") AND StringinStr($irc2, "!") Then
		$message = StringSplit ($irc, "PRIVMSG " & $channel & " :", 1)
		$name_temp = StringSplit($irc, "!", 1)
		$name = StringReplace($name_temp[1], ":", "")
		$irc = "<" & $name & "> " & $message[2]
	ElseIf StringinStr($irc2, "QUIT") AND StringinStr($irc2, "!") Then
		$message = StringSplit ($irc, "QUIT :", 1)
		$name_temp = StringSplit($irc, "!", 1)
		$name = StringReplace($name_temp[1], ":", "")
		$irc = "*** " & $name & " left: " & $message[2] & @CRLF
	ElseIf StringinStr($irc2, "JOIN") AND StringinStr($irc2, "!") Then
		$message = StringSplit ($irc, "JOIN :"& $channel, 1)
		$name_temp = StringSplit($irc, "!", 1)
		$name = StringReplace($name_temp[1], ":", "")
		$irc = "*** " & $name & " joined" & @CRLF
	EndIf
EndIf
;PRIVMSG #TheSoftwareJedi :ACTION

		$prev = GuiCtrlRead($serveroutput)
		
		guiCtrlSetData($serveroutput, $prev & $irc)
		_guiCtrlEdit_LineScroll($serveroutput, 0, 100000)
	EndIf
	
	If $loop = 1 Then
		IRC_Send("NICK " & $nick & @CRLF)
		If $nick_pw <> "" Then
			;IRC_Send("/msg nickserv IDENTIFY " & $nick_pw & "" & @CRLF)
			IRC_Send("PRIVMSG NickServ IDENTIFY " & $nick_pw & "" & @CRLF)
		EndIf
		IRC_Send("USER " & $nick & " " & $addr & " " & $addr & " " & $appname & "" & @CRLF)
		IRC_Send("JOIN " & $channel & @CRLF)
	EndIf
	$loop += 1
WEnd

; ---- Functions ----
Func IRC_Send($Msg)
	Global $sock
	TCPSend($sock, $Msg)
EndFunc

Func Submit()
		IRC_Send("PRIVMSG " & $channel & " : " & GUICtrlRead($serverinput) & "" & @CRLF)
	    $prev = GuiCtrlRead($serveroutput)
		GuiCtrlSetData($serveroutput, $prev & "<" & $nick & "> " & GUICtrlRead($serverinput) & "" & @CRLF)
	
		
	; Clear input box.
	GuiCtrlSetData($serverinput, "")
		
	_GUICtrlEdit_LineScroll($serveroutput, 0, 100000)

EndFunc

Func ReportError($Msg)
	Opt("GUIOnEventMode", 0)
	GUICreate($appname & " Error", 260, 80)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	$Label = GuiCtrlCreateLabel($Msg, 10, 10, 240, 42)
	$OkayButton  = GUICtrlCreateButton("OK", 90, 50, 72, 22, $BS_DEFPUSHBUTTON)
	GUISetState()
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			ExitLoop
			Exit
		ElseIf $msg = $OkayButton Then
			GUIDelete()
			ExitLoop
			Exit
		EndIf
	WEnd
	GUIDelete()
	Opt("GUIOnEventMode", 1)
EndFunc

Func PromptGUI($Title, $Msg, $Default = "")
	Opt("GUIOnEventMode", 0)
	$parent_win_pos = WinGetPos("")
	$gui_prompt = GUICreate($Title, 260, 96, $parent_win_pos[0]+120, $parent_win_pos[1]+200)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	$Label = GuiCtrlCreateLabel($Msg, 10, 10, 240, 39)
	$OkayButton  = GUICtrlCreateButton("OK", 30, 65, 72, 22, $BS_DEFPUSHBUTTON)
	$CancelButton  = GUICtrlCreateButton("Cancel", 150, 65, 72, 22)
	$Input = GuiCtrlCreateInput($Default, 10, 40, 240, 20)
	GUICtrlSetState(-1, $GUI_FOCUS)
	GUISetState()
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			;TCPShutdown()
			;Exit
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $CancelButton Then
			GUIDelete()
			;TCPShutdown()
			;Exit
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $OkayButton Then
			$Value = GUICtrlRead($Input)
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return $Value
		EndIf
	WEnd
	GUIDelete()
	Opt("GUIOnEventMode", 1)
EndFunc

; -- GUI/Tray Functions
Func QuickConnect()
	$addr = PromptGUI("Connect to server", "Enter the server you wish to connect to.", $addr)
	If $addr = "" Then
		Return $addr
	EndIf
	IniWrite($settingsfile, "App", "server", $addr)
	$channel = PromptGUI("Connect to channel", "Enter the channel name to connect to.", $channel)
	If $channel = "" Then
		Return $channel
	EndIf
	IniWrite($settingsfile, "App", "channel", $channel)
	$connected = 1
EndFunc
Func Profile()
	Opt("GUIOnEventMode", 0)
	$parent_win_pos = WinGetPos("")
	$gui_profile = GUICreate("User Profile", 200, 96, $parent_win_pos[0]+150, $parent_win_pos[1]+200)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	$OkayButton  = GUICtrlCreateButton("OK", 20, 65, 72, 22, $BS_DEFPUSHBUTTON)
	;GUICtrlSetState(-1, $GUI_FOCUS)
	$CancelButton  = GUICtrlCreateButton("Cancel", 110, 65, 72, 22)
	$Label = GuiCtrlCreateLabel("User:", 10, 10, 90, 20)
	$Input = GuiCtrlCreateInput($nick, 90, 8, 100, 20)
	$Label2 = GuiCtrlCreateLabel("Password:", 10, 35, 90, 20)
	$Input2 = GuiCtrlCreateInput($nick_pw, 90, 32, 100, 20)
	GUISetState()
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			GUISetState($gui)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $CancelButton Then
			GUIDelete()
			GUISetState($gui)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $OkayButton Then

			$nick = GUICtrlRead($Input)
			$nick_pw = GUICtrlRead($Input2)
			GUIDelete()
			GUISetState($gui)
			Opt("GUIOnEventMode", 1)
			; Save settings.
			IniWrite($settingsfile, "Profile", "nick", $nick)
			IniWrite($settingsfile, "Profile", "password", $nick_pw)
			Return $nick
		EndIf
	WEnd
EndFunc
Func Colors()
	Opt("GUIOnEventMode", 0)
	$parent_win_pos = WinGetPos("")
	$gui_colors = GUICreate("Colors", 200, 96, $parent_win_pos[0]+150, $parent_win_pos[1]+200)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	$OkayButton  = GUICtrlCreateButton("OK", 20, 65, 72, 22)
	GUICtrlSetState(-1, $GUI_FOCUS)
	$CancelButton  = GUICtrlCreateButton("Cancel", 110, 65, 72, 22)
	$Label = GuiCtrlCreateLabel("Font:", 10, 10, 90, 20)
	$Input = GuiCtrlCreateInput($fontcolor, 90, 8, 100, 20)
	$Label2 = GuiCtrlCreateLabel("Background:", 10, 35, 90, 20)
	$Input2 = GuiCtrlCreateInput($backgroundcolor, 90, 32, 100, 20)
	GUISetState()
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $CancelButton Then
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $OkayButton Then
			$fontcolor = GUICtrlRead($Input)
			$backgroundcolor = GUICtrlRead($Input2)
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			; Save settings.
			IniWrite($settingsfile, "Environment", "fontcolor", $fontcolor)
			IniWrite($settingsfile, "Environment", "backgroundcolor", $backgroundcolor)
			GUICtrlSetBkColor($serveroutput, "0x" & $backgroundcolor) ; Set background color of output field
			GUICtrlSetColor($serveroutput, "0x" & $fontcolor) ; Set font color of output field
			Return $fontcolor
		EndIf
	WEnd
EndFunc
Func Settings()
	Opt("GUIOnEventMode", 0)
	$parent_win_pos = WinGetPos("")
	$gui_settings = GUICreate("Settings", 300, 200, $parent_win_pos[0]+100, $parent_win_pos[1]+150)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	GUISetState()
	
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		EndIf
	WEnd
EndFunc

Func AboutTray()
	;MsgBox(0, $appname & " " & $appversion, $appname & " created by Quate.net. Licensed under the GPL.")
	Opt("GUIOnEventMode", 0)
	$parent_win_pos = WinGetPos("")
	$gui_settings = GUICreate("About " & $appname, 300, 130, $parent_win_pos[0]+150, $parent_win_pos[1]+200)
	$Label = GuiCtrlCreateLabel($appname & " " & $appversion & "" & @CRLF & "" & @CRLF & "Program created by Quate (www.quate.net), licensed under the GPL. Icons by Everaldo Coelho (www.everaldo.com), licensed under the LGPL", 10, 10, 280, 80)
	GuiSetIcon(@ScriptDir & "\" & $iconpath, 0)
	$OkayButton  = GUICtrlCreateButton("OK", 120, 100, 72, 22)
	GUICtrlSetState(-1, $GUI_FOCUS)
	GUISetState()
	
	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		ElseIf $msg = $OkayButton Then
			GUIDelete()
			GUISetState($gui)
			GUISetState(@SW_SHOW)
			Opt("GUIOnEventMode", 1)
			Return ""
		EndIf
	WEnd
EndFunc

Func Quit()
	TCPShutdown()
	Exit
EndFunc