Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #SingleInstance, force
- #Include %A_ScriptDir%\AHKsock.ahk
- global bInitiated:=false
- global bLoggedin:=false
- global sServer:="esper.net"
- global bNickTaken:=false
- global aTabs:=["General","Temp"]
- global aTabElements:={General: ["IRCOutput"],Temp: []}
- global sCurTab:="General"
- global aChanLogs:={}
- Gui,Add,Text,,Username
- Gui,Add,Edit,xs w300 vNick,KaoBot
- Gui,Add,Text,,Password
- Gui,Add,Edit,xs w300 vPass,
- Gui,Add,Text,,Channel(s)
- Gui,Add,Edit,xs w300 vChan,bottest
- Gui,Add,Button,Default gInitiate,Log In
- Gui,Show
- Return ;---------------------------------------------------------------------------
- Initiate:
- Gui,Submit
- Gui,Destroy
- global hEdit
- Gui,Add,Button,vGeneral gChangeTab,General
- Gui,Add,Button,vTemp gChangeTab,Temp
- Gui,Add,Button,vAddTab gAddTab,+
- Gui,Add,Edit,r20 vIRCOutput w400 ReadOnly hwndhEdit
- Gui,Add,Edit,vIRCInput
- Gui,Add,Button,vSubmitIRC gSendIRC Default,>
- Gui,+Resize
- GuiControl,Focus,IRCInput
- Gui,Show
- if (strLen(Nick)=0)
- MsgBox,No Nick Specified
- If (i := AHKsock_Connect("irc." . sServer, 6667, "IRC"))
- {
- MsgBox, % "AHKsock_Connect() failed with return value = " i " and ErrorLevel = " ErrorLevel
- } else {
- global bInitiated:=true
- }
- return
- ChangeTab:
- global sCurTab:=A_GuiControl
- for nTabNum,sTabName in aTabs
- {
- if (sTabName<>A_GuiControl)
- {
- for nElementNum,sElementName in aTabElements[sTabName]
- {
- GuiControl,Hide,%sElementName%
- }
- }
- for nElementNum,sElementName in aTabElements[A_GuiControl]
- {
- GuiControl,Show,%sElementName%
- }
- }
- GuiControl,Focus,IRCInput
- Return
- AddTab:
- Return
- IRC(sEvent, iSocket = 0, sName = 0, sAddr = 0, sPort = 0, ByRef bData = 0, bDataLength = 0)
- {
- global Nick,Chan
- global iSock:=iSocket
- sData:=StrGet(&bData,bDataLength,"UTF-8")
- global sOutput:=sOutput . sEvent . " """ . sData . """`r`n"
- if sEvent=SEND
- {
- AHKSend("NICK " . Nick)
- AHKSend("USER " . Nick . " . . :KaoChat")
- }
- if sEvent=RECEIVED
- HandleEvents(sData)
- GuiControl,,IRCOutput,% sOutput
- global hEdit
- sendmessage, 0x115, 7, 0,, ahk_id %hEdit%
- }
- HandleEvents(sEvent)
- {
- global Nick,Chan,Pass,bLoggedin,bNickTaken,sServer
- if (RegExMatch(sEvent,"^PING :")>0)
- {
- sPingReference:=RegExReplace(sEvent,"PING :(.*)$","$1")
- AHKSend("PONG :" . sPingReference)
- }
- if (bLoggedin=false) and (RegExMatch(sEvent,"Nickname is already in use")>0)
- {
- AHKSend("NICK " . Nick . "_")
- bNickTaken:=true
- }
- if (RegExMatch(sEvent,"End of /MOTD command")>0)
- {
- global bLoggedin:=true
- if (StrLen(Pass)>0)
- {
- AHKSEND("PRIVMSG NickServ :IDENTIFY " . Nick . " " . Pass)
- if bNickTaken
- {
- AHKSEND("PRIVMSG NickServ :GHOST " . Nick . " " . Pass)
- AHKSEND("NICK " . Nick)
- }
- }
- if (strLen(Chan)>0)
- {
- Chan:=RegExReplace(Chan,"#?(.+)$","#$1")
- AHKSend("JOIN " . Chan)
- }
- }
- if (RegExMatch(sEvent,"^:[^!]+![^\s]+ NICK :.+`r?`n?$")>0)
- {
- if (RegExMatch(sEvent,"^:" . Nick . "![^\s]+ NICK :.+`r?`n?$")>0)
- {
- global Nick:=RegExReplace(sEvent,"^:[^!]+![^\s]+ NICK :(.+)`r?`n?$","$1")
- }
- sOldNick:=RegExReplace(sEvent,"^:([^!]+)![^\s]+ NICK :.+`r?`n?$","$1")
- sNewNick:=RegExReplace(sEvent,"^:[^!]+![^\s]+ NICK :(.+)`r?`n?$","$1")
- for sChanName,sChanLog in aChanLogs
- {
- aChanLogs[sChanName]:=sChanLog . sOldNick . " has changed nick to " . sNewNick . "`r`n"
- GuiControl,,%sChanName%Output,% aChanLogs[sChanName]
- }
- }
- if (RegExMatch(sEvent,"PRIVMSG #.+ :.+`r?`n?")>0)
- {
- sChan:=RegExReplace(sEvent,"^.+PRIVMSG #(.+) :.*`r?`n?$","$1")
- sMessage:=RegExReplace(sEvent,"^.+PRIVMSG #.+ :(.*)`r?`n?$","$1")
- sSender:=RegExReplace(sEvent,"s)^:([^!]+)!.+$","$1")
- aChanLogs[sChan]:=aChanLogs[sChan] . "<" . sSender . "> " . sMessage . "`r`n"
- GuiControl,,%sChan%Output,% aChanLogs[sChan]
- }
- sNewChan:=RegExReplace(sEvent,":" . Nick . "![^@]+@.+ JOIN #([^`r`n]+)`r?`n?$","$1",nReplacements)
- if (nReplacements>0)
- {
- NewChan(sNewChan)
- Gosub,GuiSize
- }
- }
- NewChan(sNewChan)
- {
- global
- aTabs.Insert(sNewChan)
- Gui,Add,Button,v%sNewChan% gChangeTab,% sNewChan
- Gui,Add,Edit,r20 v%sNewChan%Output w400 ReadOnly hwndhEdit
- aTabElements[sNewChan]:=[sNewChan . "Output"]
- aChanLogs[sNewChan]:="Joined Channel`r`n"
- GuiControl,,%sNewChan%Output,% aChanLogs[sNewChan]
- }
- GuiSize:
- if ErrorLevel=1
- return
- if A_GuiHeight
- global GUIH:=A_GuiHeight
- if A_GuiWidth
- global GUIW:=A_GuiWidth
- nTabControlH:=GUIH-25
- nIRCOutputH:=nTabControlH-25
- nInputW:=GUIW-25
- for nTabNum,sTabName in aTabs
- {
- nTabX:=(nTabNum-1)*50
- GuiControl,Move,%sTabName%,X%nTabX% Y0 W50 H25
- }
- nTabX:=aTabs.MaxIndex()*50
- GuiControl,Move,AddTab,X%nTabX% Y0 W25 H25
- for sTabName,aTabElems in aTabElements
- GuiControl,Move,% aTabElems[1],X0 Y25 W%GUIW% H%nIRCOutputH%
- GuiControl,Move,IRCInput,X0 Y%nTabControlH% W%nInputW% H25
- GuiControl,Move,SubmitIRC,X%nInputW% Y%nTabControlH% W25 H25
- global hEdit
- sendmessage, 0x115, 7, 0,, ahk_id %hEdit%
- Return
- GuiClose:
- ExitApp
- Return
- SendIRC:
- global aChanLogs,sCurTab,aTabs
- Gui,Submit,NoHide
- if (sCurTab=aTabs[1]) or (RegExMatch(IRCInput,"^/")>0)
- {
- IRCInput:=RegExReplace(IRCInput,"^/","")
- AHKSend(IRCInput)
- }
- else if (StrLen(aChanLogs[sCurTab])>0)
- {
- AHKSend("PRIVMSG #" . sCurTab . " :" . IRCInput)
- }
- GuiControl,,IRCInput,
- Return
- AHKSend(sMsg)
- {
- global iSock
- sMsg:=RegExReplace(sMsg,"^(.+)`r?`n?$","$1`r`n")
- nDataLen:=strlen(sMsg)
- VarSetCapacity(sData,nDataLen)
- StrPut(sMsg,&sData,"UTF-8")
- if (i:=AHKsock_Send(iSock,&sData,nDataLen))<0
- msgbox,% "ERROR " . i
- global sOutput:=sOutput . "SENT """ . StrGet(&sData,nDataLen,"UTF-8") . """`r`n"
- GuiControl,,IRCOutput,% sOutput
- if (RegExMatch(sMsg,"i)^PRIVMSG #.+ :.+`r?`n?")>0)
- {
- global Nick,aChanLogs
- sChan:=RegExReplace(sMsg,"i)^PRIVMSG #(.+) :.*`r?`n?$","$1")
- sMessage:=RegExReplace(sMsg,"i)^PRIVMSG #.+ :(.*)`r?`n?$","$1")
- aChanLogs[sChan]:=aChanLogs[sChan] . "<" . Nick . "> " . sMessage . "`r`n"
- GuiControl,,%sChan%Output,% aChanLogs[sChan]
- ;msgbox,% "<" . Nick . "> " . sMessage . "`r`n"
- }
- global hEdit
- sendmessage, 0x115, 7, 0,, ahk_id %hEdit%
- return i
- }
Advertisement
Add Comment
Please, Sign In to add comment