Script Conversation Asterobot, Le premier et seul bot agentic contrôlable via un MCP (Claude, ChatGPT); Framework de bot Dofus 3 Unity (Full socket et MITM)

  • Partenaires

Utilisateurs qui regardent le poste (Total: 1, Members: 1, Invité: 0)

  • Smooth2
Smooth2

Smooth2

Nouveau membre
9 Juin 2020
1
0
421
96
Discord
Smooth#7175
Rejoignez MoonBot avec Cheat-Gam3, le bot pensé pour Dofus Retro !
Asterobot
Logo 512
Framework de bot Dofus 3 Unity (Full socket et MITM)

Asterobot est un bot et un framework pour Dofus 3 Unity, avec un moteur réseau qui connecte vos bots en Full socket, sans aucun client de jeu, ou en MITM, en se glissant entre votre client Dofus et le serveur pour voir, envoyer, modifier ou bloquer chaque message.

Son SDK JavaScript permet d'écrire des scripts à tous les niveaux, de la manipulation directe des messages du jeu jusqu'aux comportements complets. Un script de haut niveau peut s'appuyer sur d'autres paquets déclarés en dépendances, et le même code tourne aussi bien en Full socket qu'en MITM.

Le tout tient dans un seul serveur très léger, sur Windows, macOS, Linux ou Docker, et l'interface web Asteroboard, bien que complète, reste facultative.

Fonctionnalités phares

- ✨✨ Contrôlable via un MCP ! Promptez ce que vous voulez que le bot fasse en direct!
- ✨ Full socket et MITM, au choix pour chaque bot
- ✨ Serveur headless piloté par une interface web, contrôlable à distance, qui tourne même sur un Raspberry Pi
- Disponible sur Windows, macOS et Linux, en Intel/AMD comme en ARM, et avec Docker
- ✨ Mise à jour et désobfuscation rapides du protocole, sans redémarrer Asterobot
- SDK JavaScript moderne (modules, async/await), des messages bruts jusqu'au comportement complet du bot
- Envoi, attente, écoute et interception de n'importe quel message Dofus 3, par son nom
- ✨ Un même script pour le Full socket et le MITM
- Système de dépendances entre paquets, avec plusieurs versions côte à côte
- Éditeur intégré avec autocomplétion de tout le SDK et de chaque message Dofus 3
- Bibliothèque de paquets communautaire, avec installation en collant un simple lien
- Mises à jour des paquets installées à côté des anciennes versions
- ✨ Sniffer réseau en direct avec tous les champs décodés, et envoi manuel de messages
- Téléchargement des versions de Dofus directement depuis Ankama
- Extraction des données du jeu et requêtes SQL, depuis l'interface comme depuis les scripts
- Console, chat et inventaire en direct pour chaque bot

MCP
Ça permet de contrôler Asterobot directement depuis une IA comme Claude, ChatGPT, ou n’importe quel autre agent compatible MCP.Par exemple, vous pourrez simplement lui demander :
« Va chercher 50 laines de bouftou avec mon Iop. »
L’IA pourra alors piloter Asterobot de bout en bout :
  1. identifier où trouver les bouftous, grâce à la game database.
  2. déterminer les combats les plus intéressants pour récupérer des laines ;
  3. lancer les combats avec votre personnage ;
  4. suivre les ressources récupérées ;
  5. et arrêter automatiquement une fois les 50 laines obtenues.

Sans écrire le moindre script.


Connexion
- Full socket : le bot se connecte seul à Ankama et parle directement aux serveurs de jeu, sans client Dofus
- MITM : le bot relaie votre client Dofus pendant que vous jouez
- MITM compatible avec plusieurs clients à la fois (plusieurs personnes peuvent controller le même bot)
- Full Socket et MITM possible sur plusieurs machines : le jeu sur un PC, Asterobot sur un deuxième, l'interface sur un troisième. des possibilités infinies
- En Full socket, l'entrée en jeu passe par un script de connexion : vous pouvez écrire le vôtre, des scripts prêts à l'emploi arrivent bientôt.

SDK JavaScript
- JavaScript moderne (modules ES, async/await), un paquet étant un dossier avec son index.js et son manifeste
- Envoi, attente et écoute de n'importe quel message Dofus 3 par son nom, vers le serveur ou vers le client (send, request, wait, on, onTraffic)
- Interception des messages pour les laisser passer, les bloquer ou les remplacer, par champs ou en octets bruts (intercept)
- Messages protobuf décodés en objets JavaScript, avec accès aux octets bruts
- Un même script fonctionne en Full socket et en MITM
- Déplacement sur la carte et pathfinding qui calcule le même chemin que le client Dofus
- Lecture des données du jeu depuis les scripts : textes, enregistrements, tables, recherche et requêtes SQL
- Dépendances entre paquets avec versions : un script haut niveau peut réutiliser des paquets bas niveau, ou les réécrire
- Éditeur de code intégré avec autocomplétion du SDK et de tous les messages, détection d'erreurs et lancement en un clic sur un bot

Bibliothèque de paquets
- Bibliothèque sur asterobot.net où tout membre peut publier ses paquets
- Installation en collant simplement le lien du paquet
- Vérification des mises à jour, les nouvelles versions s'installent à côté des anciennes

Asteroboard, l'interface web
- Interface graphique pour asterobot qui se connecte à votre Asterobot, installable comme une application
- Utilisable depuis un autre PC ou un téléphone
- Disponible en français, en anglais et en espagnol
- Gestion des bots : ajout, connexion, états, lancement, arrêt et changement de paquet, réglages
- Console par bot : messages d'Asterobot, sortie des scripts et chat du jeu, avec filtres, recherche et réponse en jeu
- Informations du compte et du serveur de jeu
- Inventaire en direct : objets par catégorie avec leurs effets, kamas, pods, destruction d'objets
- Outil réseau : trafic en direct avec tous les champs, filtre, recherche, et envoi manuel d'un message au serveur ou au client
- Gestionnaire de comptes Ankama avec l'état de connexion de chaque compte
- Gestionnaire de jeux : téléchargement des versions de Dofus depuis Ankama, extraction des données, plusieurs versions côte à côte
- Page serveur : état, console d'Asterobot et tous les réglages

Exploration et analyse du jeu
- Carte du monde avec recherche de monstres, ressources, zaaps et donjons
- Visionneuse de carte par identifiant ou coordonnées : sorties, cellules, export en image
- Navigateur des données du jeu : recherche, tables filtrables, liens entre enregistrements
- Éditeur SQL avec des exemples prêts à lancer
- Textes du jeu par identifiant ou par clé, dans chaque langue
- Lecteur de musique du jeu
- Référence complète du protocole Dofus 3 en ligne, avec chaque message et ses champs
- Le sniffer MITM et la base de données extraite en font un vrai outil pour déboguer les messages et le contenu du jeu

Plateformes et déploiement
- Windows, macOS et Linux, sur Intel/AMD et ARM (Et docker)
- En local, sur votre réseau ou sur un serveur distant, avec HTTPS et mot de passe pour l'accès à distance
- Ligne de commande pour télécharger des versions du jeu, gérer les paquets et réinitialiser
- Asterobot vous prévient quand une nouvelle version sort, et Asteroboard se met à jour tout seul

Documentation
- Guide complet, documentation développeur avec tutoriels et référence de chaque fonction, FAQ (en anglais pour l'instant)
- Forum et Discord pour l'entraide

Voici un exemple pour le Full socket. C'est le script qui manque le plus aujourd'hui : celui qui fait entrer le bot en jeu. Il s'identifie, récupère la liste des personnages, choisit celui indiqué dans les réglages (ou le premier de la liste) et attend que le personnage soit chargé. Il exporte aussi enterGame(), pour qu'un autre paquet (un script de farm par exemple) le prenne en dépendance et l'appelle pour entrer en jeu.

JavaScript:
import { session, botInfo } from "asterobot:bot";
import { values } from "asterobot:parameters";
import { send, wait } from "asterobot:protocol";

/** @type {BehaviorParameters} */
export const parameters = {
  character: {
    type: "string",
    label: "Personnage",
    description: "Nom du personnage à jouer. Laissez vide pour prendre le premier de la liste.",
  },
};

const TIMEOUT = { timeout: 15000 };

// Commence à attendre la réponse avant d'envoyer, pour ne jamais la rater.
async function exchange(type, payload, answer) {
  const [reply] = await Promise.all([wait(answer, TIMEOUT), send(type, payload)]);
  return reply;
}

// Exportée : un autre paquet peut dépendre de celui-ci et l'appeler pour entrer en jeu.
export async function enterGame(characterName = "") {
  // 1. Identification avec le ticket de la session
  const auth = await exchange(
    "IdentificationRequest",
    { ticketKey: session.gameToken, languageCode: session.language },
    (traffic) =>
      traffic.type === "AuthenticationTicketAcceptedEvent" ||
      traffic.type === "AuthenticationTicketRefusedEvent",
  );
  if (auth.type === "AuthenticationTicketRefusedEvent") throw new Error("Ticket refusé par le serveur");

  // 2. Liste des personnages du compte sur ce serveur
  const list = await exchange("CharacterListRequest", {}, "CharacterListEvent");
  const characters = (list.payload?.characters ?? []).filter((c) => c.characterBasicInformation);
  const wanted = characterName.trim().toLowerCase();
  const chosen = wanted
    ? characters.find((c) => c.characterBasicInformation.name.toLowerCase() === wanted)
    : characters[0];
  if (!chosen) {
    throw new Error(wanted ? `Personnage introuvable : ${characterName}` : "Aucun personnage sur ce serveur");
  }

  const { name, level } = chosen.characterBasicInformation;
  botInfo(`Sélection de ${name}, niveau ${level}`);

  // 3. Sélection du personnage (son id est un BigInt), puis chargement dans le monde
  const selection = await exchange(
    "CharacterSelectionRequest",
    { characterId: chosen.id },
    "CharacterSelectionEvent",
  );
  if (!selection.payload?.success) throw new Error(`Sélection de ${name} refusée`);

  await wait("CharacterLoadingCompleteEvent", TIMEOUT);
  botInfo(`${name} est en jeu`);
  return selection.payload.success.character;
}

export default async function behavior(launch) {
  // Seule une nouvelle connexion Full socket doit entrer en jeu : un bot MITM y est déjà.
  if (launch.reason !== "initial") return;
  await enterGame(values.character ?? "");
}

En une quarantaine de lignes, ce script intercepte et bloque des messages du client, déplace le personnage, interroge la base de données du jeu en SQL et expose un réglage dans l'interface. Et comme un paquet peut dépendre d'un autre, ces commandes peuvent à leur tour servir de base à des scripts plus gros.

Où en est le projet
La base est maintenant solide : les connexions Full socket et MITM, le SDK, l'interface, la bibliothèque de paquets et la documentation sont en place. La prochaine étape pour moi, c'est d'ajouter la prise en charge de nouveaux messages réseau du jeu, et de recueillir les retours de mes testeurs pour corriger et améliorer ce qui doit l'être.

Ce que l'exemple montre :
- Attendre avant d'envoyer : Promise.all avec wait() puis send() évite de rater une réponse qui arriverait trop vite.
- Deux réponses possibles : un sélecteur en fonction attend à la fois l'acceptation et le refus du ticket.
- Oneof : CharacterSelectionEvent ne contient que success ou que error, et le script teste lequel est présent.
- BigInt : l'id du personnage est un int64, renvoyé tel quel dans CharacterSelectionRequest.
- Réutilisation : enterGame() est exporté, donc un script de haut niveau peut s'appuyer sur ce script de bas niveau.

Galerie
Recording88cfd322e9ad703c5fc324493482acfc


Liens:
-
-
-
Post automatiquement fusionné:

Reservé 1
 
Dernière édition:

Utilisateurs qui ont regardés le poste (Total Members: 4)

  • cuixer
  • zoeke
  • 777_persona
  • CrdaN