Créez, copiez, importez, exportez, modifiez et supprimez les profils de chat d'après lesquels vos bots parlent, sur la page Profils de chat. Écrivez des annonces avec des choix au hasard, des liens d'objets et des variables, réglez quand chacune tourne et ce qui la termine, écrivez les réponses aux messages privés, ce que fait un bot sur les lignes des canaux, les commandes auxquelles il obéit et son statut, et lisez le format des profils.
Un profil de chat dit ce qu'un bot dit tout seul : les annonces qu'il poste dans les canaux que vous choisissez, à intervalles aléatoires, tant que leurs conditions sont vraies ; les réponses aux messages privés qu'il reçoit ; ce qu'il fait sur les lignes des canaux ; les commandes auxquelles il obéit ; son statut. Un bot utilise plusieurs profils à la fois, choisis dans son onglet Chat (Le module de chat), et un même profil peut servir à autant de bots que vous voulez.
| Profil | Ce que c'est | Pouvez-vous le modifier ? |
|---|---|---|
| Les vôtres, Les vôtres | Les profils que vous avez créés, copiés ou importés. Chacun est un fichier du dossier des données d'Asterobot. | Oui. |
| Celui d'un paquet, Paquet | Fourni par un paquet que vous avez installé, nommé d'après lui, comme @some-author:traders/wheat. |
Non. Copiez-le pour le modifier. |
La page Profils de chat
Ouvrez Profils de chat dans le menu d'Asteroboard. La page liste les vôtres par nom, puis ceux de vos paquets.
| Colonne | Ce qu'elle montre |
|---|---|
| Nom | Le nom du profil, celui que montre la liste Profils d'un bot. |
| Annonces | Combien d'annonces il contient. |
| Source | Les vôtres ou Paquet, avec la version du paquet. |
| État | Prêt, Inutilisable quand il a une erreur, ou combien d'avertissements il a. Survolez-le pour les lire. |
Le filtre au-dessus du tableau trouve un profil par son nom. Chaque ligne a un menu :
| Élément | Ce qu'il fait |
|---|---|
| Modifier | Ouvre votre profil dans l'éditeur. Voir pour celui d'un paquet, qui s'ouvre en lecture seule. |
| Copier | Enregistre une copie sous un nom à vous, puis l'ouvre dans l'éditeur. |
| Exporter | Télécharge le profil en fichier .json. |
| Supprimer | Supprime l'un de vos profils, après confirmation. Celui d'un paquet ne peut pas être supprimé. |
La page reste à jour d'elle-même quand un profil est enregistré, importé ou supprimé, et quand un paquet est installé ou retiré.
Créer un profil
- Cliquez sur Nouveau profil.
- Tapez un Nom, puis cliquez sur Créer.
L'éditeur s'ouvre sur le nouveau profil, vide.
Un nom est aussi le nom de fichier du profil : il ne peut pas être vide, commencer par @, ni contenir de / ou de caractère qu'un nom de fichier ne peut pas porter. La fenêtre affiche alors chatprofiles: a profile's name can't be empty, start with @, or hold / or a character a file name can't. Un nom déjà pris donne chatprofiles: a profile already has this name.
Copier, partager et supprimer
Copier, dans le menu d'une ligne ou dans l'éditeur, ouvre une fenêtre avec le nom de l'original suivi de copie. La copie est à vous : c'est ainsi qu'on modifie le profil d'un paquet.
Exporter télécharge le profil exactement tel qu'il est enregistré. Pour utiliser un profil partagé par quelqu'un, cliquez sur Importer, choisissez le fichier sous Fichier du profil ou collez le JSON sous JSON du profil, puis cliquez sur Importer. Le profil rejoint les vôtres sous le nom qu'il porte ; quand vous en avez déjà un de ce nom, la fenêtre demande avant que Le remplacer n'écrase le vôtre. Un profil désigne les objets, les cartes et les zones par leurs identifiants du jeu, les mêmes pour tous ceux qui jouent la même version du jeu.
Supprimer demande d'abord : « ... sera supprimé définitivement. Les bots qui l'utilisent le retirent de leurs profils. »
L'éditeur
L'éditeur montre le formulaire du profil à gauche et son JSON à droite, tous deux en direct : un champ changé dans le formulaire apparaît aussitôt dans le JSON, et le JSON que vous tapez remplit le formulaire dès qu'il se lit. Sauvegarder envoie le profil à Asterobot, qui le vérifie, et chaque bot qui l'utilise le suit aussitôt. Un profil qu'Asterobot ne peut pas accepter est refusé avec le champ en cause, par exemple chat: malformed profile: ads[0].messages: an ad needs a message. Ses avertissements s'affichent au-dessus du formulaire, sous À savoir.
Le profil d'un paquet s'ouvre en lecture seule, avec Copier pour en faire un à vous. Quitter l'éditeur avec des changements non enregistrés demande d'abord.
Général
Nom et Description. Renommer un profil fait suivre le nouveau nom à chaque bot qui l'utilise.
Variables
Des valeurs que les messages lisent par leur nom : un message qui écrit {prix} dit la valeur de prix. Ajouter une variable, puis tapez son Nom et sa Valeur. Quand plusieurs profils d'un bot fixent la même variable, la valeur du premier profil l'emporte ; un script peut fixer les siennes, qui l'emportent sur celles de tous les profils. Celles du personnage, comme {name} ou {level}, ne peuvent pas être remplacées.
Annonces
Ajouter une annonce en ajoute une, dans Commerce, qui attend deux à quatre minutes entre deux envois, avec un message à écrire.
| Champ | Ce qu'il fait |
|---|---|
| Nom | Facultatif : le nom que montre l'onglet Chat du bot. Sans nom, il montre Annonce 1, Annonce 2... |
| Canaux | Où part chaque envoi, nommés et colorés comme dans le jeu. Chaque envoi part dans tous les canaux : un canal encore dans son délai est attendu, les autres partent. |
| Messages | Un seul est dit à chaque fois. Chacun montre un aperçu en dessous. Voir Messages. |
| Ordre | Au hasard, jamais deux fois de suite le même message, ou Dans l'ordre. |
| Attendre au moins, Attendre au plus | L'attente aléatoire entre deux envois, de 1 seconde à 24 heures, en secondes, minutes ou heures. |
| Seulement quand | La condition de l'annonce : elle attend tant que la condition est fausse. Voir Conditions. |
| Arrêt | Ce qui termine l'annonce pour de bon. Voir Arrêt. |
| À chaque envoi | Une Émoticône ou une Attitude que le personnage joue en disant le message. |
Messages
Un message est un modèle que le bot remplit à chaque fois qu'il le dit :
| Vous écrivez | Le bot dit |
|---|---|
{Salut|Bonjour|Coucou} |
L'un des choix, au hasard. Les choix peuvent s'imbriquer et être vides : {!|}. |
{item:289} |
Un lien vers l'objet, comme les liens d'objets du jeu, depuis l'inventaire du personnage. Un objet dans les sacs est préféré à un objet équipé. |
{name}, {level}, {server}, {subarea}, {area}, {position}, {kamas}, {pods}, {time} |
Le nom, le niveau, le serveur, la sous-zone, la zone, la position en lien vers sa carte, que le jeu affiche [4,-19], les kamas, les pods en utilisés/max, et l'heure en HH:MM du personnage. |
{sender} |
Dans une réponse, un message de déclencheur ou la réponse d'état : qui a écrit le message ou la ligne. |
{prix}, ou tout autre nom |
Une variable. |
Un message n'est pas envoyé tant que l'une de ses variables n'a pas de valeur ou que le personnage n'a pas un objet qu'il lie : l'annonce attend, et l'onglet Chat dit pourquoi. Un message au-delà des 256 caractères ou des 16 liens d'objets du jeu ne l'est pas non plus.
L'aperçu sous chaque message montre quelques remplissages, chaque lien d'objet écrit [son nom], dans la couleur du premier canal de l'annonce, et le plus long que le message peut faire face aux limites du jeu : « Jusqu'à 74/256 caractères, 1/16 liens d'objets ». Il est fait sans bot, donc les variables du personnage restent écrites {name}, et les objets sont nommés dans la langue où vous lisez le jeu.
Conditions
Seulement quand contient des tests, qui doivent tous être vrais, et des groupes : Tous ceux-ci, L'un de ceux-ci, et Pas celui-ci. Sans test, l'annonce tourne toujours.
| Test | Vrai quand |
|---|---|
| Heure | L'heure de l'ordinateur est entre De et À, en passant minuit quand À vient avant, l'un des Jours cochés, tous les jours quand aucun ne l'est. |
| En combat, En trajet | Le personnage est en combat, ou en trajet, ou ne l'est pas : Oui ou Non. |
| Carte, Sous-zone, Zone | Le personnage est sur l'une d'elles. |
| A un objet | Le personnage a au moins tant de cet objet. |
| Kamas, Niveau | Les kamas ou le niveau du personnage sont Plus de et Moins de les nombres donnés. |
| Un drapeau | Un script, ou la réaction Activer un drapeau d'une alarme, a levé ce drapeau. |
Un test sur ce que le bot ne sait pas encore, comme ses kamas avant que le jeu ait envoyé l'inventaire, est faux.
Arrêt
L'Arrêt termine l'annonce pour de bon, au premier qui arrive : Après tant d'envois, un temps Après son premier envoi, ou Le jour dit, selon l'horloge de l'ordinateur. Les compteurs sont gardés en mémoire : ils repartent de zéro au redémarrage d'Asterobot ou quand les profils du bot changent.
Réponses
Les réponses aux messages privés que reçoit un bot (Réponses). Ajouter une règle en ajoute une, qui répond à tout message, avec une réponse à écrire.
| Champ | Ce qu'il fait |
|---|---|
| Répond quand | La condition de la règle : les tests d'une annonce, et deux de plus sur le message. Sans test, la règle répond à tout message. |
| Réponses | Une est tirée au hasard. Ce sont des messages, et {sender} dit qui a écrit. L'aperçu montre {sender} en Joueur. |
| Réponses par joueur | Au plus tant de réponses des règles à un même joueur, Sur cette durée. Une par heure par défaut, ce qui répond au premier message d'une conversation. |
La première règle dont le test est vrai répond, donc une règle sans test va en dernier : les flèches montent ou descendent une règle. Quand un bot a plusieurs profils, leurs règles s'ajoutent dans l'ordre des profils, et le premier profil qui a Réponses par joueur le fixe.
La condition d'une règle de réponse peut aussi tester le message :
| Test | Vrai quand |
|---|---|
| Expéditeur | Le personnage qui a écrit est l'un des Noms, sans tenir compte des majuscules. |
| Mots | Le message a l'un des Mots-clés comme mot, Contient un texte, et correspond à la Regex : chacun que vous remplissez doit être vrai. Les mots-clés et Contient ne tiennent pas compte des majuscules ni des accents, donc ble trouve blé. La regex est prise telle quelle, en syntaxe de Go : (?i) à son début ignore les majuscules. |
Déclencheurs
Ce que fait un bot sur une ligne dite dans un canal (Déclencheurs). Ajouter un déclencheur en ajoute un, sur une ligne en Commerce qu'aucun de vos bots n'a dite, avec un message privé à écrire.
| Champ | Ce qu'il fait |
|---|---|
| Nom | Le nom du déclencheur dans l'onglet Chat et la console, et dans l'événement d'alarme et l'événement de script qu'il donne. |
| Se déclenche quand | La condition du déclencheur : les tests d'une annonce, l'Expéditeur et les Mots d'une réponse, et quatre de plus sur la ligne, ci-dessous. Sans test, il se déclenche sur toute ligne de tout canal. |
| Actions | Ce qu'il fait, dans l'ordre, chacune une fois la précédente faite. Les flèches montent ou descendent une action. |
| Par joueur | Un même joueur le déclenche au plus tant de fois, Sur cette durée. Une fois par heure par défaut. |
Chaque déclencheur dont le test est vrai se déclenche, donc une ligne peut en déclencher plusieurs. Quand un bot a plusieurs profils, leurs déclencheurs s'ajoutent.
La condition d'un déclencheur peut aussi tester la ligne :
| Test | Vrai quand |
|---|---|
| Canal | La ligne a été dite dans l'un de ces canaux. |
| L'un de vos bots | Oui : l'un de vos autres comptes de cet Asterobot l'a dite. Non : quelqu'un d'autre. |
| Nomme le personnage | La ligne a le nom du personnage du bot comme mot, sans tenir compte des majuscules ni des accents. |
| Lie un objet | La ligne lie cet objet. |
| Action | Ce qu'elle fait |
|---|---|
| Écrire en privé à l'auteur | Envoie en privé l'un de ses messages, tiré au hasard. {sender} dit qui a écrit la ligne. |
| Dire dans un canal | Dit un message dans le canal que vous choisissez. |
| Lever un événement d'alarme | Lève l'événement trigger:<nom> pour les alarmes : une règle qui le nomme décide de la suite, comme une notification. |
| Prévenir le script | Le script du bot l'entend (onChat). |
| Ignorer l'auteur | Ajoute l'auteur à la liste des ignorés du personnage, comme le menu du jeu : ses lignes sont masquées jusqu'à la fin de la session de jeu, et ne déclenchent plus rien. Si le jeu refuse, par exemple quand la liste est pleine, la console dit pourquoi. |
| Jouer un smiley, Jouer une émote | Joue celui ou celle que vous choisissez. |
| Inviter dans le groupe | Invite l'auteur dans le groupe du personnage. |
| Mettre le chat en pause | Le bot n'envoie rien pendant ce temps, comme avec Arrêter l'envoi. |
Un message privé ou un message attend le rythme, comme une réponse. En essai à blanc, les messages, l'ignore, l'invitation et le smiley ou l'émote sont seulement écrits dans la console.
Commandes
Les commandes auxquelles obéit un bot (Commandes). Activez Obéit aux commandes pour les régler ; sans cela, le profil ne prend aucune commande. Le premier profil du bot qui prend des commandes les fixe toutes.
| Champ | Ce qu'il fait |
|---|---|
| Préfixe | Ce par quoi commence une commande, 3 caractères au plus. ! par défaut. |
| Noms de confiance | Des personnages du serveur du bot dont il suit les commandes. Tapez un nom et appuyez sur Entrée. |
| Vos bots | Vos autres comptes de cet Asterobot ont aussi sa confiance, quel que soit leur personnage. Activé par défaut. |
| Commandes qui marchent | Les commandes auxquelles le bot obéit. Toutes par défaut. |
| Réponse d'état | Ce que répond !status, un message. Vide, c'est {name}, level {level}, {subarea} {position}, {kamas} kamas, {pods} pods. |
Statut
Le statut que prend le personnage tant que la partie Statut du bot est allumée (Statut). Activez Règle le statut et choisissez Disponible, Absent, Privé ou Solo, comme dans le menu de statut du jeu. Absent prend un Message d'absence, 256 caractères au plus, que lisent les joueurs qui écrivent en privé au personnage. Le premier profil du bot qui a un statut le fixe.
Privé bloque les messages privés des inconnus, donc les réponses n'en reçoivent aucun : l'éditeur vous prévient.
Rythme
Le temps que met le bot à répondre, comme une personne : un temps au hasard pour lire le message, entre Lit au moins et Lit au plus secondes (2 à 6 par défaut, 120 au plus), puis le temps de taper la réponse à Caractères par seconde (6 par défaut, 50 au plus). Le premier profil du bot qui a un rythme le fixe, pour les réponses, les messages des déclencheurs et la réponse à !status.
Le format
Un profil est un fichier JSON. C'est le format qu'écrit l'éditeur, et celui qu'utilisent Exporter et Importer :
{
"version": 1,
"name": "Vente de blé à Astrub",
"description": "Annonces de blé dans Commerce, le soir, et réponses sur le prix.",
"variables": { "prix": "12" },
"ads": [
{
"name": "Annonce blé",
"channels": ["SALES"],
"messages": ["{Vends|WTS} {item:289} à {prix} k l'unité, MP", "{item:289} à vendre, {prix} k, MP {name}"],
"order": "random",
"every": { "min": 120, "max": 240 },
"when": { "all": [ { "time": { "from": "18:00", "to": "23:30" } }, { "map.subarea": { "in": [95] } }, { "bot.inFight": false } ] },
"stop": { "after": 50, "for": 7200, "until": "2026-11-01T20:00" },
"smiley": 1
}
],
"replies": {
"rules": [
{ "when": { "text": { "keywords": ["prix", "combien", "price"] } }, "reply": ["{prix} k l'unité, {viens|rejoins-moi} à Astrub"] },
{ "reply": ["{Salut|Bonjour} {sender}, occupé pour l'instant, je réponds plus tard"] }
],
"perPlayer": { "max": 1, "every": 3600 }
},
"triggers": [
{
"name": "wtb",
"when": { "channel": { "in": ["SALES"] }, "text": { "keywords": ["wtb", "achète"] }, "items": { "has": 289 } },
"do": [ { "whisper": ["Salut {sender}, je vends {item:289} à {prix} k"] }, { "raise": "wtb" } ],
"perPlayer": { "max": 1, "every": 21600 }
}
],
"commands": {
"prefix": "!",
"trusted": { "names": ["Nom-Du-Maître"], "myBots": true },
"builtIn": ["stop", "start", "pause", "resume", "say", "status", "disconnect"],
"statusReply": "niv {level}, {subarea} {position}, {kamas} k, {pods}"
},
"status": { "set": "away", "text": "en farm, je reviens plus tard" },
"timing": { "read": { "min": 2, "max": 6 }, "typing": 6 }
}
| Champ | Valeurs | Par défaut |
|---|---|---|
version |
1 |
obligatoire |
name |
texte | obligatoire |
description |
texte | aucune |
variables |
nom → texte ; un nom ne peut pas contenir d'accolades, de | ni de : |
aucune |
ads[].name |
texte | aucun |
ads[].channels |
les canaux comme les nomme le protocole du jeu : SALES est Commerce, SEEK Recrutement, GLOBAL Général, COMMUNITY Communauté, GUILD, ALLIANCE, PARTY, TEAM, ARENA |
obligatoire |
ads[].messages |
modèles | au moins un |
ads[].order |
random, inOrder |
random |
ads[].every |
min, max : secondes, de 1 à 86400 |
obligatoire |
ads[].when |
des tests, et all, any, not : time (from, to, days en mon...sun), bot.inFight et bot.onTrip (true, false), map.id, map.subarea, map.area (is un identifiant, in une liste), inventory.has (item, atLeast), kamas et level (above, below), flag (un nom) |
toujours |
ads[].stop |
after (envois), for (secondes depuis le premier envoi), until (une date comme 2026-11-01T20:00, selon l'horloge de l'ordinateur) |
aucun |
ads[].smiley, ads[].emote |
l'identifiant d'une émoticône ou d'une attitude, pas les deux | aucun |
replies.rules[].when |
les tests d'une annonce, et sender.name (is un nom, in une liste) et text (contains, keywords, regex) |
toujours |
replies.rules[].reply |
modèles, qui lisent {sender} |
au moins un |
replies.perPlayer |
max réponses, every secondes (de 1 à 86400) |
1 toutes les 3600 |
triggers[].name |
texte | obligatoire |
triggers[].when |
les tests d'une réponse, et channel (is un canal, in une liste), sender.myBot et text.mentionsMe (true, false), items (has l'id d'un objet) |
toujours |
triggers[].do |
des actions, chacune un objet d'une seule clé : whisper (des modèles, qui lisent {sender}), say (channel, text), raise (le nom de l'événement), script, ignore et invite (true), smiley et emote (un id), pauseChat (secondes, de 1 à 86400) |
au moins une |
triggers[].perPlayer |
max fois, every secondes (de 1 à 86400) |
1 toutes les 3600 |
commands.prefix |
3 caractères au plus, sans espace | ! |
commands.trusted |
names (des personnages du serveur du bot), myBots (true, false) |
aucun nom, myBots true |
commands.builtIn |
stop, start, pause, resume, say, status, disconnect |
toutes |
commands.statusReply |
un modèle | {name}, level {level}, {subarea} {position}, {kamas} kamas, {pods} pods |
status |
set : available, away, private, solo ; text, avec away seulement, 256 caractères au plus |
inchangé |
timing.read |
min, max : secondes, de 0 à 120 |
2 à 6 |
timing.typing |
caractères par seconde, de 1 à 50 | 6 |
Un champ que cette version ne lit pas est gardé tel quel et ignoré, donc un profil écrit pour une version plus récente se charge quand même.
Erreurs et avertissements
Une erreur empêche d'utiliser le profil, et son message nomme le champ : un mauvais type, un canal que le jeu ne connaît pas, un message vide, des accolades déséquilibrées dans un modèle, une attente hors limites, un test inconnu, un test sur le message dans la condition d'une annonce ou sur la ligne d'un canal dans celle d'une réponse, une regex qui ne compile pas, une commande, une action ou un statut qui n'en est pas un. Un profil avec une erreur est listé Inutilisable, et les bots le sautent.
Un avertissement est seulement bon à savoir :
ads[0].messages[1]: {acheteur} is set by no variable here: a script or another profile must set itads[0].messages[0]: {sender} never has a value in an ad: the message isn't sentstatus.set: private keeps strangers' whispers out: the replies get noneitem 289: not in the game data, pour un identifiant que n'a pas la version du jeu la plus récente que vous avez installée.name: "Blé", but its file is "ble.json": bots use it as "ble", pour un fichier renommé à la main.
Les fichiers des profils
Vos profils sont des fichiers du dossier chatprofiles du dossier des données d'Asterobot, un <nom>.json chacun, exactement au format ci-dessus (Fichiers et dossiers). Un bot relit ses profils quand il se connecte et quand ses réglages de chat changent : un fichier que vous modifiez à la main joue à partir de là.
Un paquet fournit ses profils en chatprofiles/<nom>.json à sa racine. Ils sont listés en @éditeur:paquet/<nom>, et chaque bot utilise la version du paquet la plus récente que vous avez installée.