toMemberInfo
Narrows a full Member down to the slim MemberInfo carried by Message.member.
Member.extraData carries stored member fields alongside the member's own custom data. The projection the backend puts on message.member carries none of the former, so they are dropped here to keep MemberInfo.extraData identical no matter whether it came from a message payload or from a member event.