MH+ アバタートラッキング for Discord forum channel readme (J)
MH+ Online Tracker for Discord forum channel [MarketPlace]
//特徴//
■アバタートラッキング
本品は指定したアバターのログオン/ログアウトを逐次記録する物です
■Discord の フォーラム チャンネル 向けの設計
本品は Discord との連動で利用する前提のアイテムです。
別途に管理権限を持つDiscordサーバーの環境が必要です。
サーバーの種別は一般向け/コミュニティーサーバーのどちらでも構いません。
■Discord の フォーラム チャンネルを利用する利点
・ターゲットのアバターと 1 対 1 でスレッドを利用します
・対象が複数であっても対象毎にスッキリと纏めて見られる
・更新があった = ONLine / OFFLine の変化でスレッドが BUMP して分かりやすい
・対象毎にスレッドのサポートをすることで個別の通知が受けられる
・ログの記録数上限は Discord まかせで無限大
・アクティブスレッドの上限数はあるものの実用上問題なし (Up to 500)
・時刻の表示は Discord 標準 UI なので各自の言語設定やサーバーのロケールで変化する
■その他の特徴
・一般的なセキュリティも考慮(アクセスレベル = Owner / Same Group / Everyone )
・in-world で現在 Online の一括表示
・Discord 側とのデータ不整合の場合向けにスレッドIDの編集機能あり
・SIMの負荷調整向けに選択可能な動作速度
+++++++++++++++++++++++++++++++++++
■使い方 (とりあえず文字だけの解説)
+++++++++++++++++++++++++++++++++++
※Discord のアカウントとサーバーの作成が完了している前提です
1. フォーラムチャンネルを作成します
2. 作成したフォーラムチャンネルに Webhook を設定します
3. 本品を REZ して、オブジェクトの編集から、 "_config" のノートカードを編集します
4. 上記で取得した Discord の Webhook-URL にて、ノートカード書き換えます
(この時、保存しないでください。→更新してしまうと自動検知して読み込みが開始してしまうので)
5. ノートカードにチェック対象とするアバター名を設定します
(最初から書かれているアバター名は消去して構いません)
6. 上記 4.-5. が完了したら、ノートカードを上書きで保存します
(更新を自動検知してノートカードの読み込みが始まります。)
7. 記入ミスなどがなければ自動でチェック動作が開始されます
※アバター名の指定はアカウント名で記述してください
・大文字小文字は識別しません
・レガシー名での指定でも構いません(Resident姓の付加は不要です)
きっかけは Discord の最近の仕様変更
過去にもトラッキング向けガジェットとして 『簡易型アバタートラッキング』 も制作していますが、これはインワールド内での利用専用で直近の数件だけを記録するという仕様で対象もアバター1に対して1オブジェクトという内容でした。 その後に Discord が世の中に台頭してきた折に、アバター1つのみに対応し指定の Discrd チャンネルに記録するというものも作成しましたが、あまりにも単純で簡単すぎるので、Full-Perm で Public 公開としました。 (複数人に対応してほしいとのリクエストも受けましたが簡単なので自分でどうぞ~と却下😁) その後に Discord 側で Forum 機能が実装され、それよりも前に実装された Threads 機能を Forum っぽく扱えるような仕掛けと思いきや、ギャラリー表示など面白いところも追加されていて、この Forum 機能を使えば トラッキングも個別に仕分けできると確信していました。 しかしながら、当時では Forum 機能はコミュニティー・サーバー専用の機能であったので一般サーバーから昇華させなければならなかったことから汎用的でないので断念しました。 (Forum 機能が使いたいためだけにコミュニティー・サーバーに変更した人も多いでしょう) ところが、ごく最近 (2025年?) になって、一般のサーバーでも Forum チャンネルが作れるように仕様変更されたようで、ならば作るしかないでしょ~って MH+ ブランドを冠してのアイテムとしました。一応、確認のために調べてみたところ仕様変更時期は不明で 『過去に一度でもコミュニティー機能を有効にしたサーバーであれば、コミュニティー機能を無効にしてもフォーラム機能が使える (作成できる) 』 という変更が加えられ、裏技的にコミュニティー機能を ON --> OFF とすることで一般サーバーでもフォーラム機能が使えるというのが定説のようで、抜本的に 『最初から普通のサーバーでコミュニティ機能が使える』 という仕様変更については明確な発表は行われていません。 (公式の解説ドキュメントでもコミュニティー機能を有効にと解説されています) そのような状況ですが実際に今時点で新規のサーバーを作成して確認したところ、全くの新品 (ピカピカの新品) の一般サーバーであってもフォーラムチャンネルは作成できました。 もしかしたらアカウント毎で関係があるのかも知れませんが作成できるのは間違いないです。
図解付き設定解説
1.フォーラムチャンネルを作成する
Discord でサーバーメニューの 『チャンネルを作成』 を開きます一般サーバーの場合は
テキスト/音声/フォーラムから
フォーラムを選択
コミュニティー・サーバーの場合は
さらに複数選べますが
こちらもフォーラムを選択
2.チャンネルに WebHook を作成する
Discord で作成したチャンネルの 『チャンネルの編集』から、『連携サービス』 を開きますウェブフック → ウェブフックの作成 でチャンネルに対応したウェブフックを作成します。 ウェブフックの名称や割り当てるアイコンなどは更新時に置き換えるので、そのままのデフォルトで構いません。 作成が出来たら 『ウェブフックの URL コピー』 で、どこかに URL をメモ書きしてください。
3."_config" ノートカードを編集する
本品を REZ して、オブジェクトの編集から、 "_config" のノートカードを編集します※ ノートカードの編集直前の状態で出荷していますのでタッチしても何も反応しませんが故障ではありません。ノートカードへの記述が完了すれば自動で動作します。
4.Webhook URL と対象のアバター名を記述します
作成した Webhook URL で書き換えます。 また、チェック対象のアバター名も記述してください。【注意1】:最初から記載されているアバター名は全て消去してください。
【注意2】:ノートカードの更新は自動検出されます。 こまめな SAVE はしないで最後に一度だけ SAVE してください。
5.自動で起動までされます
記述ミスなど問題がなければノートカードの自動読み込みからチェック動作開始まで行われます。実際の画面 (Discord)
Discord の UI ですから、デスクトップ/モバイル での見た目の違いや機種による差異はありますが、こんな感じでアバター毎に1つのスレッドとして記録されていきます。 また、スレッド毎に個別に 『フォロー』 することで新しい投稿があった場合に通知を得ることも出来るでしょう。 なお、この画像の Discord サーバーは日本語設定で日本時間となっていますが、サーバー側の設定とユーザー側の設定で時刻の表示は変化します。
実際の画面 (Second Life) メニュー項目
メインメニュー
【STOP / START】:チェック動作の一時停止/開始(注:停止状態であっても _config のノートカード更新は検知します)
【Access】:操作可能な対象を限定します。(Everyone / Same Group /Owner Only)
【Now Online】:現在 Online 状態のアバターを列挙し出力します
【Data DUMP】:格納している全てのデータを格納順で出力します
【Data Edit】:スレッド番号を修正します。(データ削除も可)
【Text on/Off】:現在処理中のデータのKEY情報をリアルタイムにホバーテキストで表示します。(見た目のビジュアル的要素です)
【Reset Data】:格納している全てのデータを消去します。消去後に再読込は行わず停止状態を継続するので、Data Reset --> Reset Script の流れで全データをリフレッシュできます
【Reset Script】:内包しているスクリプトをリセットします。リセット順は、Sub --> Main の順です。製品外に追加されたスクリプトはリセット対象にはなりません
【Interval】:チェック動作間隔の秒数を変更できます。最低 (最速)で 0.8 秒。それ以外は好みで変更してください
同じメインメニュー画面ですが
こちらは Owner 以外の場合に表示されます
アクセス制限や格納データの操作が行えません
(注:格納データはLOCKしていないので別途のスクリプトで改竄可能です)
データ編集メニュー
Discord 側のスレッドIDと対応ができなくなったデータを入力したスレッドIDで更新します。 スレッドIDの代わりに DELETE と文字入力することで当該格納データを個別に削除も可能です。※対象データの KEY (UUID) が不明な場合は、事前に 【Data DUMP】 で確認してください。
※Discord 側のスレッドIDは、該当するスレッドを開いた状態で LINK URL の取得で確認できます。
インターバル選択メニュー
実行速度の調整です。初期状態では 0.8 秒毎に設定されています。
チェック対象が少ない場合や、スクリプト負荷が問題となる場合は大きい数値に変更してください。
トラブルシュート と FAQ と 制限事項
筐体の入れ替え(移植)
可能です。好みのオブジェクトに内包しているスクリプトとノートカードを入れれは利用できます。 ただし移植先筐体の LinksetDATA は全て消去してください。独自のスクリプトの追加
可能です。 ただし 独自の LinksetDATA を追加するものは使用できません。Online / Offline 状態変化時における内部通知 API
状態変化時の内部通知 (LinkMessage) はありません。 個別に制御用途などで内部通知は使用しますが内部仕様です。 Online / Offline の状態変化の検出については LinksetData の更新イベントを利用してください。 更新時の DATA 先頭1桁目が "0"の場合は OFFLINE で "1" がONLINE を示します。 正確には先頭3桁で判定します。 動作時における更新は "101" が ONLINE で "001" が OFFLINE です。 その他の場合は途中の処理でのデータ更新です。独自のLinksetDATAの追加
不可です。 本品ではKEY部のフィルタリングは使用せず、格納順に全処理する構造を採用しています。 異なる書式のデータが混在すると動作しなくなるので追加はしないでください。 なお、格納データの存在を知らずに意図せずデータ追加を行ってしまう場合があります。【LinksetDATAのあるオブジェクトA】+【LinksetDATAのあるオブジェクトB】とプリムをリンクしてリンクセットとした場合、リンクされた【オブジェクトC】のルートプリムには、元となったオブジェクトAとオブジェクトBのLinksetDATAがマージされて格納されます。 他のオブジェクトとリンクして利用する場合は十分に気をつけてください。 なお、メニューから【Reset Data】を選択することで全て消去することも出来ます。
Error!! HTTPstatus = 400 Message = Unknown Channel が出続ける
◆最初から出る場合 --> おそらくは設定している Webhook URL が間違っている場合が考えられます◆途中から出る場合で LinkSetKEY = の内容表示が無い場合 --> Discord側との通信失敗が考えられます。 スレッド作成時のエラーと考えられるので再処理で修復される可能性あり。 ダメそうだったら【Data Dump】で出力される内容とノートカードの内容を比較して問題となるアバター名を特定して修正
◆途中から出る場合で LinkSetKEY = の内容表示が有る場合 --> Discord側のスレッドIDとSecondLife内で記録しているスレッドIDの不一致により発生していると考えられます。 発生頻度は稀ですが、スレッド作成が成功している応答が有るのに実際にはDiscord側にスレッドが作成されていないという事象 (巻き戻り) この場合は対応するスレッドが無いので、手動でスレッドを作成してスレッドIDの紐付けを【Data Edit】で変更することも出来ますが、Second Life 側で対象の KEY (UUID)を消去して新規に自動作成するのが手軽です。
手順としては LinkSetKEY は事前に特定できているので、【Data Edit】で当該キーのデータを個別に指定して対応するスレッドIDの入力画面で DELETE と入力することで個別に削除できます。 その後に【Script Reset】または、_config ノートカードの空更新で再処理させることで当該キーが新規追加として処理されます。
この『Unknown Channel』 エラーは簡単に発生させてしまうことがありえます。 機械的に処理していても Discord 側でスレッドを誤って削除してしまうことで対応が取れなくなるからです。 間違えて削除するようなことが発生しないよう、混在して利用するフォーラムチャンネルではなく、トラッキング専用に割り当てて使用することを推奨します。
アバター名の記入方法
◆アカウント名が First Last という形式であれば次の何れの書式でも構いません。First Last
First.Last
first.last
First . Last
◆アカウント名が Account という形式であれば次の何れの書式でも構いません。
Account
account
Account Resident
account.resident
※文字の大文字小文字は影響しません。 また First Name と Last Name の間に空白が沢山あっても処理できるようです。
ノートカードに指定したアバター名の数と実際に処理された数が違う
アカウント名を変更したアバターの変更前と変更後の両方で記述した場合に発生します。 本品ではノートカード記述のアバター名から対応するUUIDを引き当てて、そのUUIDを使って現在のアバター名と表示名の取得を行います。 アバター名が変わってもUUIDは変わらないので同じアカウントとして処理されます。トラッキングを中止したアバターを同じスレッドで再開させたい
ノートカード上でアカウント名を削除またはコメントアウトすることでトラッキング動作対象から外すことで停止状態に出来ますが、Discord 側のスレッドは手動で削除しない限りは残ります。 それを再開したいとの狙いでノートカード上に再度記載することでトラッキング対象となりますが、Second Life 側のデータからは消えているので 『新規追加』 として処理されてしまいます。(新しいスレッドとして Discord 側で処理されます) このままでも動作上は問題ありませんが、以前使っていたスレッドを継続して利用したい場合は、Second Life 側で認識しているスレッドIDを更新することで対応できます。 具体的な手順は、メニューから【Data Edit】を選択して、アバターに対応する UUID で対象を指定して、次に元のスレッドIDを入力することで以前のスレッドが対象として紐付けされます。 動作が確認できたら新しく作成されたスレッドの方は Discord 側で手動で削除して完了です。Second Life と Discord の規約違い
Second Life 側のデータを利用するので、ややもすると Discord 側から規約違反として扱われるような内容となるものがあると考えられます。(卑猥なプロファイル画像や危険な言葉を含むようなプロファイルデーター)ひとまずは直接の投稿ではなく『埋め込み』または『LinkURL参照』として 処理しているので引っかからないと思われますが、そういう厄介事もあると意識して必要であれば Everyone からは参照できないチャンネルで運用してください。HTTP 5xx エラー系で停止してしまう可能性
5xx エラーが連発した場合に Second Life 側では実行の停止となるように近年変更されています。 予測でしか無いですが、Discord 側との通信エラーが頻発した場合に停止となる可能性がないとも言えません。 拙作のアイテムで外部通信を伴うものは、いくつかエラー対処を実装しているものもありますが、何れも長い間のでの運用による調整の結果です。 通信先が Discord で長期的な運用というのは、まだまだ未知な部分なので今後により良く修正することになると思いますが、当面の対処としては 『停止していたら躊躇なくReset Script』 してください。 LinksetDATAに全て記録しているので各々のスクリプトをリセットしてもデータは保持されています。 (間違えて 『Reset Data』 してしまうと全部消えてしまうので気をつけて!!)逆に 5xx エラーを出力しつつも動作し続けていれば、そのうちネット接続が回復すれば解消するので放置でも大丈夫です。 先の項で 400 エラーの場合に触れていますが、基本的に通信エラーがあっても処理続行の構造にしています。
あとがき
この手のガジェットでは外部のWEBサイトを使って統計集計を行い、小綺麗に表示して見せるという仕組みを多く見かけますが、やはり安全性について懐疑的になってしまうところもあると思います。 その点で本製品は、Second Life の LSL と Discord サーバーのみで構成され、中抜きは一切していません。 まぁ、その辺りも見えない部分なので何とでも言えてしまいますが信用第一ですからね😁 そして Discord 側に蓄積されていくデータは Discord 側での BOT でも利活用できることでしょう。 とにかく コストをかけずに使える Discord を使い倒しましょう。UPDATE INFO
v1.0 - 2025-08-16initial-release.
0 件のコメント:
コメントを投稿