Code archives/Networking/IRCLib
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| For some reason, there seems to be a lot of strangeness with joining channels. I suggest a Delay(10000) between the initial OpenIRCStream() and JoinChannel(). I'm not sure if the channel parameter in OpenIRCStream works or not. This code is only verified to work on the Freenode network, I don't know why it doesn't seem to work with any other one. | |||||
;Open an IRC stream. Pass the address of the server (i.e. irc.freenode.net), the hostname and nickname of the bot, and a channel to join immediately after connecting.
Function OpenIRC(address$,Hostname$="B+IRCLib",NickName$="",channel$="")
If NickName$="" Then
NickName$=Hostname$
EndIf
;open the stream
stream=OpenTCPStream(Address$,6667)
; if the stream is null, then there's a problem.
If Not stream Then
Return 0
EndIf
;tell the server we want to connect to it and then tell it the channel
WriteLine stream,"USER "+NickName$+" "+Hostname$+" "+Address$+" :"+NickName$
WriteLine stream,"NICK "+NickName$
If channel$ <> "" Then
WriteLine Stream, "JOIN "+channel$
EndIf
GetIRC(stream)
Return stream
End Function
Function JoinIRCChannel(stream,channel$)
WriteLine Stream, "JOIN "+channel$
Delay(1500)
End Function
;Return a string containing all unread data since the last time GetIRC was called. Pass stream to read from.
Function GetIRC$(stream)
Bytes=ReadAvail(Stream)
While Bytes
tLine$=ReadLine$(Stream)
If tline$ <> "" Then Print tline$
AILine$=AIline$+tLine
Bytes=ReadAvail(Stream)
;if we got pinged, pong.
If Left(Trim(Upper(tLine$)),4) = "PING" Then
WriteLine Stream,"PONG "+Mid(Trim(Upper(tLine$)),5)
EndIf
;If tLine$="" Then
; Exit ;if there's no input, just exit the loop.
;EndIf
tLine$=""
Wend
Return AILine$
End Function
Function WriteIRC(out$,stream,channel$)
WriteLine stream, "PRIVMSG "+Channel$+" :"+out$
End Function
Function WriteIRCAction(out$,stream,channel$)
out$=Chr$(001)+"ACTION "+out$+Chr$(001)
WriteLine stream, "PRIVMSG "+Channel$+" :"+out$
End Function
Function GetIRCMessage$(tLine$,channel$,NickName$="")
t=Instr(tLine$,"PRIVMSG "+channel$+" :")
If t=0 Then
t=Instr(tLine$,"PRIVMSG "+NickName$+" :")
Else
t=t+Len("PRIVMSG "+channel$+" :")
EndIf
If t=0 Then
Return ""
Else
t=t+Len("PRIVMSG "+NickName$+" :")
EndIf
ret$=Mid$(tLine$,t,Len(tLine$)-t+1)
For t=1 To Len(tLine$)
chara$=Mid$(tLine$,t,1)
Next
Return ret$
End Function
Function GetIRCNickname$(tLine$)
If Left$(tLine$,1)=":" Then
For t=2 To Len(tLine$)
chara$=Mid$(tLine$,t,1)
If chara$="!" Then
Exit
Else
Nickname$=Nickname$+chara$
EndIf
Next
EndIf
Return(Nickname$)
End Function
Function QuitIRC(stream,message$="")
WriteLine(stream,"QUIT: ")
End Function
Function ExitChannel(stream,channel$)
WriteLine(stream,"PART: "+channel$)
End Function |
Comments
None.
Code Archives Forum