Guide · algo-battle

Héberger son bot algo-battle sur DevHub

Ton bot pilote un char dans l'arène pendant que ton PC est éteint : il chasse au niveau 1, gagne de l'XP et fait monter ton bonus de chance de loot. Compte, code, hébergement : tout est ici.

Python API HTTP Niveaux 0, 1 et 2 Hébergement DevHub

algo-battle en deux minutes

algo-battle est une arène de chars pilotés par programme : ton bot lit l'état de l'arène, choisit un cap, vise et tire, par de simples requêtes HTTP. L'arène est organisée en donjon : chaque niveau a son défi.

Niveau 0 · ArèneNiveau 1 · Les CatacombesNiveau 2 · Machine learning
Accèsouvert à tousouvert à tousà 500 XP (bientôt)
Connexionpseudo seul, comme avantobligatoire (compte Discord)obligatoire
Adresse/api/join, /api/move…/api/niveau/1/join…
XPaucune+15 par kill, −8 par mort, +1 par fuyard
Le défiles bots des autres joueursen plus, des fuyards pilotés par un algorithme d'évasiondes adversaires qui apprennent
Charsautant que tu veux3 par compte, 10 balles en vol chacun

Tout se suit sur algo.devhub-community.fr : les niveaux 0 et 1 en direct, et la page des stats des joueurs du niveau 1 (classement, XP, kills, heures de présence, derniers combats).

1. Créer ton compte

Sur le Discord DevHub, tape /algo-battle connexion. Une fenêtre visible de toi seul s'ouvre : choisis ton mot de passe (8 caractères minimum, sans ton pseudo dedans). Ton identifiant, c'est ton pseudo Discord (ou ton identifiant Discord en chiffres).

Tu peux relancer la commande quand tu veux pour changer de mot de passe : l'ancien arrête de marcher aussitôt. /algo-battle profil affiche ton niveau, ton XP et tes stats.

Sans compte, ton bot joue quand même au niveau 0, exactement comme avant ({"username": "MonBot"}), mais sans XP : rien n'y prouve qui joue. L'XP se gagne au niveau 1, connecté à ton compte, et c'est elle qui ouvrira le niveau 2.

2. Un bot prêt à héberger

Un fichier, une dépendance (requests). Le mot de passe vient d'une variable d'environnement : jamais en dur dans le code, surtout si ton dépôt est public.

bot.py
"""Bot algo-battle minimal : fonce vers le char le plus proche et lui tire dessus."""
import math, os, time
import requests

API = os.environ.get("ALGO_API", "https://devhub-community.fr/api")
IDENTIFIANT = os.environ["ALGO_IDENTIFIANT"]                    # ton pseudo Discord
MOT_DE_PASSE = os.environ["ALGO_MOT_DE_PASSE"]                  # choisi avec /algo-battle connexion
NOM = os.environ.get("ALGO_NOM", "MonBot")                     # lettres, chiffres, _ et -

BASE = f"{API}/niveau/1"                                     # le niveau où l'XP compte
http = requests.Session()


def rejoindre():
    corps = {"identifiant": IDENTIFIANT, "mot_de_passe": MOT_DE_PASSE, "char": 1, "nom": NOM}
    while True:
        r = http.post(f"{BASE}/join", json=corps, timeout=5)
        if r.ok:
            j = r.json()                                    # un char repris garde son nom
            return j["player_id"], j.get("nom", NOM)
        print("join refusé :", r.status_code, r.text[:200])   # mort récente, niveau fermé, mauvais mot de passe...
        time.sleep(float(r.headers.get("Retry-After", 5)))


def envoyer(route, pid, dx, dy):
    """Envoie /move ou /shoot. Renvoie False si le char n'existe plus (détruit) : il faut refaire /join."""
    r = http.post(f"{BASE}/{route}", json={"player_id": pid, "direction_x": dx, "direction_y": dy}, timeout=5)
    if r.status_code == 429:                                # trop de requêtes : on attend ce que dit le serveur
        time.sleep(float(r.headers.get("Retry-After", 1)))
    return '"char_' not in r.text                            # code « char_mort » ou « char_introuvable »


pid, nom = rejoindre()
while True:
    etat = http.get(f"{BASE}/state", timeout=5).json()
    moi = next((p for p in etat["players"] if p["username"] == nom), None)
    autres = [p for p in etat["players"] if p is not moi]
    if moi is None:                                          # pas encore dans l'état (ou détruit) : on vérifie
        vivant = envoyer("move", pid, 0, 0)
    elif autres:
        cible = min(autres, key=lambda p: math.dist((p["x"], p["y"]), (moi["x"], moi["y"])))
        dx, dy = cible["x"] - moi["x"], cible["y"] - moi["y"]
        vivant = envoyer("move", pid, dx, dy) and envoyer("shoot", pid, dx, dy)
    else:
        vivant = envoyer("move", pid, 1, 0)                  # personne : on patrouille (sinon retiré après 2 min)
    if not vivant:
        pid, nom = rejoindre()
    time.sleep(0.1)                                          # 10 tours par seconde, largement assez
requirements.txt
requests>=2.31

Pour l'essayer chez toi : ALGO_IDENTIFIANT=ton_pseudo ALGO_MOT_DE_PASSE=... python bot.py. Toutes les routes et les règles sont dans la documentation de l'API.

3. L'héberger sur DevHub

  1. Atteins le niveau du site demandé par le plan (affiché dans le shop ; c'est ton activité des derniers jours sur le Discord, visible sur ton espace perso).
  2. Dans le shop, demande « Hébergement de bot algo-battle » : 1 bot, 128 Mo de RAM, un quart de cœur, 512 Mo de disque. Rien à payer.
  3. Tu arrives sur le panel d'hébergement : connecte-toi avec Discord, ton accès est déjà actif.
  4. Déploie depuis ton dépôt Git public ou une archive ZIP contenant bot.py et requirements.txt. Commande de démarrage : python bot.py.
  5. Ajoute les variables d'environnement ALGO_IDENTIFIANT, ALGO_MOT_DE_PASSE (secrète, stockée chiffrée), et si tu veux ALGO_NOM.
  6. Démarre, lis les logs, et regarde ton char apparaître sur le panel.
Mêmes règles que les autres hébergements : conteneur isolé, aucun port entrant, ressources limitées, et le niveau du site à garder chaque mois. Les bots hébergés partagent une adresse IP : si algo-battle répond 429, attends le temps indiqué par Retry-After (le bot ci-dessus le fait déjà).

4. XP, niveaux et bonus de loot

  • XP : seulement au niveau 1. Un kill en rapporte, une mort en coûte, jamais en dessous de 0. Elle ne compte qu'à partir de l'ouverture du donjon : les kills d'avant ne rapportent rien.
  • Pas de farm : l'XP gagnée par heure est plafonnée, et tuer encore la même victime rapporte de moins en moins.
  • Niveau 1, le niveau algorithme : ouvert à tous les comptes. Six fuyards y tournent en permanence : ils ne tirent pas, esquivent les balles, se cachent derrière les obstacles et vont un peu plus vite que toi. Viser droit ne suffit pas : il faut anticiper, les coincer contre un mur ou chasser à plusieurs. Chacun rapporte 1 XP.
  • Niveau 2, le niveau machine learning : annoncé, il s'ouvrira à 500 XP. L'XP gagnée d'ici là compte déjà, et une fois ouvert, il le restera.
  • Bonus de chance de loot : tant que ton bot est en ligne (un char en jeu, connecté, qui envoie des commandes), chaque demi-heure augmente un peu ta chance de loot des prochains niveaux. Il monte doucement et plafonne à 5 %.
En ligne1 jour1 semaine1 mois3 mois
Bonus de chance de loot+0,12 %+0,8 %+2,6 %+4,4 %

Il n'y a pas encore de loot : le bonus est compté dès maintenant pour plus tard. C'est là que l'hébergement fait la différence : un bot qui tourne 24 h/24 avance pendant que tu dors.

Compte sur Discord, code ci-dessus, plan dans le shop : ton char peut être dans l'arène ce soir.