Seite 1 von 1

twitch.tv Chat-Bot (IRC)

Verfasst: 25.08.2018 10:36
von Mijikai
Ich versuche einen Chat-Bot für twitch.tv zu programmieren.
Twitch nutzt IRC-Server für die Abwicklung des Chats.
Leider scheitere ich schon beim Login.

Hier mein Testcode:

Code: Alles auswählen

#BOT_NICK = "xyz"
#BOT_PASS = "oauth:xyz"
#BOT_CHANNEL = "xyz"

Global Handle.i
Global Event.i
Global Exit.i
Global Dim Packet.b(65536)
Global PacketSize.i

Procedure.i botConnect()
  ProcedureReturn OpenNetworkConnection("irc.chat.twitch.tv",6667,#PB_Network_TCP)
EndProcedure

Procedure.i botAuth(Nick.s,Pass.s,Chan.s)
  SendNetworkString(Handle,"PASS " + Pass + Chr(13) + Chr(10))
  SendNetworkString(Handle,"NICK " + Nick + Chr(13) + Chr(10))
  SendNetworkString(Handle,"USER " + Nick + " 0 * " + Nick + Chr(13) + Chr(10))
  SendNetworkString(Handle,"JOIN #" + Chan + Chr(13) + Chr(10))
EndProcedure

If InitNetwork()
  Handle = botConnect()
  If Handle
    botAuth(#BOT_NICK,#BOT_PASS,#BOT_CHANNEL)
    Repeat
      Event = NetworkClientEvent(Handle)
      Select Event
        Case #PB_NetworkEvent_Data
          PacketSize = ReceiveNetworkData(Handle,@Packet,65536)
          Debug PeekS(@Packet,PacketSize,#PB_UTF8|#PB_ByteLength)
        Case #PB_NetworkEvent_Disconnect
          Exit = #True
      EndSelect      
    Until Exit
    CloseNetworkConnection(Handle)
  EndIf
EndIf
Hat jemand eine Idee wo mein Fehler liegt?

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 25.08.2018 14:50
von mk-soft
Fehlt der gesamte Handshake (Network Eventloop).

ReceiveNetworkData(...) wartet nicht das Daten empfangen sind...

Schau dir erst mal die Beispiele von Purebasic an...

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 25.08.2018 16:38
von Mijikai
mk-soft hat geschrieben:Fehlt der gesamte Handshake (Network Eventloop).

ReceiveNetworkData(...) wartet nicht das Daten empfangen sind...

Schau dir erst mal die Beispiele von Purebasic an...
Hab meinen ersten Code/Post angepasst jedoch ohne Erfolg.

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 25.08.2018 18:27
von Sicro
Unter Linux funktioniert der Code nicht mit einem Byte-Array-Buffer, sondern nur mit einem "echtem" alloziertem Memory:

Code: Alles auswählen

...
Global *Packet = AllocateMemory(65536)
...
PacketSize = ReceiveNetworkData(Handle,*Packet,MemorySize(*Packet))
...
So angepasst, erhalte ich schon mal die Rückmeldung:
:tmi.twitch.tv NOTICE * :Login authentication failed
Weiter testen kann ich nicht, weil ich kein IRC-Account habe.

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 26.08.2018 11:05
von HeX0R
Sicro hat geschrieben:Unter Linux funktioniert der Code nicht mit einem Byte-Array-Buffer, sondern nur mit einem "echtem" alloziertem Memory
Ich denke nicht, dass das an Linux liegt, ein simples "EnableExplicit" hätte den Fehler auch aufgezeigt.

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 26.08.2018 17:51
von Sicro
HeX0R hat geschrieben:Ich denke nicht, dass das an Linux liegt, ein simples "EnableExplicit" hätte den Fehler auch aufgezeigt.
Ja, richtig, der Fehler liegt wo anders.
Die anderen Betriebssysteme habe ich nicht ausgeschlossen, getestet habe ich allerdings nur unter Linux.
Hat mich schon irgendwie gewundert, weil eigentlich funktionieren auch Byte-Arrays sehr oft.
Es ist ein fieser Fehler. Wiedermal ein gutes Beispiel, das zeigt, wie wichtig der Befehl "EnableExplicit" ist.
Manchmal denkt man aber nicht dran, diesen einzufügen, wenn man Codes vom Forum testet.

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 27.08.2018 09:26
von Mijikai
Danke für die Hilfe :)
Leider kann ich den Compiler-Fehler nicht wirklich nachvollziehen.

-> Variables needs to be declared!

Im Code:

Code: Alles auswählen

Global Dim Packet.b(65536)
Wie ist das gemeint?

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 27.08.2018 10:19
von #NULL
Es fehlen die Klammern: @Packet()

Re: twitch.tv Chat-Bot (IRC)

Verfasst: 27.08.2018 12:05
von Mijikai
#NULL hat geschrieben:Es fehlen die Klammern: @Packet()
Danke jetzt funktioniert es.
Vergesse ich normalerweise nicht :oops: