Skip to content

API UO Messenger es

Codex edited this page Oct 3, 2026 · 1 revision

UO.Messenger

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

ClassicUO • Runtime API

Crea un objeto de mensajes de texto para Telegram, Discord o Viber. Un script puede avisar de que terminó la recolección o comprobar una solicitud de parada de un remitente autorizado. Crearlo no conecta el bot ni envía mensajes.

Sintaxis exacta

UO.Messenger(provider:String) -> Object

Parámetros

  • provider — String: "telegram", "discord" o "viber", sin distinguir mayúsculas. Otros valores producen un error.

Devuelve

Object Messenger. Los ID de mensajes, remitentes y chats siempre son String; no convertirlos mediante CInt/CDbl.

Comportamiento

  • Provider() → String; Connected() → 1/0 (True/False): servicio y último estado de autenticación, no una garantía de acceso actual a Internet.
  • Connect(token) → Unit autentica el bot. ConnectFromFile(path) → Unit lee un archivo UTF-8 de hasta 1024 bytes; las rutas relativas parten de la carpeta del script actual. Usar Disconnect antes de volver a conectar.
  • Disconnect() → Unit detiene la recepción local y borra token/cursores; permite reconectar. Dispose() → Unit cierra definitivamente el objeto.
  • SendMessage(text, recipient) → String: ID del mensaje aceptado. recipient es el chat ID de Telegram, channel ID de Discord o ID de suscriptor de Viber, como texto. Longitudes 1..4096/2000/7000; JSON Viber ≤30000 bytes. No se permiten menciones everyone/roles de Discord.
  • WatchChannel(channelId) → Unit: Discord, guarda el último mensaje actual y recibe los posteriores. WatchChannel(channelId, afterMessageId) → Unit: empieza después de ese ID de texto; "0" incluye historial. Hasta 32 canales.
  • Receive(timeoutSeconds) → Array; Receive() usa 0. Intervalo 0..20 segundos; array vacío si no hay texto disponible. Telegram usa long polling, Discord consulta canales y Viber lee su cola webhook. Una petición de red puede tardar 30 segundos.
  • MessengerMessage ofrece Id(), SenderId(), SenderName(), ChatId(), Text() → String. Las publicaciones de canales Telegram pueden carecer de SenderId. Se omiten adjuntos, eventos sin texto y mensajes de bots Discord.
  • RetryAfter() → Integer: segundos restantes tras un límite del servicio; hasta entonces no se hacen más peticiones HTTP. Los envíos fallidos no se repiten automáticamente porque podrían haberse entregado.
  • StartReceiver(localPort, publicHttpsUrl) → Integer: Viber, puerto 1..65535; devuelve el puerto local. La URL HTTPS pública debe acabar en /viber/ y reenviar previamente los POST a 127.0.0.1:puerto/viber/ conservando cuerpo y firma. Registra el webhook.
  • Se necesita un token de bot. Un webhook existente de Telegram se rechaza sin eliminarlo. Discord requiere permisos de lectura/envío y MESSAGE_CONTENT; Viber envía a suscriptores.
  • Los cursores avanzan tras decodificar todo el lote. Telegram/Discord: hasta 100 registros por petición; llamar Receive de nuevo. Viber: HMAC-SHA256, cola de 100, deduplicación de los últimos 2048 ID; desbordamiento HTTP 503. El proxy debe enviar Content-Length; chunked se rechaza localmente.
  • Los tokens no se guardan en perfiles, errores ni historial de argumentos Connect. ConnectFromFile también evita una variable visible al depurador. No publicar archivos de tokens.
  • Crear dentro de una rutina; máximo 32 objetos activos. Using/Dispose, fin, error y Stop liberan recursos. Cerrar Viber no elimina el webhook remoto. El texto recibido nunca se ejecuta como código; el script define los remitentes de confianza.

Funciones internas: de la llamada al resultado

CreateMessenger crea sin acceso a la red y asigna los recursos a esta ejecución del script.

1. CreateMessenger

CreateMessenger crea sin acceso a la red y asigna los recursos a esta ejecución del script.

Object Messenger. Los ID de mensajes, remitentes y chats siempre son String; no convertirlos mediante CInt/CDbl.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; función CreateMessenger.

2. RequestAsync

RequestAsync construye JSON/cabeceras del servicio, comprueba estados y limita la respuesta a 2 MiB y la petición a 30 segundos; la cancelación interrumpe la espera.

Errores capturables con Try/Catch; Stop sigue siendo cancelación. Un error de envío no demuestra que no se entregó.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; función RequestAsync.

3. Accept

Accept verifica firma Viber y UTF-8, y encola el texto. Receive lo entrega al script; ningún callback del script corre en el hilo de red.

Errores capturables con Try/Catch; Stop sigue siendo cancelación. Un error de envío no demuestra que no se entregó.

Código del proyecto: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; función Accept.

Los recursos se cierran al terminar la rutina inicial, ante error y Stop.

Ejemplos

Telegram: trabajo terminado

# Telegram: trabajo terminado
#
# Crea un objeto de mensajes de texto para Telegram, Discord o Viber. Un script puede avisar de
# que terminó la recolección o comprobar una solicitud de parada de un remitente autorizado.
# Crearlo no conecta el bot ni envía mensajes.
#
# Object Messenger. Los ID de mensajes, remitentes y chats siempre son String; no convertirlos
# mediante CInt/CDbl.

SUB Main()
    # Poner telegram-token.txt junto al script y sustituir 12345678 por el chat ID. Envía un aviso y
    # devuelve su ID de texto, no una confirmación de lectura.
    # Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin
    # destinatarios reales.

    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

Explicación de los parámetros y la ejecución:

  • Poner telegram-token.txt junto al script y sustituir 12345678 por el chat ID. Envía un aviso y devuelve su ID de texto, no una confirmación de lectura.
  • Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin destinatarios reales.

Discord: solicitud de parada

# Discord: solicitud de parada
#
# Crea un objeto de mensajes de texto para Telegram, Discord o Viber. Un script puede avisar de
# que terminó la recolección o comprobar una solicitud de parada de un remitente autorizado.
# Crearlo no conecta el bot ni envía mensajes.
#
# Object Messenger. Los ID de mensajes, remitentes y chats siempre son String; no convertirlos
# mediante CInt/CDbl.

SUB Main()
    # Indicar canal y remitente autorizado. True significa que llegó stop de ese remitente. El
    # ejemplo no detiene el movimiento: usar el resultado en el bucle propio.
    # Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin
    # destinatarios reales.

    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

Explicación de los parámetros y la ejecución:

  • Indicar canal y remitente autorizado. True significa que llegó stop de ese remitente. El ejemplo no detiene el movimiento: usar el resultado en el bucle propio.
  • Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin destinatarios reales.

Viber: texto firmado

# Viber: texto firmado
#
# Crea un objeto de mensajes de texto para Telegram, Discord o Viber. Un script puede avisar de
# que terminó la recolección o comprobar una solicitud de parada de un remitente autorizado.
# Crearlo no conecta el bot ni envía mensajes.
#
# Object Messenger. Los ID de mensajes, remitentes y chats siempre son String; no convertirlos
# mediante CInt/CDbl.

SUB Main()
    # Junto al script: viber-token.txt y viber-settings.json con
    # {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurar proxy HTTPS y sustituir
    # trusted-subscriber-id. Devuelve texto o cadena vacía.
    # Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin
    # destinatarios reales.

    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

Explicación de los parámetros y la ejecución:

  • Junto al script: viber-token.txt y viber-settings.json con {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Configurar proxy HTTPS y sustituir trusted-subscriber-id. Devuelve texto o cadena vacía.
  • Configurar un bot propio. Ejemplos ejecutados con respuestas locales de prueba, sin destinatarios reales.

Clone this wiki locally