Seite 2 von 4

Verfasst: 10.03.2006 14:21
von Moskito
Für IRC-Muffel, die sich nicht trauen einen IRC Clienten zu laden...
... und vielleicht mit Opera arbeiten(möchten) sei ans Herz gelegt das der integrierte IRC-Client sehr gut funtktioniert.

Verfasst: 19.03.2006 01:17
von AND51
Bin soeben neu in IRC eingesteiegen (mit Nettalk). Was muss ich jetzt machen, um mit euch online um die Wette zu programmieren?

Verfasst: 19.03.2006 01:45
von Deeem2031
Zum server irc.freenode.com connecten und ##purebasic.de joinen, steht doch alles im 1. post.

Verfasst: 19.03.2006 02:08
von Macros
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

Verfasst: 05.09.2006 13:17
von Rings
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 :) )

Verfasst: 05.09.2006 13:20
von DarkDragon
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 :) )
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.

@Macros: Das ist meiner. ;-)

Verfasst: 05.09.2006 14:03
von Macros
Hab nichts anderes behauptet ^^

Verfasst: 05.09.2006 14:08
von bluejoke
LEUTE: Namen des Autors hinzufügen, wenn available. Ok, vielleicht hat man sich das mal abgespeichert und den Namen vergessen, aber in dieses Mal war das doch nicht der Fall. Das gehört sich nunmal einfach!

Verfasst: 05.09.2006 14:52
von Kaeru Gaman
empfehlenswert wäre es da auch,
dass der programmierer 2-4 kommentarzeilen mit u.a.
seinem nickname an den anfang des programms setzt.

Verfasst: 05.09.2006 15:06
von DarkDragon
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.
Tjo damals wusste ich sowas nicht. Wie soll ich es jetzt ausbessern? Alle meine Posts durchsuchen und bearbeiten? Nee, zuviel, zu anstrengend.