chat — Messages¶
API chat MoonBot Lua : envoyer des messages et lire les messages privés reçus sur Unity.
Fonctions d'envoi et, sur Unity, de lecture des messages privés.
Index¶
chat.sendchat.party / chat.groupchat.sendPMRaccourcisExemple — parler au groupe- Messages privés reçus — Unity
Référence¶
chat.send¶
returns boolean
Canaux : * (general), # (equipe), % (guilde), : (commerce), ? (recrutement), $ ou group/groupe/party (groupe), ^ (rencontres), ! (alignement), @ (admin). Comme le client officiel : les | sont retires du texte, un message vide n'est pas envoye et le canal Groupe n'envoie rien hors groupe. Retourne false dans ces cas (rien d'envoye), true quand le message part.
chat.party / chat.group¶
returns boolean
Parle sur le canal Groupe ($, commande /p du jeu). Retourne false sans rien envoyer si le personnage n'est dans aucun groupe (map.isInParty() == false) : le client officiel n'envoie jamais ce message hors groupe. Les messages du groupe s'affichent dans la console : [Groupe] Nom: texte. Dans le tableau de bord : onglet Chat, canal Groupe, ou le champ « Message au groupe » sous les membres du groupe dans le MapViewer.
chat.sendPM¶
returns boolean
Message prive. false si le message est vide.
Raccourcis¶
chat.general(msg) / team(msg) / guild(msg) / trade(msg) / recruit(msg) / party(msg) / group(msg) / alignment(msg)
returns boolean
Raccourcis pour chaque canal ; false si le message est vide (party/group : aussi hors groupe). chat.alliance(msg) existe encore mais Retro n'a pas de canal Alliance : utiliser chat.alignment(msg) (!).
Exemple — parler au groupe¶
if map.isInParty() then
chat.party("On part au donjon dans 1 minute")
else
print("Pas de groupe : message non envoye")
end
Previent le groupe s'il existe. Sans le test, chat.party() retournerait simplement false hors groupe, sans rien envoyer.
Messages privés reçus — Unity¶
Ces fonctions sont disponibles sur MoonBot Unity, notamment sur le worker v211. Elles lisent le tampon des MP reçus par le personnage courant. Elles ne sont pas implémentées sous ces noms dans les moteurs Touch et Rétro actuels.
Utilisez la syntaxe avec un point : chat.getPrivateMessages(). La forme chat:getPrivateMessages() n'est pas prise en charge par cette fonction.
chat.getPrivateMessages¶
local messages = chat.getPrivateMessages() -- MP encore conservés
local nouveaux = chat.getPrivateMessages(sinceSeq) -- seulement seq > sinceSeq
Retour : une table Lua indexée à partir de 1, vide {} si aucun message ne correspond. L'appel est immédiat : il n'attend pas de nouveau MP et ne supprime aucun message.
Le tampon conserve au maximum 100 MP, classés du plus récent au plus ancien. Seuls les MP reçus avec un contenu non vide y sont ajoutés ; les messages des canaux publics et les copies des MP envoyés ne sont pas inclus. Ce tampon n'est pas un historique permanent : si plus de 100 messages arrivent entre deux lectures, les plus anciens ne sont plus disponibles.
Le paramètre facultatif sinceSeq est un entier, égal à 0 par défaut. Seuls les messages dont seq est strictement supérieur sont retournés. La lecture ne mémorise pas votre curseur : le script doit le conserver et le mettre à jour.
Chaque message contient :
| Champ | Type | Signification |
|---|---|---|
seq |
entier | Numéro croissant du MP dans ce tampon ; sert de curseur. |
sender |
chaîne | Nom de l'expéditeur. |
senderId |
entier | Identifiant du personnage expéditeur ; 0 si indisponible. |
content |
chaîne | Texte du message. |
fromAdmin |
booléen | Indicateur admin/modérateur fourni par le serveur de jeu. |
at |
entier | Date de réception par MoonBot, en millisecondes depuis l'époque Unix. |
Lecture simple :
for _, mp in ipairs(chat.getPrivateMessages()) do
global:printMessage(mp.sender .. " : " .. mp.content)
end
Lecture répétée sans retraiter les mêmes messages, dans l'ordre chronologique :
local dernierSeq = 0
-- À appeler depuis votre logique de script lorsqu'une lecture est nécessaire.
function lireNouveauxMP()
local messages = chat.getPrivateMessages(dernierSeq)
for i = #messages, 1, -1 do
local mp = messages[i]
global:printMessage(mp.sender .. " : " .. mp.content)
dernierSeq = math.max(dernierSeq, mp.seq)
end
end
Pour ignorer les MP déjà présents au démarrage du suivi, initialisez plutôt dernierSeq avec chat.privateMessageSeq(). Ce curseur appartient au tampon du personnage courant ; ne le partagez pas entre personnages.
Fonctions associées¶
| Fonction | Comportement |
|---|---|
chat.privateMessages(sinceSeq) |
Alias exact de chat.getPrivateMessages(sinceSeq). Le paramètre est facultatif. |
chat.lastPrivateMessage() |
Retourne le MP le plus récent conservé, ou nil si le tampon est vide. |
chat.privateMessageSeq() |
Retourne le dernier numéro attribué, ou 0 si aucun MP n'a été enregistré dans le tampon. |
chat.clearPrivateMessages() |
Vide le tampon et retourne true, sans remettre le compteur seq à zéro. |
chat.waitForPrivateMessage(timeoutMs) |
Attend un MP reçu après le début de l'appel et retourne le plus ancien de ces nouveaux MP encore conservés, ou nil au timeout. |
chat.waitForPrivateMessage() attend 30 secondes par défaut. Le délai est exprimé en millisecondes et borné entre 1 et 3 600 000. Cette attente suspend la suite du script, respecte son annulation et ne consomme pas les messages. Un MP déjà présent avant l'appel ne suffit pas à terminer l'attente.