Skip to content

API UO Messenger it

Codex edited this page Oct 3, 2026 · 1 revision

UO.Messenger

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

ClassicUO • Runtime API

Crea un oggetto per messaggi di testo Telegram, Discord o Viber. Uno script può notificare la fine della raccolta o controllare una richiesta di arresto da un mittente autorizzato. La creazione non collega il bot e non invia nulla.

Sintassi esatta

UO.Messenger(provider:String) -> Object

Parametri

  • provider — String: "telegram", "discord" o "viber", senza distinzione fra maiuscole e minuscole. Altri valori causano un errore.

Restituisce

Object Messenger. Gli ID di messaggi, mittenti e chat sono sempre String; non convertirli tramite CInt/CDbl.

Comportamento

  • Provider() → String; Connected() → 1/0 (True/False): servizio e ultimo stato di autenticazione, non una garanzia della connessione Internet attuale.
  • Connect(token) → Unit autentica il bot. ConnectFromFile(path) → Unit legge un file UTF-8 fino a 1024 byte; percorsi relativi alla cartella dello script corrente. Chiamare Disconnect prima di riconnettere.
  • Disconnect() → Unit ferma la ricezione locale e cancella token/cursori; consente la riconnessione. Dispose() → Unit chiude definitivamente l’oggetto.
  • SendMessage(text, recipient) → String: ID del messaggio accettato. recipient è chat ID Telegram, channel ID Discord o ID abbonato Viber, come testo. Lunghezze 1..4096/2000/7000; JSON Viber ≤30000 byte. Menzioni everyone/ruoli Discord disabilitate.
  • WatchChannel(channelId) → Unit: Discord, registra l’ultimo messaggio attuale e riceve i successivi. WatchChannel(channelId, afterMessageId) → Unit: parte dopo l’ID testuale indicato; "0" include la cronologia. Massimo 32 canali.
  • Receive(timeoutSeconds) → Array; Receive() usa 0. Intervallo 0..20 secondi; array vuoto se non c’è testo disponibile. Telegram usa long polling, Discord interroga i canali e Viber legge la coda webhook. Una richiesta può durare 30 secondi.
  • MessengerMessage: Id(), SenderId(), SenderName(), ChatId(), Text() → String. I post dei canali Telegram possono non avere SenderId. Allegati, eventi non testuali e messaggi di bot Discord vengono omessi.
  • RetryAfter() → Integer: secondi residui dopo un limite del servizio; nessuna nuova richiesta HTTP prima della scadenza. Gli invii falliti non vengono ripetuti automaticamente: potrebbero essere già consegnati.
  • StartReceiver(localPort, publicHttpsUrl) → Integer: Viber, porta 1..65535; restituisce la porta locale. L’URL HTTPS pubblico deve terminare con /viber/ e inoltrare già POST a 127.0.0.1:porta/viber/ conservando corpo e firma. Registra il webhook.
  • Serve un token di bot. Un webhook Telegram esistente viene rifiutato senza cancellarlo. Discord richiede permessi di lettura/invio e MESSAGE_CONTENT; Viber invia agli abbonati.
  • I cursori avanzano dopo la decodifica dell’intero lotto. Telegram/Discord: fino a 100 record per richiesta; ripetere Receive. Viber: HMAC-SHA256, coda di 100, deduplicazione degli ultimi 2048 ID; overflow HTTP 503. Il proxy deve fornire Content-Length; chunked rifiutato localmente.
  • I token non vengono salvati nei profili, negli errori o nella cronologia degli argomenti Connect. ConnectFromFile evita anche una variabile visibile al debugger. Non pubblicare i file dei token.
  • Creare dentro una procedura; massimo 32 oggetti attivi. Using/Dispose, fine, errore e Stop liberano le risorse. Chiudere Viber non elimina il webhook remoto. Il testo ricevuto non viene eseguito come codice; lo script sceglie i mittenti fidati.

Funzioni interne: dalla chiamata al risultato

CreateMessenger crea senza rete e assegna le risorse all’esecuzione corrente dello script.

1. CreateMessenger

CreateMessenger crea senza rete e assegna le risorse all’esecuzione corrente dello script.

Object Messenger. Gli ID di messaggi, mittenti e chat sono sempre String; non convertirli tramite CInt/CDbl.

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; funzione CreateMessenger.

2. RequestAsync

RequestAsync prepara JSON/intestazioni del servizio, verifica gli stati e limita la risposta a 2 MiB e la richiesta a 30 secondi; l’annullamento interrompe l’attesa.

Errori gestibili con Try/Catch; Stop resta annullamento. Un errore di invio non prova la mancata consegna.

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; funzione RequestAsync.

3. Accept

Accept verifica firma Viber e UTF-8 e accoda il testo. Receive lo passa allo script; nessun callback di script nel thread di rete.

Errori gestibili con Try/Catch; Stop resta annullamento. Un errore di invio non prova la mancata consegna.

Sorgente del progetto: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; funzione Accept.

Le risorse si chiudono alla fine della procedura iniziale, per errore o Stop.

Esempi

Telegram: lavoro terminato

# Telegram: lavoro terminato
#
# Crea un oggetto per messaggi di testo Telegram, Discord o Viber. Uno script può notificare la
# fine della raccolta o controllare una richiesta di arresto da un mittente autorizzato. La
# creazione non collega il bot e non invia nulla.
#
# Object Messenger. Gli ID di messaggi, mittenti e chat sono sempre String; non convertirli
# tramite CInt/CDbl.

SUB Main()
    # Inserire telegram-token.txt accanto allo script e sostituire 12345678 con il chat ID. Invia un
    # avviso e restituisce l’ID testuale, non una conferma di lettura.
    # Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari
    # reali.

    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

Spiegazione dei parametri e dell’esecuzione:

  • Inserire telegram-token.txt accanto allo script e sostituire 12345678 con il chat ID. Invia un avviso e restituisce l’ID testuale, non una conferma di lettura.
  • Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari reali.

Discord: richiesta di arresto

# Discord: richiesta di arresto
#
# Crea un oggetto per messaggi di testo Telegram, Discord o Viber. Uno script può notificare la
# fine della raccolta o controllare una richiesta di arresto da un mittente autorizzato. La
# creazione non collega il bot e non invia nulla.
#
# Object Messenger. Gli ID di messaggi, mittenti e chat sono sempre String; non convertirli
# tramite CInt/CDbl.

SUB Main()
    # Impostare canale e mittente autorizzato. True indica la ricezione di stop da tale mittente.
    # L’esempio non ferma il movimento; usare il risultato nel proprio ciclo.
    # Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari
    # reali.

    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

Spiegazione dei parametri e dell’esecuzione:

  • Impostare canale e mittente autorizzato. True indica la ricezione di stop da tale mittente. L’esempio non ferma il movimento; usare il risultato nel proprio ciclo.
  • Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari reali.

Viber: testo firmato

# Viber: testo firmato
#
# Crea un oggetto per messaggi di testo Telegram, Discord o Viber. Uno script può notificare la
# fine della raccolta o controllare una richiesta di arresto da un mittente autorizzato. La
# creazione non collega il bot e non invia nulla.
#
# Object Messenger. Gli ID di messaggi, mittenti e chat sono sempre String; non convertirli
# tramite CInt/CDbl.

SUB Main()
    # Accanto allo script: viber-token.txt e viber-settings.json con
    # {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurare il proxy HTTPS e sostituire
    # trusted-subscriber-id. Restituisce testo o stringa vuota.
    # Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari
    # reali.

    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

Spiegazione dei parametri e dell’esecuzione:

  • Accanto allo script: viber-token.txt e viber-settings.json con {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurare il proxy HTTPS e sostituire trusted-subscriber-id. Restituisce testo o stringa vuota.
  • Configurare il proprio bot. Esempi eseguiti con risposte di prova locali, senza destinatari reali.

Clone this wiki locally