Skip to content

API UO Messenger fr

Codex edited this page Oct 3, 2026 · 1 revision

UO.Messenger

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

ClassicUO • Runtime API

Crée un objet de messagerie texte Telegram, Discord ou Viber. Un script peut signaler la fin d’une récolte ou vérifier une demande d’arrêt provenant d’un expéditeur autorisé. La création ne connecte pas le bot et n’envoie rien.

Syntaxe exacte

UO.Messenger(provider:String) -> Object

Paramètres

  • provider — String : "telegram", "discord" ou "viber", sans distinction de casse. Toute autre valeur provoque une erreur.

Retour

Object Messenger. Les identifiants de message, d’expéditeur et de conversation restent des String : ne pas les convertir avec CInt/CDbl.

Comportement

  • Provider() → String ; Connected() → 1/0 (True/False) : service et dernier état d’authentification, pas une garantie d’accès Internet actuel.
  • Connect(token) → Unit authentifie le bot. ConnectFromFile(path) → Unit lit un fichier UTF-8 de 1024 octets maximum ; chemin relatif au dossier du script courant. Appeler Disconnect avant une nouvelle connexion.
  • Disconnect() → Unit arrête la réception locale et efface jeton/curseurs ; reconnexion possible. Dispose() → Unit ferme définitivement l’objet.
  • SendMessage(text, recipient) → String : identifiant du message accepté. recipient est le chat ID Telegram, channel ID Discord ou ID d’abonné Viber, sous forme de texte. Longueur 1..4096/2000/7000 ; JSON Viber ≤30000 octets. Les mentions everyone/rôles Discord sont désactivées.
  • WatchChannel(channelId) → Unit : Discord, mémorise le dernier message actuel et reçoit les suivants. WatchChannel(channelId, afterMessageId) → Unit reprend après cet ID texte ; "0" inclut l’historique. Maximum 32 canaux.
  • Receive(timeoutSeconds) → Array ; Receive() utilise 0. Délai 0..20 secondes ; tableau vide si aucun texte disponible. Telegram utilise le long polling, Discord interroge les canaux, Viber vide sa file webhook. Une requête réseau peut durer 30 secondes.
  • MessengerMessage : Id(), SenderId(), SenderName(), ChatId(), Text() → String. Un message de canal Telegram peut ne pas avoir de SenderId. Pièces jointes, événements non textuels et messages de bots Discord sont ignorés.
  • RetryAfter() → Integer : secondes restantes après une limitation du service. Aucune nouvelle requête HTTP avant ce délai. Un envoi en échec n’est jamais répété automatiquement : il a peut-être déjà été livré.
  • StartReceiver(localPort, publicHttpsUrl) → Integer : Viber, port 1..65535 ; retourne le port local. L’URL HTTPS publique doit finir par /viber/ et déjà transférer les POST vers 127.0.0.1:port/viber/ sans modifier corps ni signature. Enregistre le webhook.
  • Utiliser un jeton de bot. Le webhook Telegram existant est refusé sans suppression. Discord exige les permissions de lecture/envoi et MESSAGE_CONTENT ; Viber envoie aux abonnés.
  • Les curseurs avancent après décodage complet du lot. Telegram/Discord : jusqu’à 100 entrées par requête ; rappeler Receive. Viber : HMAC-SHA256, file de 100 messages, dédoublonnage des 2048 derniers ID ; débordement HTTP 503. Le relais doit fournir Content-Length ; chunked est refusé localement.
  • Les jetons ne sont pas enregistrés dans les profils, erreurs ou historique des arguments Connect. ConnectFromFile évite aussi une variable de script visible au débogueur. Ne pas publier les fichiers de jetons.
  • Créer dans une procédure, 32 objets actifs maximum. Using/Dispose, fin, erreur et Stop libèrent les ressources. Fermer Viber ne supprime pas son webhook distant. Le texte reçu n’est jamais exécuté comme du code ; le script définit les expéditeurs autorisés.

Fonctions internes : de l’appel au résultat

CreateMessenger crée sans réseau et rattache les ressources à cette exécution du script.

1. CreateMessenger

CreateMessenger crée sans réseau et rattache les ressources à cette exécution du script.

Object Messenger. Les identifiants de message, d’expéditeur et de conversation restent des String : ne pas les convertir avec CInt/CDbl.

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; fonction CreateMessenger.

2. RequestAsync

RequestAsync prépare JSON/en-têtes du service, vérifie le statut et limite la réponse à 2 Mio et la requête à 30 secondes ; l’annulation interrompt l’attente.

Erreurs interceptables avec Try/Catch ; Stop reste une annulation. Un échec d’envoi ne prouve pas l’absence de livraison.

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; fonction RequestAsync.

3. Accept

Accept vérifie la signature Viber et UTF-8, puis met le texte en file. Receive le remet au script ; aucun callback de script dans le thread réseau.

Erreurs interceptables avec Try/Catch ; Stop reste une annulation. Un échec d’envoi ne prouve pas l’absence de livraison.

Source du projet: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; fonction Accept.

Les ressources sont fermées à la fin de la procédure principale, sur erreur ou Stop.

Exemples

Telegram : travail terminé

# Telegram : travail terminé
#
# Crée un objet de messagerie texte Telegram, Discord ou Viber. Un script peut signaler la fin
# d’une récolte ou vérifier une demande d’arrêt provenant d’un expéditeur autorisé. La création
# ne connecte pas le bot et n’envoie rien.
#
# Object Messenger. Les identifiants de message, d’expéditeur et de conversation restent des
# String : ne pas les convertir avec CInt/CDbl.

SUB Main()
    # Placer telegram-token.txt à côté du script et remplacer 12345678 par votre chat ID. Un message
    # est envoyé ; son ID texte ne prouve pas sa lecture.
    # Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires
    # réels.

    Dim bot = UO.Messenger("telegram")
    Using bot
        bot.ConnectFromFile("telegram-token.txt")
        Dim messageId = bot.SendMessage("Harvest finished", "12345678")
        Return messageId
    End Using
END SUB

Explication des paramètres et du déroulement:

  • Placer telegram-token.txt à côté du script et remplacer 12345678 par votre chat ID. Un message est envoyé ; son ID texte ne prouve pas sa lecture.
  • Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires réels.

Discord : demande d’arrêt autorisée

# Discord : demande d’arrêt autorisée
#
# Crée un objet de messagerie texte Telegram, Discord ou Viber. Un script peut signaler la fin
# d’une récolte ou vérifier une demande d’arrêt provenant d’un expéditeur autorisé. La création
# ne connecte pas le bot et n’envoie rien.
#
# Object Messenger. Les identifiants de message, d’expéditeur et de conversation restent des
# String : ne pas les convertir avec CInt/CDbl.

SUB Main()
    # Renseigner canal et expéditeur. True indique la réception de stop de cet utilisateur. Cet
    # exemple n’arrête pas le déplacement ; utiliser le résultat dans votre boucle.
    # Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires
    # réels.

    Dim bot = UO.Messenger("discord")
    Using bot
        bot.ConnectFromFile("discord-token.txt")
        bot.WatchChannel("123456789012345678")
        Dim messages = bot.Receive(5)
        For Each message In messages
            If message.SenderId() = "987654321098765432" AndAlso LCase(Trim(message.Text())) = "stop" Then
                Return True
            End If
        Next
        Return False
    End Using
END SUB

Explication des paramètres et du déroulement:

  • Renseigner canal et expéditeur. True indique la réception de stop de cet utilisateur. Cet exemple n’arrête pas le déplacement ; utiliser le résultat dans votre boucle.
  • Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires réels.

Viber : texte signé

# Viber : texte signé
#
# Crée un objet de messagerie texte Telegram, Discord ou Viber. Un script peut signaler la fin
# d’une récolte ou vérifier une demande d’arrêt provenant d’un expéditeur autorisé. La création
# ne connecte pas le bot et n’envoie rien.
#
# Object Messenger. Les identifiants de message, d’expéditeur et de conversation restent des
# String : ne pas les convertir avec CInt/CDbl.

SUB Main()
    # À côté du script : viber-token.txt et viber-settings.json contenant
    # {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurer le relais HTTPS et remplacer
    # trusted-subscriber-id. Résultat : texte ou chaîne vide.
    # Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires
    # réels.

    Dim settings = JsonLoad("viber-settings.json")
    Dim bot = UO.Messenger("viber")
    Using bot
        bot.ConnectFromFile("viber-token.txt")
        bot.StartReceiver(settings["port"], settings["publicUrl"])
        Dim messages = bot.Receive(5)
        For Each message In messages
            If message.SenderId() = "trusted-subscriber-id" Then
                Return message.Text()
            End If
        Next
        Return ""
    End Using
END SUB

Explication des paramètres et du déroulement:

  • À côté du script : viber-token.txt et viber-settings.json contenant {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurer le relais HTTPS et remplacer trusted-subscriber-id. Résultat : texte ou chaîne vide.
  • Configurer votre bot. Exemples exécutés avec des réponses de test locales, sans destinataires réels.

Clone this wiki locally