The documentation currently does not properly explain how voice states for lurkers in public stage instances behave or how they should be handled.
Through testing I found out that:
- You receive a VOICE_STATE_UPDATE with a
member that has joined_at as null (for joining/leaving/raising hand/etc.)
- You DO NOT receive a GUILD_MEMBER_ADD or GUILD_MEMBER_REMOVE
This means documentation needs to be adjusted in a few ways:
- The
joined_at in the Guild Member Object must be marked as nullable
- It has to be explicitly explained how to treat these lurker members (since you don't receive a GUILD_MEMBER_REMOVE you have to check in the voice state update)
I also noticed a few issues that I've encountered:
- The stage discovery doesn't work for my test stages at all, even though its set to PUBLIC and
discovery_disabled: false.
- Sometimes you receive voice states without any member attached
- I could not get stage channels working in a browser at all, no errors either. It just didn't join the stage channel, instead it scrolled up(?)
Example voice state without member:
{
"request_to_speak_timestamp": null,
"self_deaf": false,
"user_id": "852064306585010236",
"guild_id": "694920632940625951",
"deaf": false,
"session_id": "39d2ca5af01e3f26149118967c86717e",
"mute": false,
"suppress": true,
"self_video": false,
"self_mute": false,
"channel_id": null
}
Example voice state with joined_at being null:
{
"request_to_speak_timestamp":null,
"self_deaf":false,
"user_id":"856225246402445343",
"member": {
"joined_at":null,
"roles":[],
"deaf":false,
"mute":false,
"user":{"id":"856225246402445343","avatar":null,"username":"Minn Test","discriminator":"6274"}
},
"guild_id":"125227483518861312",
"deaf":false,
"session_id":"1c09ff30f5fe30f703f4cbadaa78d064",
"mute":false,
"suppress":true,
"self_video":false,
"self_mute":true,
"channel_id":"831141260990742579"
}
The documentation currently does not properly explain how voice states for lurkers in public stage instances behave or how they should be handled.
Through testing I found out that:
memberthat hasjoined_atas null (for joining/leaving/raising hand/etc.)This means documentation needs to be adjusted in a few ways:
joined_atin the Guild Member Object must be marked as nullableI also noticed a few issues that I've encountered:
discovery_disabled: false.Example voice state without member:
{ "request_to_speak_timestamp": null, "self_deaf": false, "user_id": "852064306585010236", "guild_id": "694920632940625951", "deaf": false, "session_id": "39d2ca5af01e3f26149118967c86717e", "mute": false, "suppress": true, "self_video": false, "self_mute": false, "channel_id": null }Example voice state with
joined_atbeing null:{ "request_to_speak_timestamp":null, "self_deaf":false, "user_id":"856225246402445343", "member": { "joined_at":null, "roles":[], "deaf":false, "mute":false, "user":{"id":"856225246402445343","avatar":null,"username":"Minn Test","discriminator":"6274"} }, "guild_id":"125227483518861312", "deaf":false, "session_id":"1c09ff30f5fe30f703f4cbadaa78d064", "mute":false, "suppress":true, "self_video":false, "self_mute":true, "channel_id":"831141260990742579" }