Skip to content

API UO Messenger ja

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"。大文字と小文字は区別しません。それ以外はエラーです。

戻り値

Messenger Object。メッセージ、送信者、チャットの ID は常に String です。CInt/CDbl で数値に変換しないでください。

動作

  • Provider() → String、Connected() → 1/0(True/False):サービス名と最後の認証状態です。現在のインターネット接続を保証する値ではありません。
  • Connect(token) → Unit はボットを認証します。ConnectFromFile(path) → Unit は最大 1024 バイトの UTF-8 トークンファイルを読みます。相対パスの基準は現在のスクリプトのフォルダーです。再接続前に Disconnect を呼びます。
  • Disconnect() → Unit はローカル受信を停止してトークンとカーソルを消去します。再接続できます。Dispose() → Unit はオブジェクトを完全に閉じます。
  • SendMessage(text, recipient) → String:受理されたメッセージ ID。recipient は Telegram の chat ID、Discord の channel ID、Viber の購読者 ID を文字列で指定します。文字数は順に 1..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 はロングポーリング、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 URL は /viber/ で終わり、POST を 127.0.0.1:ポート/viber/ に本文と署名ヘッダーを変更せず転送する設定が必要です。webhook を登録します。
  • ボットトークンが必要です。Telegram に既存 webhook があれば削除せず接続を拒否します。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 は通信せずに生成し、資源を現在のスクリプト実行に結び付けます。

Messenger Object。メッセージ、送信者、チャットの ID は常に String です。CInt/CDbl で数値に変換しないでください。

プロジェクトのソース: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; 関数 CreateMessenger.

2. RequestAsync

RequestAsync はサービス別 JSON とヘッダーを作成して結果を確認します。応答は 2 MiB、要求は 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
# のテキストメッセージ用オブジェクトを作成します。採集完了の通知や、許可した送信者からの停止要求の確認に使えます。作成だけではボットに接続せず、メッセージも送信しません。
#
# Messenger Object。メッセージ、送信者、チャットの 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
# のテキストメッセージ用オブジェクトを作成します。採集完了の通知や、許可した送信者からの停止要求の確認に使えます。作成だけではボットに接続せず、メッセージも送信しません。
#
# Messenger Object。メッセージ、送信者、チャットの 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:署名付きテキストの受信

# Viber:署名付きテキストの受信
#
# Telegram、Discord、Viber
# のテキストメッセージ用オブジェクトを作成します。採集完了の通知や、許可した送信者からの停止要求の確認に使えます。作成だけではボットに接続せず、メッセージも送信しません。
#
# Messenger Object。メッセージ、送信者、チャットの 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