Code archives/BlitzPlus Gui/BlitzPlus Irc Client 0.7 (Update)
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
/join [your channel] [enter] go go go with Chat!!! New Features: - You can more Channels than one in extra Windows. - You can open a extra Query Window with /Query [Nickname]. - Rejoin when you was kicked. - Autojoin - ... cu, ShadowTurtle | |||||
Global Server$, Port, NickName$, AutoJoin$ Global Network, NetWin, NetMsg Global TextOutPut$ = "´ %NAME% ` %TEXT%" Type Query Field Name$ Field Window Field MsgBox Field InpBox Field InpBut End Type Type Channel Field Name$ Field Window Field MsgBox Field InpBox Field InpBut Field UseBox End Type Type User Field Name$ Field DeleteNow Field Channel.Channel End Type Input_Infos() Start_Network() Function Input_Infos() wW = 250 : wH = 200 Win = CreateWindow("BlitzPlus Irc 0.6", ClientWidth(Desktop())/2-wW/2, ClientHeight(Desktop())/2-wH/2, wW, wH, 0, 1) InputA = CreateTextField(60, 12+ToDown, wW-70, 20, Win) : SetGadgetText InputA, "irc.blitzed.org" CreateLabel("Server :", 15, 15+ToDown, 45, 20, Win, 0) : ToDown = ToDown + 25 InputB = CreateTextField(60, 12+ToDown, wW-70, 20, Win) : SetGadgetText InputB, "6667" CreateLabel("Port :", 15, 15+ToDown, 45, 20, Win, 0) : ToDown = ToDown + 35 InputC = CreateTextField(60, 12+ToDown, wW-70, 20, Win) : SetGadgetText InputC, "BlitzBasicUser" CreateLabel("Name :", 15, 15+ToDown, 45, 20, Win, 0) : ToDown = ToDown + 25 InputD = CreateTextField(60, 12+ToDown, wW-70, 20, Win) : SetGadgetText InputD, "#Project" CreateLabel("Autojoin :", 15, 15+ToDown, 45, 20, Win, 0) : ToDown = ToDown + 25 ButtonA = CreateButton("Connect", 15, 15+ToDown, wW-25, 20, Win) : ToDown = ToDown + 25 ButtonB = CreateButton("Close", 15, 15+ToDown, wW-25, 20, Win) While 1 tmp = WaitEvent() If EventSource() = ButtonA Then Server$ = TextFieldText(InputA) Port = TextFieldText(InputB) NickName$ = TextFieldText(InputC) AutoJoin$ = TextFieldText(InputD) FreeGadget Win Return End If If EventSource() = ButtonB Then End Wend End Function Function Start_Network() wW = 400 : wH = 575 : iH = 20 : bW = 40 NetWin = CreateWindow("BlitzPlus Irc - ["+Server$+"]", ClientWidth(Desktop())/5-wW/2, ClientHeight(Desktop())/2-wH/2, wW, wH, 0, 1) NetMsg = CreateTextArea(-1, 0, wW-3, wH-28-iH, NetWin) NetInput = CreateTextField(0, wH-26-iH, wW-6-bW, iH, NetWin) NetButInput = CreateButton("Send", wW-6-bW, wH-26-iH, bW, iH, NetWin) AddTextAreaText NetMsg, "Connection to '"+Server$+"' Server ..." + Chr$(10) Network = OpenTCPStream(Server$, Port) If OpenIRCSession(Network) Then AddTextAreaText NetMsg, "Connection is Ready." + Chr$(10) + Chr$(10) Else AddTextAreaText NetMsg, "Connection to '"+Server$+"' Server is Abordet." + Chr$(10) RuntimeError "Connection to '"+Server$+"' Server is Abordet." + Chr$(10) End If If AutoJoin$<>"" Then JoinChannel(AutoJoin$) NetClient = 1 While NetClient If Network Bytes=ReadAvail(Network) While Bytes Irc_Read ReadLine(Network) Bytes=ReadAvail(Network) Wend End If tmp = WaitEvent(2) tmpB = EventID() If Network For Query.Query = Each Query If tmpB = $401 Then If EventSource() = Query\InpBut Or (EventData() = 13 And EventSource()=Query\InpBox) Then TheText$ = TextFieldText(Query\InpBox) If Not TheText$ = "" Then If Not EnterBef(TheText$) Then WriteLine Network, "PRIVMSG " + Query\Name$ + " :" + TheText$ AddTextAreaText Query\MsgBox, MO$(NickName$, TheText$) + Chr$(10) End If SetGadgetText Query\InpBox, "" End If End If ElseIf tmpB = $803 If EventSource() = Query\Window Then FreeGadget Query\Window Delete Query End If End If Next For Channel.Channel = Each Channel If tmpB = $401 Then If EventSource() = Channel\InpBut Or (EventData() = 13 And EventSource()=Channel\InpBox) Then TheText$ = TextFieldText(Channel\InpBox) If Not TheText$ = "" Then If Not EnterBef(TheText$) Then WriteLine Network, "PRIVMSG " + Channel\Name$ + " :" + TheText$ AddTextAreaText Channel\MsgBox, MO$(NickName$, TheText$) + Chr$(10) End If SetGadgetText Channel\InpBox, "" End If End If ElseIf tmpB = $803 Then If EventSource() = Channel\Window Then WriteLine Network, "PART " + Channel\Name$ For User.User = Each User If User\Channel = Channel Then Delete User End If Next FreeGadget Channel\Window Delete Channel End If End If Next End If If tmpB = $803 Then If EventSource() = NetWin Then End ElseIf tmpB = $401 Then If EventSource() = NetButInput Or (EventData() = 13 And EventSource()=NetInput) Then TheText$ = TextFieldText(NetInput) If Not TheText$ = "" Then tp$ = Lower(Trim(TheText$)) EnterBef(tp$) SetGadgetText NetInput, "" End If End If End If Wend End Function Function EnterBef(tp$, tna$ = "") If Lower(Mid(tp$,1,5)) = "/join" Then JoinChannel(Mid(Trim(tp$),7)) Return 1 ElseIf Lower(Mid(tp$,1,4)) = "/msg" Then jj$ = Trim(tp$) toyou$ = GetPar(jj$, 0) thetxt$ = Mid$(jj$,7+Len(toyou$)) WriteLine Network, "PRIVMSG " + toyou$ + " :" + thetxt$ For Channel.Channel = Each Channel If Lower(Channel\Name$) = Lower(toyou$) Then AddTextAreaText Channel\MsgBox, MO$(NickName$, thetxt$) + Chr$(10) End If Next For User.User = Each User If Lower(NS$(User\Name$)) = Lower(NS$(toyou$)) Then Query.Query = OpenQuery(toyou) AddTextAreaText Query\MsgBox, MO(Query\Name$, thetxt$) + Chr$(10) End If Next Return 1 ElseIf Lower(Mid(tp$,1,6)) = "/query" Then jj$ = Trim(tp$) toyou$ = GetPar(jj$, 0) Query.Query = OpenQuery(toyou) Else Return 0 End If End Function ; Here comes the another Functions Function MO$(TheName$, TheText$) Return Replace(Replace(TextOutPut$, "%TEXT%", TheText$), "%NAME%", TheName$) End Function Function JoinChannel(ChanName$) wW = 400 : wH = 375 : iH = 20 : bW = 40 : lbG = 120 Channel.Channel = New Channel Channel\Name$ = ChanName$ Channel\Window = CreateWindow("["+Server$+"] :: " + ChanName$, ClientWidth(Desktop())/4-wW/2+fA, ClientHeight(Desktop())/2-wH/2, wW, wH, NetWin, 1) Channel\MsgBox = CreateTextArea(-1, 0, wW-6-lbG, wH-28-iH, Channel\Window) Channel\InpBox = CreateTextField(0, wH-26-iH, wW-6-bW, iH, Channel\Window) Channel\InpBut = CreateButton("Send", wW-6-bW, wH-26-iH, bW, iH, Channel\Window) Channel\UseBox = CreateListBox(wW-6-lbG, 0, lbG, wH-28-iH, Channel\Window) WriteLine Network, "JOIN " + Channel\Name$ ; AddTextAreaText Query\MsgBox, "` "+Query\Name$+" ´ " + GetContext$(tLine$) + Chr$(10) ; tmps=1 End Function Function Irc_Read(tLine$) TheText$ = GetPar(tLine$, 0) If TheText$ = "NOTICE" Then AddTextAreaText NetMsg, "Notice from " + GetFromNick$(tLine$) + " :: " + GetContext$(tLine$) + Chr$(10) ElseIf TheText$ = "PRIVMSG" Then j$ = GetPar(tLine$, 1) If Lower(j$) = Lower(NickName$) Then tmps = 0 For Query.Query = Each Query If Lower(NS$(Query\Name$)) = Lower(NS$(GetFromNick$(tLine$))) Then AddTextAreaText Query\MsgBox, MO(Query\Name$, GetContext$(tLine$)) + Chr$(10) tmps = tmps + 1 End If fA = fA + 10 Next If tmps=0 Then Query.Query = OpenQuery(GetFromNick$(tLine$)) AddTextAreaText Query\MsgBox, MO(Query\Name$, GetContext$(tLine$)) + Chr$(10) tmps=1 End If Else For Channel.Channel = Each Channel If Channel\Name$ = j$ Then AddTextAreaText Channel\MsgBox, MO(GetFromNick$(tLine$), GetContext$(tLine$)) + Chr$(10) End If Next End If ElseIf TheText$ = "353" Then j$ = GetPar(tLine$, 3) For Channel.Channel = Each Channel If Channel\Name$ = j$ Then For User.User = Each User If User\Channel = Channel Then Delete User End If Next list$=GetPar(tLine$,1,":") Repeat newname$=GetPar(list$,n) If newname$<>lastname$ And newname$<>"" Then User.User = New User User\Name$ = newname$ User\Channel = Channel Else Exit End If n=n+1 : lastname$=newname$ Forever ActualUserList(Channel) End If Next ElseIf TheText$ = "PART" Then ch$ = Lower(GetPar(tLine$,2)) For User.User = Each User If Lower(User\Channel\Name$) = ch$ And NS(User\Name$) = NS(GetFromNick(tLine$)) Then AddTextAreaText User\Channel\MsgBox, GetFromNick(tLine$) + " has Left " + ch$ + "." + Chr(10) User\DeleteNow = 1 ActualUserList(User\Channel) Delete User End If Next ElseIf TheText$ = "JOIN" Then Nick$ = GetFromNick(tLine$) TheCha$ = GetPar(tLine$,2,":") For Channel.Channel = Each Channel If Lower(Replace(Channel\Name$,"#","")) = Lower(Replace(TheCha$,"#","")) Then If Nick$ = NickName$ Then AddTextAreaText Channel\MsgBox, "You has joined " + TheCha$ + "." + Chr(10) Else AddTextAreaText Channel\MsgBox, Nick$ + " has joined " + TheCha$ + "." + Chr(10) End If User.User = New User User\Name$ = Nick$ User\Channel = Channel ActualUserList(Channel) End If Next ElseIf TheText$ = "NICK" Then OldNick$ = GetFromNick(tLine$) NewNick$ = GetPar(tLine$,2,":") For User.User = Each User If User\Name$ = OldNick$ Then AddTextAreaText User\Channel\MsgBox, OldNick$ + " is now as " + NewNick$ + "." + Chr(10) User\Name$ = NewNick$ ActualUserList(User\Channel) End If Next For Query.Query = Each Query If Query\Name$ = OldNick$ Then Query\Name$ = NewNick$ SetGadgetText Query\Window, "["+Server$+"] :: Query with " + Query\Name$ End If Next ElseIf TheText$ = "KICK" Then ANick$ = GetPar(tLine$, 2) BNick$ = GetFromNick(tLine$) Chan$ = GetPar(tLine$, 1) For Channel.Channel = Each Channel If Channel\Name$ = Chan$ Then If ANick$ = NickName$ Then AddTextAreaText Channel\MsgBox, "You was kicked by " + BNick$ + Chr$(10) AddTextAreaText Channel\MsgBox, "You rejoin now ..." + Chr$(10) WriteLine Network, "JOIN " + Chan$ Else AddTextAreaText Channel\MsgBox, ANick$ + " was kicked by " + BNick$ + Chr$(10) End If End If Next ElseIf TheText$ = "MODE" Then Chan$ = GetPar(tLine$, 1) Nick$ = GetFromNick(tLine$) Art$ = GetPar(tLine$, 2) Where$ = GetPar(tLine$, 3) For Channel.Channel = Each Channel If Channel\Name$ = Chan$ Then AddTextAreaText Channel\MsgBox, Nick$ + " sets Mode: " + Art$ + " " + Where$ + Chr$(10) End If Next ElseIf TheText$ = "TOPIC" Then Nick$ = GetFromNick(tLine$) Chan$ = GetPar(tLine$,1) topic$ = GetContext(tLine$) For Channel.Channel = Each Channel If Channel\Name$ = Chan$ Then AddTextAreaText Channel\MsgBox, Nick$ + " changes Topic to '"+topic$+"'" + Chr$(10) End If Next ; RuntimeError Chan$ ElseIf "401" Then ; AddTextAreaText NetMsg, "AddError[401]: No such nick/channel." + Chr$(10) ElseIf "402" Then AddTextAreaText NetMsg, "AddError[402]: No such server." + Chr$(10) ElseIf "403" Then AddTextAreaText NetMsg, "AddError[403]: No such channel." + Chr$(10) ElseIf "403" Then AddTextAreaText NetMsg, "AddError[403]: No such channel." + Chr$(10) ElseIf "404" Then AddTextAreaText NetMsg, "Error[404]: Cannot send to channel." ElseIf "405" Then AddTextAreaText NetMsg, "Error[405]: You cannot join anymore channels." ElseIf "406" Then AddTextAreaText NetMsg, "Error[406]: There was no such nickname." ElseIf "407" Then AddTextAreaText NetMsg, "Error[407]: Duplicate recipients, no message delivered." ElseIf "409" Then AddTextAreaText NetMsg, "Error[409]: No orgin specified." ElseIf "411" Then AddTextAreaText NetMsg, "Error[411]: No recipient given." ElseIf "412" Then AddTextAreaText NetMsg, "Error[412]: No text to send." ElseIf "413" Then AddTextAreaText NetMsg, "Error[413]: No top level domain specified." ElseIf "414" Then AddTextAreaText NetMsg, "Error[414]: Wildcard in top level domain." ElseIf "421" Then AddTextAreaText NetMsg, "Error[421]: Unknown command." ElseIf "422" Then AddTextAreaText NetMsg, "Error[422]: MOTD file missing." ElseIf "423" Then AddTextAreaText NetMsg, "Error[423]: No addministrative info available." ElseIf "424" Then AddTextAreaText NetMsg, "Error[424]: File error." ElseIf "431" Then AddTextAreaText NetMsg, "Error[431]: No nickname given." ElseIf "432" Then AddTextAreaText NetMsg, "Error[432]: Erroneus nickname." ElseIf "433" Then AddTextAreaText NetMsg, "Error[433]: Nickname already in use." ElseIf "436" Then AddTextAreaText NetMsg, "Error[436]: Nickname Collision KILL" ElseIf "441" Then AddTextAreaText NetMsg, "Error[441]: They aren't on that channel." ElseIf "442" Then AddTextAreaText NetMsg, "Error[442]: You're not on that channel." ElseIf "443" Then AddTextAreaText NetMsg, "Error[443]: User already in that channel." ElseIf "444" Then AddTextAreaText NetMsg, "Error[444]: User not logged on." ElseIf "445" Then AddTextAreaText NetMsg, "Error[445]: SUMMON has been disabled." ElseIf "446" Then AddTextAreaText NetMsg, "Error[446]: USERS has been disabled." ElseIf "451" Then AddTextAreaText NetMsg, "Error[451]: You have not registered." ElseIf "461" Then AddTextAreaText NetMsg, "Error[461]: Not enough parameters." ElseIf "462" Then AddTextAreaText NetMsg, "Error[462]: You may not register." ElseIf "463" Then AddTextAreaText NetMsg, "Error[463]: You're host isn't among privliged." ElseIf "464" Then AddTextAreaText NetMsg, "Error[464]: Password incorecct." ElseIf "465" Then AddTextAreaText NetMsg, "Error[465]: You are banned from this server." ElseIf "467" Then AddTextAreaText NetMsg, "Error[467]: Channel key already set." ElseIf "471" Then AddTextAreaText NetMsg, "Error[471]: Cannot join channel (+l)." ElseIf "472" Then AddTextAreaText NetMsg, "Error[472]: Uknown mode." ElseIf "473" Then AddTextAreaText NetMsg, "Error[473]: Cannot join channel (+i)." ElseIf "474" Then AddTextAreaText NetMsg, "Error[474]: Cannot join channel (+b)." ElseIf "475" Then AddTextAreaText NetMsg, "Error[474]: Cannot join channel (+k)." ElseIf "481" Then AddTextAreaText NetMsg, "Error[481]: Permission denied, you are not an IRC operator." ElseIf "482" Then AddTextAreaText NetMsg, "Error[482]: You're not a channel operator." ElseIf "483" Then AddTextAreaText NetMsg, "Error[483]: You cant kill a server!" ElseIf "491" Then AddTextAreaText NetMsg, "Error[491]: No O-Lines from your host." ElseIf "501" Then AddTextAreaText NetMsg, "Error[501]: Uknown mode flag." ElseIf "502" Then AddTextAreaText NetMsg, "Error[502]: Can't change mode for other users." Else ; AddTextAreaText NetMsg, tLine$ + Chr$(10) End If ; AddTextAreaText NetMsg, tLine$ + Chr$(10) End Function Function OpenQuery.Query(Name$) wW = 400 : wH = 375 : iH = 20 : bW = 40 Query.Query = New Query Query\Name$ = Name$ Query\Window = CreateWindow("["+Server$+"] :: Query with " + Query\Name$, ClientWidth(Desktop())/4-wW/2+fA, ClientHeight(Desktop())/2-wH/2, wW, wH, NetWin, 1) Query\MsgBox = CreateTextArea(-1, 0, wW-3, wH-28-iH, Query\Window) Query\InpBox = CreateTextField(0, wH-26-iH, wW-6-bW, iH, Query\Window) Query\InpBut = CreateButton("Send", wW-6-bW, wH-26-iH, bW, iH, Query\Window) Return Query End Function Function NS$(jj$) Return Replace(Replace(Replace(Replace(jj$, "!", ""), "-", ""), "+", ""), "@", "") End Function Function ActualUserList(Channel.Channel) ClearGadgetItems Channel\UseBox For User.User = Each User If User\Channel = Channel Then If User\DeleteNow = 0 Then AddGadgetItem Channel\UseBox, User\Name$ End If Next ; AddGadgetItem Channel\UseBox, "" ; AddGadgetItem Channel\UseBox, NickName$ End Function Function GetContext$(msg$) Local break1%=Instr(msg,":") Local break2%=Instr(msg,":",break1+1) Return Mid(msg,break2+1) End Function Function GetFromNick$(msg$) Return Mid(msg,Instr(msg,":")+1,(Instr(msg,"!")-Instr(msg,":")-1)) End Function Function GetPar$(msg$,par%=0,bChr$=" ") Local sbreak%=1,ebreak% For i=0 To par If Instr(msg,bChr,sbreak+1) sbreak=Instr(msg,bChr,sbreak+1) Else Exit EndIf Next ebreak=Instr(msg,bChr,sbreak+1) If ebreak Return Mid(msg,sbreak+1,ebreak-sbreak-1) Else Return Mid(msg,sbreak+1) EndIf End Function Function OpenIRCSession(stream,timeout%=2000) Local time=MilliSecs() While Not stream If (MilliSecs()-time)>timeout Return 0 Wend Hostname$ = "BlitzPlus Irc" WriteLine stream,"USER "+NickName$+" "+Hostname$+" "+Server$+" :"+NickName$ WriteLine stream,"NICK "+NickName$ Return Stream End Function |
Comments
None.
Code Archives Forum