Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 04:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Twitch like Chat mit Emotes

Discussion on Twitch like Chat mit Emotes within the Web Development forum part of the Coders Den category.

Closed Thread
 
Old 10/20/2016, 11:48   #16
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Danke nochmal für deine Hilfe

PHP Code:
$e $pdo->prepare("SELECT * FROM emotes");
            
$e->execute();
            
$stmt $pdo->prepare("SELECT * FROM chat_en ORDER BY time DESC LIMIT 30");
            
$stmt->execute();
            
$msg = array();
            
$row  $e->fetchAll(PDO::FETCH_ASSOC);
            
$emotes = [];
            foreach(
$row as $emo) {
                
$emotes[$emo['name']] = $emo['link'];
            }
            for (
$x 0$x <= 29$x++) {
            
$result $stmt->fetch(PDO::FETCH_ASSOC);
                foreach (
$emotes as $key => $value) {
                    
$message str_ireplace($key$value$result['message']);
                }
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            }

            echo 
json_encode($msg); 
Ich gehe davon aus, das du meintest das die emote() funktion in der for schleife ausgeführt wurde?
Jetzt, nachdem ich die funktion da rausgenommen habe, auch nur das letzte emote angezeigt... merkwürdig.

Bild:

EDIT:
Mir fällt gerade auf das ich das emote-austauschen ja wieder in die schleife gepackt hab, haha. Nur wie setze ich das dann richtig um?
Egal ob ich While, Foreach oder For nehme, das Ergebnis ist das selbe: Nur das letzte Emote wird angezeigt.

.Barone is offline  
Old 10/20/2016, 13:13   #17
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
Dann weiß ich auch nicht, ich will ungern alles 1:1 nach reproduzieren.
Du könntest auch einfach mit socket.io arbeiten und einen livechat aufbauen, da braucht man keine Datenbank für (was eh viel sexier ist). Bei Twitch ist es glaube ich ja nicht anders, stell dir vor es wird ein Twitchchat-raid gemacht, da rappelt deine Datenbank dann ganz schön.
Oder mit Ajax arbeiten und die neusten Sachen holen und ersetzen.

Denke aber, dass du eigentlich einen guten Grundstein nun hast für dein Problem.
Notfalls einfach überall debuggen und dir ausgeben welche Variablen etc. zu grade hast.
Step by Step var_dump(); oder die($var);
Devsome is offline  
Thanks
1 User
Old 10/20/2016, 13:58   #18
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Quote:
Originally Posted by Devsome View Post
Dann weiß ich auch nicht, ich will ungern alles 1:1 nach reproduzieren.
Du könntest auch einfach mit socket.io arbeiten und einen livechat aufbauen, da braucht man keine Datenbank für (was eh viel sexier ist). Bei Twitch ist es glaube ich ja nicht anders, stell dir vor es wird ein Twitchchat-raid gemacht, da rappelt deine Datenbank dann ganz schön.
Oder mit Ajax arbeiten und die neusten Sachen holen und ersetzen.

Denke aber, dass du eigentlich einen guten Grundstein nun hast für dein Problem.
Notfalls einfach überall debuggen und dir ausgeben welche Variablen etc. zu grade hast.
Step by Step var_dump(); oder die($var);
Jeah, ich kapiere echt nicht was da schief läuft und das ganze jetzt zu debuggen und blah ist mir zu doof.
Der Chat ist ja nicht mit Twitch verbunden sondern ein "standalone" chat, den ich halt auf meiner Webseite nutzen will. Massenweiße Nachrichten werden da nicht verschickt.

Ich hatte schonmal von socket.io gehört und wollte es auch nutzen aber auch nachdem ich mir jetzt nochmal die docs usw durch gelesen habe, glaube ich, das man dafür node.js benötigt sowie das express framework? Kann ich das ganze so überhaupt bei einer normalen Webseite mit php/js einbinden?

Edit:
Ich hab mal socket.io eingebunden, aber es funktioniert nicht wirklich..
indexjs

index html

nodejs "hört" zwar auf port 3000, schreibt aber nix in die console.
laut console vom browser ist alles korrekt geladen und es gibt viele localhost ~ "anfragen?" von socketio
.Barone is offline  
Old 10/20/2016, 20:55   #19


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
Du musst dem Browser auch den Port mitteilen auf dem er zum Socket connecten soll. Und lass dir am besten immer an jeder stelle wo du glaubst das es nicht geht eine Ausgabe von den jeweiligen variablen geben, dann siehst du immer ob und was fehlt.
Mozo_ is offline  
Old 10/21/2016, 11:26   #20
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Nun, ansich gefällt mir socket.io echt super. Aber ich glaube in diesem Falle ists sinnvoller wenn ich den Chat so weiter schreibe, wie ich ihn aktuell habe. Da mir sonst ein paar Funktionen fehlen.
Ich habe eben mit dem Debuggen begonnen.

Ich hab mal das array $emotes ausgegeben:
PHP Code:
array(3) {
  [
"Kappa"]=>
  
string(31"../twig/images/emotes/Kappa.png"
  
["PogChamp"]=>
  
string(34"../twig/images/emotes/PogChamp.png"
  
["OpieOp"]=>
  
string(32"../twig/images/emotes/OpieOP.png"

Die Emotes sind alle im Array drin.

Wenn ich mir den $key ausgeben lasse, ist er nur
PHP Code:
  ["OpieOp"]=>
  
string(32"../twig/images/emotes/OpieOP.png" 
Nun, wenn ich mich jetzt nicht irre, dann liegt es an:

PHP Code:
foreach ($emotes as $key => $value) {
                    
$message str_ireplace($key$value$result['message']);
                } 
genau diesen Zeilen.
.Barone is offline  
Old 10/21/2016, 13:18   #21
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
Mein Array ist auch so aufgebaut.
Code:
foreach ($row as $emote) {
    $arrayEmotes[$emote['name']] = $emote['img'];
}
daher funktioniert die foreach auch
Code:
foreach ($arrayEmotes as $key => $value) {
    $str = str_ireplace($key, $value, $str);
}
Hau doch einfach mal ein echo oder var_dump in die foreach und gebe dir alles aus. Dann wirst du schlauer.
Devsome is offline  
Thanks
1 User
Old 10/21/2016, 13:48   #22
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
var_dump($key);

var_dump($value);

var_dump(message);

Also anscheinend wird das richtig ausgetauscht aber warum zum teufel steht es dann anders im Chat?
.Barone is offline  
Old 10/21/2016, 13:54   #23
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
Also werden rein theoretisch alle Nachrichten richtig ersetzt, wie du anhand var_dump($message); siehst.

Dann liegt es vll wirklich nur daran, wie du die Nachricht in deinen Chat einfügst.
Ohne viel Code können wir leider nicht viel machen.
Habe dir eine Funktionierende Funktion geschrieben
Devsome is offline  
Thanks
1 User
Old 10/21/2016, 14:02   #24
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
PHP Code:
foreach($result as $data){
                foreach (
$emotes as $key => $value) {
                    
$message str_ireplace($key$value$data['message']);
                }

                
$msg[] = array('name' => $data['name'], 'message' => $message);
                echo 
var_dump($msg);
            } 
Wenn ich dann "Kappa" in den chat schreibe, ist es ein String(6) "Kappa"

PHP Code:
 foreach($result as $data){
                foreach (
$emotes as $key => $value) {
                    
$message str_ireplace($key$value$data['message']);
                    echo 
var_dump($message);         
                }
                
$msg[] = array('name' => $data['name'], 'message' => $message);
            } 
Dann ist es string(31) "../twig/images/emotes/Kappa.png"
O.o
Das ganze wird per JS ausgegeben, hatte ich glaube vorher auch schonmal geschrieben? (hoffe ich)

Edit:
So gehts:

Gibt aber dennoch zuviele Nachrichten aus, mehr wie 30.

Ich habe nun eine Lösung für das Problem gefunden.

PHP Code:
   $e $pdo->prepare("SELECT * FROM emotes");
            
$e->execute();
            
$stmt $pdo->prepare("SELECT * FROM chat_en ORDER BY time DESC LIMIT 30");
            
$stmt->execute();
            
$msg = array();
            
$row  $e->fetchAll(PDO::FETCH_ASSOC);
            
$emotes = [];
            foreach(
$row as $emo) {
                
$emotes[$emo['name']] = $emo['link'];
            }
            
$replace = array();
            
$result $stmt->fetchAll(PDO::FETCH_ASSOC);
            foreach (
$emotes as $key => $value) {
                
array_push($replace'<img src="'.$value.'" alt="'.$key.'"  />');
            }
            foreach(
$result as $data){
                
$message str_replace(array_keys($emotes), $replace$data['message']);

                
$msg[] = array('name' => $data['name'], 'message' => $message);

            }
            echo 
json_encode($msg); 
Kann nun geclosed werden.
.Barone is offline  
Old 10/22/2016, 15:26   #25
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
#closed da gelöst
Devsome is offline  
Closed Thread




All times are GMT +2. The time now is 04:27.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.