-
Notifications
You must be signed in to change notification settings - Fork 0
API 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. Это не Boolean и не ID. ID сообщений, отправителей и чатов в этом объекте всегда String: сравнивайте их со строками, не преобразуйте через CInt/CDbl.
-
Provider() → String;Connected() → 1/0(True/False): поставщик и результат последней проверки авторизации. Connected не гарантирует доступность Интернета в эту секунду. -
Connect(token) → Unit: проверяет токен бота;ConnectFromFile(path) → Unit: читает токен UTF-8 из файла до 1024 байт. Относительный путь считается от папки текущего скрипта. Повторное подключение требует Disconnect. Ошибки можно перехватить Try/Catch. -
Disconnect() → Unit: прекращает локальный приём, очищает токен и курсоры; объект можно подключить снова.Dispose() → Unit: закрывает объект окончательно. -
SendMessage(text, recipient) → String: ID принятого сообщения. Параметры — текст и строковый chat ID Telegram, channel ID Discord либо ID подписчика Viber. Лимиты длины: 4096/2000/7000 соответственно; также Viber JSON ≤30000 байт. Пустой текст запрещён. Discord не создаёт упоминания everyone/ролей. -
WatchChannel(channelId) → Unit: Discord, запоминает текущее последнее сообщение и читает только последующие.WatchChannel(channelId, afterMessageId) → Unit: начинает после заданного строкового ID; "0" включает историю. До 32 каналов на объект. -
Receive(timeoutSeconds) → Array;Receive(): таймаут 0. Диапазон 0..20 секунд; пустой массив означает отсутствие доступных текстовых сообщений. Telegram использует long polling, Discord опрашивает выбранные каналы, Viber читает очередь webhook. Сетевой запрос может занять до 30 секунд. - Каждый MessengerMessage:
Id(),SenderId(),SenderName(),ChatId(),Text()→ String. У поста Telegram от канала может не быть SenderId. Вложения, нетекстовые события и сообщения Discord от ботов не возвращаются. -
RetryAfter() → Integer: сколько секунд ещё ждать после ограничения сервиса. До истечения этого срока новые HTTP-запросы не выполняются. Отправка после сбоя не повторяется автоматически: сервер мог уже принять сообщение. -
StartReceiver(localPort, publicHttpsUrl) → Integer: только Viber; порт 1..65535, возвращает занятый локальный порт. Публичный HTTPS-адрес должен оканчиваться /viber/ и заранее пересылать POST на 127.0.0.1:порт/viber/ с исходным телом и заголовком подписи. Метод регистрирует webhook у Viber. - Нужен токен бота, не пароль личного аккаунта. Telegram с существующим webhook отклоняется без его удаления. Discord требует прав чтения/отправки канала и MESSAGE_CONTENT для доступного текста; Viber отправляет подписавшимся пользователям.
- Receive сохраняет курсор только после разбора всей пачки. Telegram/Discord возвращают до 100 записей за запрос; вызывайте Receive снова для следующих пачек. Discord без второго аргумента WatchChannel пропускает старую историю.
- Viber проверяет HMAC-SHA256 исходного тела. Очередь — 100 сообщений, повторные ID хранятся для последних 2048 доставок; переполнение даёт HTTP 503 для повтора сервисом. Нужен HTTPS-прокси с Content-Length; chunked-запросы на локальном входе отклоняются.
- Токен не записывается в профиль, текст ошибок и историю аргументов Connect. Используйте ConnectFromFile, чтобы не хранить его в переменных скрипта, видимых отладчику. Не публикуйте файлы токенов.
- Создавайте объект внутри процедуры. Не более 32 одновременно; Using/Dispose освобождает его раньше. При завершении, ошибке или остановке скрипта все его messenger-объекты закрываются. Закрытие Viber-приёмника не удаляет webhook у сервиса.
- Это текстовый интерфейс: он не выполняет полученный текст как код и не подключает игровые аккаунты. Условия доверия к отправителю задаёт сам скрипт.
CreateMessenger создаёт объект без сетевого обмена и привязывает его ресурсы к текущему выполнению скрипта.
CreateMessenger создаёт объект без сетевого обмена и привязывает его ресурсы к текущему выполнению скрипта.
Object Messenger. Это не Boolean и не ID. ID сообщений, отправителей и чатов в этом объекте всегда String: сравнивайте их со строками, не преобразуйте через CInt/CDbl.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; функция CreateMessenger.
RequestAsync формирует JSON и заголовки конкретного сервиса; проверяет HTTP и внутренний результат. Лимит ответа 2 МиБ, общая граница ожидания 30 секунд, отмена скрипта прерывает ожидание.
При ошибке — исключение для Try/Catch; Stop остаётся отменой выполнения. Ошибка отправки не доказывает, что сообщение не было доставлено.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; функция RequestAsync.
Accept проверяет подпись Viber, разбирает UTF-8 и добавляет текст в ограниченную очередь. Receive выдаёт сообщения скрипту; обработчик скрипта в сетевом потоке не вызывается.
При ошибке — исключение для Try/Catch; Stop остаётся отменой выполнения. Ошибка отправки не доказывает, что сообщение не было доставлено.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; функция Accept.
Ресурсы освобождаются при окончании процедуры входа, включая ошибку и Stop.
# Telegram: уведомление после завершения работы
#
# Создаёт объект для текстовых уведомлений и приёма сообщений Telegram, Discord или Viber.
# Например, скрипт может сообщить об окончании сбора ресурсов или проверить запрос остановки от
# заранее указанного пользователя. Создание объекта ещё не подключает бота и ничего не
# отправляет.
#
# Object Messenger. Это не Boolean и не ID. 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: запрос остановки от выбранного пользователя
#
# Создаёт объект для текстовых уведомлений и приёма сообщений Telegram, Discord или Viber.
# Например, скрипт может сообщить об окончании сбора ресурсов или проверить запрос остановки от
# заранее указанного пользователя. Создание объекта ещё не подключает бота и ничего не
# отправляет.
#
# Object Messenger. Это не Boolean и не ID. ID сообщений, отправителей и чатов в этом объекте
# всегда String: сравнивайте их со строками, не преобразуйте через CInt/CDbl.
SUB Main()
# Укажите свой канал и ID разрешённого отправителя. 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Разбор параметров и выполнения:
- Укажите свой канал и ID разрешённого отправителя. True означает, что за эту проверку пришёл текст stop от него; сам пример не останавливает движение. Этот результат можно использовать в условии собственного рабочего цикла.
- Нужны собственные настройки бота. Примеры проверены с локальными тестовыми ответами; они не отправлялись реальным пользователям.
# Viber: подписанный входящий текст
#
# Создаёт объект для текстовых уведомлений и приёма сообщений Telegram, Discord или Viber.
# Например, скрипт может сообщить об окончании сбора ресурсов или проверить запрос остановки от
# заранее указанного пользователя. Создание объекта ещё не подключает бота и ничего не
# отправляет.
#
# Object Messenger. Это не Boolean и не ID. ID сообщений, отправителей и чатов в этом объекте
# всегда String: сравнивайте их со строками, не преобразуйте через CInt/CDbl.
SUB Main()
# Создайте рядом viber-settings.json: {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"},
# настройте HTTPS-прокси и viber-token.txt. Замените 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-settings.json: {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}, настройте HTTPS-прокси и viber-token.txt. Замените trusted-subscriber-id. Пример возвращает текст выбранного отправителя либо пустую строку.
- Нужны собственные настройки бота. Примеры проверены с локальными тестовыми ответами; они не отправлялись реальным пользователям.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь