... und vielleicht mit Opera arbeiten(möchten) sei ans Herz gelegt das der integrierte IRC-Client sehr gut funtktioniert.Für IRC-Muffel, die sich nicht trauen einen IRC Clienten zu laden...
Offizieller PureBasic Discord Server/IRC-Channel
Bin soeben neu in IRC eingesteiegen (mit Nettalk). Was muss ich jetzt machen, um mit euch online um die Wette zu programmieren?
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Beispiel aus dem Englishen Forum:
Code: Alles auswählen
InitNetwork()
Global ConnectionID.l
NewList RecText.s()
Procedure IRCConnect(Server.s, Port.l)
Connection = OpenNetworkConnection(Server, Port)
If Connection <> 0
ConnectionID = Connection
EndIf
ProcedureReturn Connection
EndProcedure
Procedure IRCUseConnection(Connection)
ConnectionID = Connection
EndProcedure
Procedure IRCLogin(Server.s, Name.s, Pass.s)
SendNetworkString(ConnectionID,"USER "+ReplaceString(Name, " ", "_")+" localhost "+Server+" http://www.bradan.net/"+Chr(13)+Chr(10))
SendNetworkString(ConnectionID,"NICK "+ReplaceString(Name, " ", "_")+Chr(13)+Chr(10))
If Pass <> ""
SendNetworkString(ConnectionID,"PRIVMSG NickServ :IDENTIFY "+Pass+Chr(13)+Chr(10))
EndIf
EndProcedure
Procedure IRCChangeNick(Name.s)
SendNetworkString(ConnectionID,"NICK "+ReplaceString(Name, " ", "_")+Chr(13)+Chr(10))
EndProcedure
Procedure IRCJoin(Channel.s, Server.s)
SendNetworkString(ConnectionID,"JOIN "+Channel+Chr(13)+Chr(10))
EndProcedure
Procedure IRCLeave(Channel.s)
SendNetworkString(ConnectionID,"PART "+Channel+Chr(13)+Chr(10))
EndProcedure
Procedure IRCSendText(Channel.s, Text.s)
SendNetworkString(ConnectionID,"PRIVMSG "+Channel+" :"+Text+Chr(13)+Chr(10))
EndProcedure
Procedure IRCSend(Text.s)
SendNetworkString(ConnectionID,Text+Chr(13)+Chr(10))
EndProcedure
Procedure.s IRCGetFrom(Str.s)
Start = FindString(Str.s, ":", 0)+1
Stop = FindString(Str.s, "!~", Start)
ProcedureReturn Mid(Str.s, Start, Stop-Start)
EndProcedure
Procedure.s IRCGetTo(Str.s)
Start = FindString(Str.s, "PRIVMSG", 2)+Len("PRIVMSG")+1
Stop = FindString(Str.s, ":", Start)-1
ProcedureReturn Mid(Str.s, Start, Stop-Start)
EndProcedure
Procedure.s IRCGetPingMsg(Str.s)
Start = FindString(Str.s, ":", 0)+1
Stop = Len(Str.s)+1
ProcedureReturn Mid(Str.s, Start, Stop-Start)
EndProcedure
Procedure.s IRCGetLine()
If NetworkClientEvent(ConnectionID) = 2
LastElement(RecText())
*Buffer = AllocateMemory(1024)
ReceiveNetworkData(ConnectionID, *Buffer, 1024)
txt.s = PeekS(*Buffer)
FreeMemory(*Buffer)
ReplaceString(txt, Chr(13), Chr(10))
ReplaceString(txt, Chr(10)+Chr(10), Chr(10))
For k=1 To CountString(txt, Chr(10))
Line.s = RemoveString(RemoveString(StringField(txt, k, Chr(10)), Chr(10)), Chr(13))
If Line <> ""
If FindString(UCase(Line), "PING", 0) Or FindString(UCase(Line), "VERSION", 0)
SendNetworkString(ConnectionID,ReplaceString(Line,"PING :", "PONG :",0)+Chr(13)+Chr(10))
Else
AddElement(RecText())
RecText() = Line.s
EndIf
EndIf
Next
EndIf
If CountList(RecText()) > 0
FirstElement(RecText())
txt.s = RecText()
DeleteElement(RecText())
ProcedureReturn txt
EndIf
EndProcedure
Procedure.s IRCGetText(Str.s)
Start = FindString(Str.s, ":", FindString(Str.s, "PRIVMSG", 2)+Len("PRIVMSG"))
ProcedureReturn Right(Str, Len(Str)-Start)
EndProcedure
Procedure.f IRCPing(Server.s, Timeout)
*Buffer = AllocateMemory(1024)
SendNetworkString(ConnectionID,"PING "+Server+Chr(13)+Chr(10))
Time = ElapsedMilliseconds()
While NetworkClientEvent(ConnectionID) <> 2 : Delay(1) : If ElapsedMilliseconds()-Time > Timeout : Break : EndIf : Wend
If ElapsedMilliseconds()-Time <= Timeout
T = ElapsedMilliseconds()-Time
ReceiveNetworkData(ConnectionID, *Buffer, 1024)
FreeMemory(*Buffer)
ProcedureReturn T/1000
Else
ProcedureReturn -1
EndIf
EndProcedure
Procedure IRCDisconnect(Msg.s) ;Closes the current connection
SendNetworkString(ConnectionID,"QUIT "+Msg.s+Chr(13)+Chr(10))
CloseNetworkConnection(ConnectionID)
EndProcedure
Procedure.s IRCEnumNames(Channel.s) ;Enumerates all names in the channel
SendNetworkString(ConnectionID,"NAMES "+Channel+Chr(13)+Chr(10))
*Buffer = AllocateMemory(1024)
While NetworkClientEvent(ConnectionID) <> 2 : Delay(1) : Wend
ReceiveNetworkData(ConnectionID, *Buffer, 1024)
txt.s = PeekS(*Buffer)
FreeMemory(*Buffer)
Start = FindString(txt, Channel.s, 0)+Len(Channel.s)+2
Stop = FindString(txt, Chr(10), 0)
ProcedureReturn Mid(txt.s, Start, Stop-Start)
EndProcedure
;Example
Procedure ResizeWin()
ResizeGadget(1, 10, WindowHeight()-30, WindowWidth()-20, 20)
ResizeGadget(0, 10, 10, WindowWidth()-170, WindowHeight()-50)
ResizeGadget(2, WindowWidth()-160, 10, 150, WindowHeight()-50)
EndProcedure
Channel.s = "##PureBasic.de"
Server.s = "irc.freenode.com" ;
Nick.s = InputRequester("Nickname", "Give me your Nickname:", "Gast")
;Create the GUI
If OpenWindow(0, 216, 0, 900, 600, #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_TitleBar, "IRC Example "+Channel)
If CreateGadgetList(WindowID())
StringGadget(1, 10*2, 270*2, 430*2, 20*2, "", #PB_String_MultiLine) ;The Input
ListViewGadget(0, 10*2, 10*2, 280*2, 250*2) ;Messages
ListViewGadget(2, 290*2, 10*2, 150*2, 250*2) ;Names
EndIf
EndIf
IRCConnect(Server.s, 6667)
IRCLogin(Server.s, Nick.s, "")
IRCJoin(Channel.s, Server.s)
Repeat
Line.s = IRCGetLine() ;Get a messageline
If Line <> ""
If IRCGetFrom(Line) <> ""
ClearGadgetItemList(2)
Names.s = IRCEnumNames(Channel.s)
Login = 1
For k=1 To CountString(Names, " ") ;List the Names
Cur.s = StringField(Names, k, " ")
If Len(Cur) > 1
AddGadgetItem(2, -1, Cur)
EndIf
Next
If UCase(IRCGetTo(Line)) <> UCase(Channel.s)
AddGadgetItem(0, -1, "<"+IRCGetFrom(Line)+" To "+IRCGetTo(Line)+"> "+IRCGetText(Line))
Else
AddGadgetItem(0, -1, "<"+IRCGetFrom(Line)+"> "+IRCGetText(Line))
EndIf
Else
AddGadgetItem(0, -1, Line)
EndIf
SetGadgetState(0, CountGadgetItems(0)-1)
Else
If Login = 1 And ElapsedMilliseconds()-LastPing > 15000
Ping.f = IRCPing(Server.s, 5000)
SetWindowTitle(0, "IRC Example "+Channel+" Ping: "+StrF(Ping, 2))
LastPing = ElapsedMilliseconds()
EndIf
EndIf
Event = WindowEvent()
Select Event
Case 0
Delay(20)
Case #PB_Event_SizeWindow
ResizeWin()
Case #PB_Event_Gadget
Select EventGadgetID()
Case 2
If EventType() = #PB_EventType_LeftDoubleClick
Msg.s = GetGadgetItemText(2, GetGadgetState(2), 0)
If Left(Msg, 1) = "@"
Msg = Right(Msg, Len(Msg)-1)
EndIf
SetGadgetText(1, GetGadgetText(1)+"/msg "+Msg+" ")
ActivateGadget(1)
EndIf
Case 1
If EventType() = #PB_EventType_ReturnKey And GetGadgetText(1) <> ""
If Left(GetGadgetText(1), 1) = "/"
AllParams.s = Right(GetGadgetText(1), Len(GetGadgetText(1))-FindString(GetGadgetText(1), " ", 0))
Param1.s = StringField(GetGadgetText(1), 2, " ")
Param2.s = Right(AllParams.s, Len(AllParams.s)-FindString(AllParams.s, " ", 1))
Select LCase(StringField(GetGadgetText(1), 1, " "))
Case "/msg"
IRCSendText(Param1, Param2)
AddGadgetItem(0, -1, "<"+Nick+" To "+Param1+"> "+Param2)
Case "/join"
IRCJoin(Param1, Server)
Default
IRCSend(Right(GetGadgetText(1), Len(GetGadgetText(1))-1))
AddGadgetItem(0, -1, "<"+Nick+"> "+AllParams.s)
EndSelect
Else
IRCSendText(Channel.s, GetGadgetText(1))
AddGadgetItem(0, -1, "<"+Nick+"> "+GetGadgetText(1))
EndIf
SetGadgetText(1, "")
SetGadgetState(0, CountGadgetItems(0)-1)
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
IRCDisconnect("Bye")
End
Gibts eigentlich sowas wie ein Browser IRC-Chat , der nur über den normalen Browser läuft und somit ne firewall umgehen kann ?
Also nich irgendeinen Port 6667 benötigt, sonder fein über Port 80 abwickelt.
Evtl. so ne Art Proxy-IRC .
Wenn net, muss ich mir was einfallen lassen......
(sitz grad hinter einer )
Also nich irgendeinen Port 6667 benötigt, sonder fein über Port 80 abwickelt.
Evtl. so ne Art Proxy-IRC .
Wenn net, muss ich mir was einfallen lassen......
(sitz grad hinter einer )
Rings hat geschrieben:ziert sich nich beim zitieren
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Hmm... hab mir auch schon überlegt sowas zu machen, nur da machen halt auch die meisten Provider nicht mit(Meiner [der von PureArea.Net] eingeschlossen). Aber über Google lässt sich vielleicht etwas finden.Rings hat geschrieben:Gibts eigentlich sowas wie ein Browser IRC-Chat , der nur über den normalen Browser läuft und somit ne firewall umgehen kann ?
Also nich irgendeinen Port 6667 benötigt, sonder fein über Port 80 abwickelt.
Evtl. so ne Art Proxy-IRC .
Wenn net, muss ich mir was einfallen lassen......
(sitz grad hinter einer )
@Macros: Das ist meiner.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Tjo damals wusste ich sowas nicht. Wie soll ich es jetzt ausbessern? Alle meine Posts durchsuchen und bearbeiten? Nee, zuviel, zu anstrengend.Kaeru Gaman hat geschrieben:empfehlenswert wäre es da auch,
dass der programmierer 2-4 kommentarzeilen mit u.a.
seinem nickname an den anfang des programms setzt.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.