Perso j'utiliserais les Channels du framework Phoenix. Dans ton cas ça demanderait d'héberger ça à part, donc autant partir sur du XMPP genre ejabberd – mais il existe probablement des implémentations PHP, forcément moins puissantes, mais avec un nombre limité de joueurs ça n'est pas gênant.
Sinon niveau interface il y a deux types principaux de façons de faire : WoW et Eve Online.
Dans WoW chaque onglet du chat permet d'afficher les messages de N channels, et une commande permet de controller le channel sur lequel on parle. Par exemple
Les mêmes fenêtres sont utilisée pour afficher les logs (drops des mobs, XP, gains d'or, points de compétence, messages système, …).
Dans Eve, tu as une fenêtre/onglet par channel ou conversation privée, tu peux afficher les avatars des gens, formater les dates, et surtout afficher la liste des gens présents sur le channel (en mode direct ou delayed, c'est à dire n'affichant que les gens ayant parlé les N dernières minutes). Les logs ont donc leur fenêtre spécifique, et les loots, gains, etc, ne sont pas affichés durablement.
N'étant pas très bavard je préfère la solution Wow qui permet simplement d'avoir un onglet ou t'as tout le chat qui défile et un autre onglet dans lequel tu as les conversations locales et de groupe/raid pour rester focus dessus et ne pas être enbêté par le reste.
Ensuite il y a un avantage dans Eve, c'est le canal "Local", qui liste tous les joueurs présents dans le système solaire, donc des cibles/menaces potentielles, avec des icones indiquant s'ils sont hostiles, dangereux, "amis", etc. Ce canal étant extêmement important dans le jeux et affiché d'office pour tous les joueurs, tu peux être sûr à 99% qu'un joueur présent dessus lira ton message. Mais forcément c'est lié au gameplay spécifique d'Eve.
J'ajoute aussi que dans Eve tu peux parler à n'importe qui, ami comme ennemi, alors qu'un jeu comme WoW en serveur PvP empêche la communication entre les deux factions ennemies, du coup tu te retrouves à parler avec l'ennemi sur Discord (c'est d'ailleurs interdit par les conditions générales de WoW il me semble). Mais ça sert bien l'immersion de wow, et communiquer avec un ennemi via des emotes pour coopérer temporairement, c'est toujours fun. D'autant plus qu'ayant une communication très limitée tu ne peux jamais vraiment sympathiser, donc tu resters toujours sur tes gardes pour prévenir une trahison soudaine
Concernant le spam, tu dois offrir la possibilité d'ignorer les messages d'un autre joueur. Ensuite c'est toujours chiant (edit: viewer) de ne pas savoir qu'un joueur que tu ignores est en train de parler, mais d'un autre côté si tu as moyen de le savoir, la personne que tu ignores comptera sur ta curiosité pour afficher le message ou le désignorer temporairement et donc continuera de te saouler.
Enfin, la limite de messages par minutes est nécessaire aussi, ça évite pas mal de relous. Ça comme une liste d'ignorés est facile à implémenter, ça n'alourdit pas vraiment le bouzin.
Concernant la sécurité, hormis l'évident blocage des scripts je suppose que la législation impose de logger toutes les conversations en cas d'abus (genre un pédocriminel ou vendeur d'héroïne qui vient parler à des joueurs potentiellement mineurs). Soit tu log sur ton serveur et dans ce cas ça doit clairement apparaître dans les conditions d'utilisations, soit tu log sur le poste client (Le client Eve Online log les conversations sur le client par exemple), avec un hash fourni par le serveur pour assurer la conformité de chaque chunk de logs. Dans le cadre d'un jeu par navigateur c'est blocant car tu ne peux pas faire ça. Mais tu peux chiffrer les logs de chaque personne et les stocker sur ton serveur, et le mot de passe d'un joueur permet de déchiffrer, mais ça devient vite chiant à gérer.
Sinon niveau interface il y a deux types principaux de façons de faire : WoW et Eve Online.
Dans WoW chaque onglet du chat permet d'afficher les messages de N channels, et une commande permet de controller le channel sur lequel on parle. Par exemple
/gr Hello
pour parler en groupe, /w Michel Salut
pour "chuchoter", /2 Vends super armure
pour parler sur le global commerce, ou encore /join monchannel
pour rejoindre / créer un canal.Les mêmes fenêtres sont utilisée pour afficher les logs (drops des mobs, XP, gains d'or, points de compétence, messages système, …).
Dans Eve, tu as une fenêtre/onglet par channel ou conversation privée, tu peux afficher les avatars des gens, formater les dates, et surtout afficher la liste des gens présents sur le channel (en mode direct ou delayed, c'est à dire n'affichant que les gens ayant parlé les N dernières minutes). Les logs ont donc leur fenêtre spécifique, et les loots, gains, etc, ne sont pas affichés durablement.
N'étant pas très bavard je préfère la solution Wow qui permet simplement d'avoir un onglet ou t'as tout le chat qui défile et un autre onglet dans lequel tu as les conversations locales et de groupe/raid pour rester focus dessus et ne pas être enbêté par le reste.
Ensuite il y a un avantage dans Eve, c'est le canal "Local", qui liste tous les joueurs présents dans le système solaire, donc des cibles/menaces potentielles, avec des icones indiquant s'ils sont hostiles, dangereux, "amis", etc. Ce canal étant extêmement important dans le jeux et affiché d'office pour tous les joueurs, tu peux être sûr à 99% qu'un joueur présent dessus lira ton message. Mais forcément c'est lié au gameplay spécifique d'Eve.
J'ajoute aussi que dans Eve tu peux parler à n'importe qui, ami comme ennemi, alors qu'un jeu comme WoW en serveur PvP empêche la communication entre les deux factions ennemies, du coup tu te retrouves à parler avec l'ennemi sur Discord (c'est d'ailleurs interdit par les conditions générales de WoW il me semble). Mais ça sert bien l'immersion de wow, et communiquer avec un ennemi via des emotes pour coopérer temporairement, c'est toujours fun. D'autant plus qu'ayant une communication très limitée tu ne peux jamais vraiment sympathiser, donc tu resters toujours sur tes gardes pour prévenir une trahison soudaine
Concernant le spam, tu dois offrir la possibilité d'ignorer les messages d'un autre joueur. Ensuite c'est toujours chiant (edit: viewer) de ne pas savoir qu'un joueur que tu ignores est en train de parler, mais d'un autre côté si tu as moyen de le savoir, la personne que tu ignores comptera sur ta curiosité pour afficher le message ou le désignorer temporairement et donc continuera de te saouler.
Enfin, la limite de messages par minutes est nécessaire aussi, ça évite pas mal de relous. Ça comme une liste d'ignorés est facile à implémenter, ça n'alourdit pas vraiment le bouzin.
Concernant la sécurité, hormis l'évident blocage des scripts je suppose que la législation impose de logger toutes les conversations en cas d'abus (genre un pédocriminel ou vendeur d'héroïne qui vient parler à des joueurs potentiellement mineurs). Soit tu log sur ton serveur et dans ce cas ça doit clairement apparaître dans les conditions d'utilisations, soit tu log sur le poste client (Le client Eve Online log les conversations sur le client par exemple), avec un hash fourni par le serveur pour assurer la conformité de chaque chunk de logs. Dans le cadre d'un jeu par navigateur c'est blocant car tu ne peux pas faire ça. Mais tu peux chiffrer les logs de chaque personne et les stocker sur ton serveur, et le mot de passe d'un joueur permet de déchiffrer, mais ça devient vite chiant à gérer.