Files
VRCWT-OSC/VRWT_Tool/VRC_OSC
2026-06-24 00:38:14 +09:00
..
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00
2026-06-24 00:38:14 +09:00

修正版。仕様はこう整理すると実装しやすい。

# VRC_LOG event.toml 監視仕様

## 1. 目的

VRChatログから現在インスタンスの入退室を拾い、必要最低限だけ表示する。

表示対象は以下のみ。

- ワールド入室
- guest の現在人数
- guest の join / leave
- staff の join / leave

staff は表示するが guest 人数にはカウントしない。

---

## 2. event.toml

```toml
[staff]
names = [
  "StaffUserA",
  "StaffUserB"
]

[guest]
names = [
  "GuestUserA",
  "GuestUserB",
  "GuestUserC"
]

[notice]
missing_count = 3

注意。

nofice ではなく notice にする。
意味は「通知設定」。

3. カウント仕様
3.1 guest人数

guest人数は event.toml の [guest].names にいるユーザーだけを数える。

staff は数えない。

現在Guest: 1/22

意味。

現在いるguest数 / guest登録総数
3.2 自分の入室順は関係ない

自分がインスタンスに何番目に入ったかは使わない。

現在インスタンス内で発生した join / leave を時系列で処理し、最終的な在室状態から人数を出す。

4. ログ範囲

解析対象は昼12:00以降。

実行時刻が 01:00 の場合。

前日 12:00 以降

実行時刻が 13:00 の場合。

当日 12:00 以降

11:59以前のインスタンスは切り捨てる。

5. インスタンス仕様

昼12:00以降に検出した最新のワールド / インスタンスだけを対象にする。

インスタンスが変わったら、参加状態はリセットする。

6. 表示仕様
6.1 ワールド入室

ワールドに入った時だけ表示。

ワールド入室: Midnight Rooftop
現在Guest: 1/22

ワールド名が取れない場合。

ワールド入室: wrld_xxx
現在Guest: 1/22
7. join / leave 表示仕様
7.1 guest join
[01:20] GuestUserA join 2/22
7.2 guest leave
[01:25] GuestUserA leave 1/22
7.3 staff join

staff は人数カウントしない。

[staff] StaffUserA join 1/22
7.4 staff leave

staff が抜けても guest人数は変わらない。

[staff] StaffUserA leave 1/22
8. notice 判定

notice.missing_count = 3 の場合、guest登録総数から3人以内の不足になったら、今いないguest名を出す。

例。

guest登録総数が23人。
missing_count が3。

通知対象人数は以下。

20人
21人
22人

つまり、

23 - 3 = 20

なので、guest現在人数が 20〜22 の間なら不足者を表示する。

9. notice 表示例

guest総数23人、notice=3。

9.1 20人になった場合
現在Guest: 20/23
未入室Guest:
- GuestUserA
- GuestUserB
- GuestUserC
9.2 21人になった場合
現在Guest: 21/23
未入室Guest:
- GuestUserA
- GuestUserB
9.3 22人になった場合
現在Guest: 22/23
未入室Guest:
- GuestUserA
9.4 23人になった場合

表示しない。

9.5 23人から22人に減った場合

再度表示する。

現在Guest: 22/23
未入室Guest:
- GuestUserA
9.6 19人以下になった場合

表示しない。

理由。

23 - 3 = 20

なので、20人未満は通知範囲外。

10. notice 条件

通知する条件。

total_guest - notice <= current_guest < total_guest

例。

23 - 3 <= current_guest < 23

つまり。

20 <= current_guest < 23

通知しない条件。

current_guest == total_guest
current_guest < total_guest - notice
11. 最終出力例
ワールド入室: Midnight Rooftop
現在Guest: 1/22
[staff] StaffUserA join 1/22
[01:20] GuestUserA join 2/22
[01:21] GuestUserB join 3/22
[01:22] GuestUserC join 4/22
[01:25] GuestUserB leave 3/22
[staff] StaffUserA leave 3/22

notice条件に入った場合。

現在Guest: 20/23
未入室Guest:
- GuestUserA
- GuestUserB
- GuestUserC
12. 実装時の内部状態
world_name
world_id
instance_id
guest_total
guest_present_set
staff_present_set
current_guest_count
notice_missing_count

ユーザー分類。

if name in staff:
    role = "staff"
elif name in guest:
    role = "guest"
else:
    role = "other"

other は表示しない。
guest人数にも含めない。

13. Discord通知も同じ最小表示

Discordには以下だけ送る。

ワールド入室: Midnight Rooftop
現在Guest: 1/22
[staff] StaffUserA join 1/22
[01:20] GuestUserA join 2/22
[01:25] GuestUserA leave 1/22

notice時だけ追加。

未入室Guest:
- GuestUserA
- GuestUserB