Repository navigation
API UO Messenger ja
Русский · 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 は通信せずに生成し、資源を現在のスクリプト実行に結び付けます。
CreateMessenger は通信せずに生成し、資源を現在のスクリプト実行に結び付けます。
Messenger Object。メッセージ、送信者、チャットの ID は常に String です。CInt/CDbl で数値に変換しないでください。
プロジェクトのソース: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; 関数 CreateMessenger.
RequestAsync はサービス別 JSON とヘッダーを作成して結果を確認します。応答は 2 MiB、要求は 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
# のテキストメッセージ用オブジェクトを作成します。採集完了の通知や、許可した送信者からの停止要求の確認に使えます。作成だけではボットに接続せず、メッセージも送信しません。
#
# 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:停止要求の確認
#
# 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:署名付きテキストの受信
#
# 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 を変更します。テキストか空文字列を返します。
- 自分のボットを設定してください。例はローカルのテスト応答で実行し、実際の受信者には送信していません。
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь