Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 12:22

  • 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   #1
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Twitch like Chat mit Emotes

Heyho Epvpler.
Ich schreibe gerade einen Chat für meine Webseite und bin mir gerade unschlüssig wie ich Emotes einbinden soll. Der Chat soll in etwa so funktionieren wie der von Twitch.
Wenn zb diese Nachricht geschrieben wird "Heyho ihr nudeln Kappa",
Dann soll die Nachricht aufgeteilt werden, nach emotes durchsucht und an der richtigen stelle eingebunden werden.

Ich dachte daran einfach die nachricht per explode() zu teilen, mit file_exists() zu checken ob ein bild mit dem Emote-Namen vorhanden ist und dann einfach wieder zusammen zu packen.

Gibts ne bessere Lösung für das ganze?
Die Chat-nachrichten selbst werden in einer Datenbank gespeichert.

Gruß
.Barone is offline  
Old 10/15/2016, 16:11   #2


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Code:
$message = htmlentities(strip_tags($_POST['message']));
Code:
$message = str_replace('Kappa', '<img src="/img/chaticons/kappa.png" alt="Kappa" style="width:25px;height:25px;" />', $message);
RatexIndex is offline  
Thanks
1 User
Old 10/15/2016, 22:26   #3
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
^ Danke. Ich weiß nicht wieso, aber ich denke manchmal zu kompliziert.
Ich stehe hier bei dem ganzen nur vor einem Problem, da ich Twig zuvor noch nie genutzt habe.


Edit: Ich war gestern Abend einfach zu müde!
Funktioniert jetzt alles wunderbar.
Danke.
.Barone is offline  
Old 10/17/2016, 18:18   #4
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Irgendwie scheitere ich gerade wieder.

Ich würde gerne aus der Tabelle "emotes" alle Emotes laden und schauen ob diese in der Nachricht vorkommen, wenn ja, dann sollen diese ersetzt werden.

PHP Code:
  $msg = array();
            
$emotes $pdo->prepare("SELECT * FROM emotes");
            
$emotes->execute();
            
$emote $emotes->fetch(PDO::FETCH_ASSOC);
            while (
$result $stmt->fetch(PDO::FETCH_ASSOC)){
                
$message str_replace($emote['name'], '<img src="'.$emote['link'].'" alt="$emote[name]" style="width:30px;height:30px;" />'$result['message']);
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            } 
Ist der aktuelle Code. Das erste Emote von jeder Nachricht wird ersetzt, sonst keins.

Zudem habe ich das Problem, dass der Chat von oben nach unten geht und nicht von unten nach oben, zb wie bei Twitch und mir da gerade keine Lösung einfällt.
.Barone is offline  
Old 10/18/2016, 03:50   #5
 
lnqlorlouz's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 405
Received Thanks: 84
Quote:
Originally Posted by .Barone View Post
Irgendwie scheitere ich gerade wieder.

Ich würde gerne aus der Tabelle "emotes" alle Emotes laden und schauen ob diese in der Nachricht vorkommen, wenn ja, dann sollen diese ersetzt werden.

PHP Code:
  $msg = array();
            
$emotes $pdo->prepare("SELECT * FROM emotes");
            
$emotes->execute();
            
$emote $emotes->fetch(PDO::FETCH_ASSOC);
            while (
$result $stmt->fetch(PDO::FETCH_ASSOC)){
                
$message str_replace($emote['name'], '<img src="'.$emote['link'].'" alt="$emote[name]" style="width:30px;height:30px;" />'$result['message']);
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            } 
Ist der aktuelle Code. Das erste Emote von jeder Nachricht wird ersetzt, sonst keins.

Zudem habe ich das Problem, dass der Chat von oben nach unten geht und nicht von unten nach oben, zb wie bei Twitch und mir da gerade keine Lösung einfällt.
Wenn du den Chatverlauf ändern möchtest, dann einfach bei deinem sql-Statement "sort by id DESC oder sort by id ASC" einfügen oder wenn du eine Zeit hast, dann die richtige Spalte von der Zeit einfügen. Ich hoffe du benutzt dafür eine auto_increment id-Spalte.
lnqlorlouz is offline  
Old 10/18/2016, 13:47   #6
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Edit:
Die vorherigen Probleme sind gelöst.
Das einzige, was mir noch fehlt, ist das ALLE emotes in der Nachricht ersetzt werden, nicht nur das erste.
PHP Code:
 $stmt $pdo->prepare("SELECT * FROM chat_en ORDER BY time DESC LIMIT 30");
            
$stmt->execute();
            
$msg = array();
            
$emotes $pdo->prepare("SELECT * FROM emotes");
            
$emotes->execute();
            
$emote $emotes->fetch(PDO::FETCH_ASSOC);
            for (
$x 0$x <= 29$x++) {
            
$result $stmt->fetch(PDO::FETCH_ASSOC);
                foreach(
$emote as $emo) {
                    
$message str_replace($emote['name'], '<img src="' $emote['link'] . '" alt="$emote[name]" />'$result['message']);
                }
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            }

            echo 
json_encode($msg); 
.Barone is offline  
Old 10/19/2016, 10:58   #7
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
Du kannst sowas machen.
Nur wird da nicht auf Groß-/Kleinschreibung geachtet.

PHP Code:
<?php

function twitchEmotes$str ) {
  
$emotes = array(
      
'Kappa' => ':Kappa:',
      
'fbm' => ':FeelsBadMan:'
  
);

  return 
str_replacearray_keys$emotes ), array_values$emotes ), $str );
}

$str 'This is just a simple Message Kappa, but it fbm to hear that.';
echo 
twitchEmotes(  $str  );
Devsome is offline  
Old 10/19/2016, 16:01   #8
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Naja, im Grunde wäre es ja nicht genau das was ich will. Die Groß-kleinschreibung ist mir da irgendwie doch schon wichtig.

Um das nochmal kurz zu fassen:
$emotes = Alle Emotes aus der Datenbank.[name,link]
$message = user nachricht.
Jedes vorkommen von ALLEN emotes aus der Datenbank soll ersetzt werden mit dem emote link.
Ich hab jetzt gerade wieder ne Stunde geschaut mit welchen Schleifen bzw loops es am sinnvollsten ist und ich bin zu keinem Ergebnis gekommen.

Folgendes gibt immer NUR das letzte Emote aus der Datenbank aus:
PHP Code:
 $msg = array();
            
$emotes $pdo->prepare("SELECT * FROM emotes");
            
$emotes->execute();
            
$emotes $emotes->fetchAll();
            for (
$x 0$x <= 29$x++) {
            
$result $stmt->fetch(PDO::FETCH_ASSOC);
                foreach(
$emotes as $emo) {
                    
$message str_replace($emo['name'], '<img src="' $emo['link'] . '" alt="$emo[name]" />'$result['message']);
                }
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            }

            echo 
json_encode($msg); 
Folgendes gibt immer NUR das erste Emote aus:
PHP Code:
 $msg = array();
            
$emotes $pdo->prepare("SELECT * FROM emotes");
            
$emotes->execute();
            
$emote $emotes->fetch(PDO::FETCH_ASSOC);
            for (
$x 0$x <= 29$x++) {
            
$result $stmt->fetch(PDO::FETCH_ASSOC);
                foreach(
$emote as $emo) {
                    
$message str_replace($emote['name'], '<img src="' $emote['link'] . '" alt="$emote[name]" />'$result['message']);
                }
                
$msg[] = array('name' => $result['name'], 'message' => $message);
            }

            echo 
json_encode($msg); 
.Barone is offline  
Old 10/19/2016, 17:13   #9
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 mach es doch so
PHP Code:
<?php


$str 
'This is just a simple Message KaPPa, but it fbm to hear that. Kappa fbm';

$emotes = array(
    
'Kappa' => ':Kappa:',
    
'fbm' => ':FeelsBadMan:'
);

foreach (
$emotes as $key => $value) {
  
$str str_ireplace($key$value$str);
}
echo 
$str;
// Output:
// This is just a simple Message :Kappa:, but it :FeelsBadMan: to hear that. :Kappa: :FeelsBadMan:
Sollte ja einfach sein dein Datenbank output in einem array zu speichern. Machst einfach eine Abfrage welche Emotes es alles gibt, fertig.
Devsome is offline  
Thanks
1 User
Old 10/19/2016, 19:24   #10
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Quote:
Originally Posted by Devsome View Post
Dann mach es doch so
PHP Code:
<?php


$str 
'This is just a simple Message KaPPa, but it fbm to hear that. Kappa fbm';

$emotes = array(
    
'Kappa' => ':Kappa:',
    
'fbm' => ':FeelsBadMan:'
);

foreach (
$emotes as $key => $value) {
  
$str str_ireplace($key$value$str);
}
echo 
$str;
// Output:
// This is just a simple Message :Kappa:, but it :FeelsBadMan: to hear that. :Kappa: :FeelsBadMan:
Sollte ja einfach sein dein Datenbank output in einem array zu speichern. Machst einfach eine Abfrage welche Emotes es alles gibt, fertig.
Das sieht doch schonmal besser aus. Selbst, wenn ich deins Kopiere und bei mir einfüge, wird nur fbm ausgetauscht, das Kappa nicht!

Mein Code sieht wie folgt aus:
Nur das letzte Emote wird ausgetauscht bzw angezeigt..
.Barone is offline  
Old 10/19/2016, 19:29   #11
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715

Mach doch einfach nur eine Abfrage fetchAll() und du hast das Array.
Da brauchst du keine while mehr, lass dir dein Array ausgeben und schau wie es aufgebaut ist.

Ggf. kann ich morgen auf der Arbeit oder heute Abend mal nachschauen.
Zeig mir dann auch mal den Aufbau deiner Tabelle wo die Emotes alle drin sind.
Devsome is offline  
Old 10/19/2016, 19:45   #12
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Ich kriegs trotzdem nicht gebacken.. ohman.

Datenbank:
id,name,link
int,varchar,varchar
.Barone is offline  
Old 10/19/2016, 19:59   #13
dotCom
 
Devsome's Avatar
 
elite*gold: 10102
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,006
Received Thanks: 4,715
Bitte sehr.
Habe nur einen sql Server auf dem Heimrechner, daher sql.

Tabelle sieht so aus:
name|img

Inhalt:
kappa|kappa.img
fbm|feelsbadman.img

PHP Code:
<?php
    $cInfo
['Host'] ="localhost\SQLEXPRESS";
    
$cInfo['User'] = "sa";
    
$cInfo['Pass'] = "";
    include(
'SQL.php');
    
    
define('database1''tb_Emotes');

    
$sql = new SQL($cInfotrue);
    
    
$db database1;

    
    
$sq $sql->Query("SELECT * FROM [$db]..[emote]");
    
$arrayEmotes = [];

    while (
$row $sql->getQueryFetch_Array($sq)) {
        
$arrayEmotes[$row['name']] = $row['img'];
    }

    
// Nachricht
    
$str 'This is just a simple Message KaPPa, but it fbm to hear that. Kappa fbm';
    
    foreach (
$arrayEmotes as $key => $value) {
      
$str str_ireplace($key$value$str);
    }
    
// Ausgeben der Nachricht
    
echo $str;

    
    
// Funktion getQueryFetch_Array()
    /*
        function getQueryFetch_Array($resource){
            $data = sqlsrv_fetch_array($resource, SQLSRV_FETCH_ASSOC);
            if ( $data === false ) {
                die("This Insert Query does have any errors, please tell that any Admin. [ErrorCode: 5]");
            }
            return $data;
        }
    */
Devsome is offline  
Thanks
1 User
Old 10/19/2016, 20:32   #14
 
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
Erstmal danke für deine mühe und hilfe.
Ich habe einfach irgendwie nen Problem damit, das mysqli immer direkt nen array ausgegeben hatt und bei pdo es halt ein assoziatives array ist.
Oder ich mache etwas komplett falsch.
Ich habe heute nun auf 10 verschiedene arten die Emotes ausgegeben, auch erfolgreich, aber jedesmal nur das dritte. Vielleicht liegts auch an der Datenbank, was ich aber eigentlich bezweifel..
Ich schaue morgen früh nochmal dabei.

Weiter habe ich aktuell nicht gemacht, gibt aber auch nur das letzte Emote aus:

.Barone is offline  
Old 10/20/2016, 10:12   #15
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 wenn du es hiermit nicht packst, weiß ich leider auch nicht.

Aufbau der Tabelle:
id|name|img

Inhalt der Tabelle:
1|kappa|/dist/kappa.png
2|fbm|/dist/feelsbadman.png
3|salty|/dist/salty.png
PHP Code:
$str 'This is just a simple Message KaPPa, but it fbm to hear that. Kappa saLTY';
$arrayEmotes = [];
$row $this->app['db']->fetchAll('SELECT * FROM tb_emotes');
foreach (
$row as $emote) {
    
$arrayEmotes[$emote['name']] = $emote['img'];
}
foreach (
$arrayEmotes as $key => $value) {
    
$str str_ireplace($key$value$str);
}
var_dump$str );
exit; 

// Update: Vielleicht liegt es daran, dass dieser Query in einer Schleife ist und die Ausgabe deiner Nachricht einfach überschreibt...
Devsome is offline  
Thanks
1 User
Closed Thread




All times are GMT +2. The time now is 12:22.


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.