Skip to content

API UO Messenger uk

Codex edited this page Oct 3, 2026 · 1 revision

UO.Messenger

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

ClassicUO • Runtime API

Створює об’єкт текстових повідомлень Telegram, Discord або Viber. Скрипт може повідомити про завершення збору ресурсів або перевірити запит зупинки від дозволеного відправника. Створення об’єкта не підключає бота й нічого не надсилає.

Точний синтаксис

UO.Messenger(provider:String) -> Object

Параметри

  • provider — String: "telegram", "discord" або "viber", без урахування регістру. Інші значення спричиняють помилку.

Повертає

Object Messenger. ID повідомлень, відправників і чатів завжди String; не перетворюйте їх через CInt/CDbl.

Поведінка

  • Provider() → String; Connected() → 1/0 (True/False): постачальник і останній стан авторизації, а не гарантія доступності мережі.
  • Connect(token) → Unit: перевіряє токен бота. ConnectFromFile(path) → Unit: UTF-8 файл до 1024 байт; відносний шлях — від папки поточного скрипту. Перед повторним підключенням викликайте Disconnect.
  • Disconnect() → Unit: зупиняє локальний прийом, очищає токен і курсори; повторне підключення дозволене. Dispose() → Unit: закриває об’єкт остаточно.
  • SendMessage(text, recipient) → String: ID прийнятого повідомлення. recipient — рядковий chat ID Telegram, channel ID Discord або ID підписника Viber. Довжина тексту 1..4096/2000/7000 відповідно; Viber JSON ≤30000 байт. Згадки everyone/ролей Discord вимкнені.
  • WatchChannel(channelId) → Unit: Discord, лише нові повідомлення після поточного останнього. WatchChannel(channelId, afterMessageId) → Unit: після заданого рядкового ID; "0" включає історію. До 32 каналів.
  • Receive(timeoutSeconds) → Array; Receive() означає 0. Діапазон 0..20 секунд; порожній масив — немає доступного тексту. Telegram використовує long polling, Discord опитує канали, Viber читає чергу. Мережевий запит може тривати до 30 секунд.
  • MessengerMessage: Id(), SenderId(), SenderName(), ChatId(), Text() → String. У допису каналу Telegram SenderId може бути порожнім. Вкладення, нетекстові події та повідомлення ботів Discord пропускаються.
  • RetryAfter() → Integer: скільки секунд чекати після обмеження сервісу; до цього нові запити блокуються. Невдалі надсилання автоматично не повторюються — доставка могла вже відбутися.
  • StartReceiver(localPort, publicHttpsUrl) → Integer: Viber, порт 1..65535, повертає локальний порт. HTTPS-адреса має завершуватися /viber/; заздалегідь налаштуйте пересилання POST на 127.0.0.1:порт/viber/ зі збереженням тіла та підпису. Реєструє webhook.
  • Потрібен токен бота. Наявний webhook Telegram відхиляється без видалення. Discord потребує прав читання/надсилання та MESSAGE_CONTENT; Viber надсилає підписникам.
  • Курсори зберігаються після розбору всієї пачки; Telegram/Discord — до 100 записів за запит. Для продовження викликайте Receive знову. Viber: HMAC-SHA256, черга 100, перевірка повторів останніх 2048 ID; переповнення — HTTP 503. Проксі має передавати Content-Length, не chunked.
  • Токен не зберігається у профілі, помилках чи історії аргументів Connect. ConnectFromFile також не створює змінної з токеном для відладчика. Не публікуйте файли токенів.
  • Створюйте об’єкт усередині процедури; до 32 одночасно. Using/Dispose, завершення, помилка або Stop звільняють ресурси. Закриття Viber не видаляє віддалений webhook. Отриманий текст не виконується як код; дозволених відправників визначає скрипт.

Внутрішні функції: від виклику до результату

CreateMessenger створює об’єкт без мережі та прив’язує ресурси до виконання скрипту.

1. CreateMessenger

CreateMessenger створює об’єкт без мережі та прив’язує ресурси до виконання скрипту.

Object Messenger. ID повідомлень, відправників і чатів завжди String; не перетворюйте їх через CInt/CDbl.

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; функція CreateMessenger.

2. RequestAsync

RequestAsync формує JSON і заголовки сервісу; перевіряє статус, обмежує відповідь 2 МіБ і запит 30 секундами; підтримує скасування.

Помилки перехоплюються Try/Catch; Stop залишається скасуванням. Помилка надсилання не доводить відсутність доставки.

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; функція RequestAsync.

3. Accept

Accept перевіряє підпис Viber і UTF-8, додає текст у чергу; Receive повертає його скрипту. Скриптові обробники в мережевому потоці не запускаються.

Помилки перехоплюються Try/Catch; Stop залишається скасуванням. Помилка надсилання не доводить відсутність доставки.

Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; функція Accept.

Ресурси закриваються після завершення вхідної процедури, помилки або Stop.

Приклади

Telegram: завершення роботи

# Telegram: завершення роботи
#
# Створює об’єкт текстових повідомлень Telegram, Discord або Viber. Скрипт може повідомити про
# завершення збору ресурсів або перевірити запит зупинки від дозволеного відправника. Створення
# об’єкта не підключає бота й нічого не надсилає.
#
# Object Messenger. ID повідомлень, відправників і чатів завжди String; не перетворюйте їх через
# CInt/CDbl.

SUB Main()
    # Покладіть telegram-token.txt поруч зі скриптом, замініть 12345678 своїм chat ID. Одне
    # повідомлення; повертається рядковий ID, а не підтвердження прочитання.
    # Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних
    # одержувачів.

    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

Пояснення параметрів і виконання:

  • Покладіть telegram-token.txt поруч зі скриптом, замініть 12345678 своїм chat ID. Одне повідомлення; повертається рядковий ID, а не підтвердження прочитання.
  • Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних одержувачів.

Discord: запит зупинки

# Discord: запит зупинки
#
# Створює об’єкт текстових повідомлень Telegram, Discord або Viber. Скрипт може повідомити про
# завершення збору ресурсів або перевірити запит зупинки від дозволеного відправника. Створення
# об’єкта не підключає бота й нічого не надсилає.
#
# Object Messenger. ID повідомлень, відправників і чатів завжди String; не перетворюйте їх через
# CInt/CDbl.

SUB Main()
    # Укажіть канал і дозволеного відправника. True означає отриманий від нього текст stop; рух цей
    # приклад не зупиняє. Використайте результат у власному циклі.
    # Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних
    # одержувачів.

    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

Пояснення параметрів і виконання:

  • Укажіть канал і дозволеного відправника. True означає отриманий від нього текст stop; рух цей приклад не зупиняє. Використайте результат у власному циклі.
  • Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних одержувачів.

Viber: підписаний текст

# Viber: підписаний текст
#
# Створює об’єкт текстових повідомлень Telegram, Discord або Viber. Скрипт може повідомити про
# завершення збору ресурсів або перевірити запит зупинки від дозволеного відправника. Створення
# об’єкта не підключає бота й нічого не надсилає.
#
# Object Messenger. ID повідомлень, відправників і чатів завжди String; не перетворюйте їх через
# CInt/CDbl.

SUB Main()
    # Поруч потрібні viber-token.txt і viber-settings.json:
    # {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Налаштуйте HTTPS-проксі, замініть
    # trusted-subscriber-id. Результат — текст або порожній рядок.
    # Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних
    # одержувачів.

    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

Пояснення параметрів і виконання:

  • Поруч потрібні viber-token.txt і viber-settings.json: {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. Налаштуйте HTTPS-проксі, замініть trusted-subscriber-id. Результат — текст або порожній рядок.
  • Налаштуйте власного бота. Приклади виконано з локальними тестовими відповідями без реальних одержувачів.

Clone this wiki locally