@@ -2734,19 +2734,42 @@ notify_event_xmpp(
2734
2734
room_jid = RoomJID }, ok )
2735
2735
when JoinTS =< OriginTS ->
2736
2736
From = jid :replace_resource (RoomJID , SenderUser ),
2737
- case jid :tolower (SenderJID ) of
2738
- {LUser , LServer , _ } ->
2739
- send_initial_presences (
2740
- SenderJID , RoomJID , Event , Data );
2741
- _ ->
2742
- ok
2743
- end ,
2737
+ IsSelfPresence =
2738
+ case jid :tolower (SenderJID ) of
2739
+ {LUser , LServer , _ } ->
2740
+ send_initial_presences (
2741
+ SenderJID , RoomJID , Event , Data ),
2742
+ true ;
2743
+ _ ->
2744
+ false
2745
+ end ,
2744
2746
UserJID = jid :make (LUser , LServer , LResource ),
2745
- Pres = # presence {from = From ,
2746
- to = UserJID ,
2747
- type = available
2748
- },
2749
- ejabberd_router :route (Pres );
2747
+ Item = # muc_item {affiliation = member ,
2748
+ role = participant },
2749
+ Status = case IsSelfPresence of
2750
+ true -> [110 ];
2751
+ false -> []
2752
+ end ,
2753
+ Pres = # presence {
2754
+ from = From ,
2755
+ to = UserJID ,
2756
+ type = available ,
2757
+ sub_els = [# muc_user {items = [Item ],
2758
+ status_codes = Status }]
2759
+ },
2760
+ ejabberd_router :route (Pres ),
2761
+ case IsSelfPresence of
2762
+ true ->
2763
+ Subject =
2764
+ # message {
2765
+ from = RoomJID ,
2766
+ to = UserJID ,
2767
+ type = groupchat ,
2768
+ subject = [# text {}]
2769
+ },
2770
+ ejabberd_router :route (Subject );
2771
+ false -> ok
2772
+ end ;
2750
2773
(_ , _ , _ ) -> ok
2751
2774
end , ok , Resources )
2752
2775
end , ok , Users ),
@@ -2772,9 +2795,12 @@ notify_event_xmpp(
2772
2795
when JoinTS =< OriginTS ->
2773
2796
From = jid :replace_resource (RoomJID , RUser ),
2774
2797
UserJID = jid :make (LUser , LServer , LResource ),
2798
+ Item = # muc_item {affiliation = member ,
2799
+ role = none },
2775
2800
Pres = # presence {from = From ,
2776
2801
to = UserJID ,
2777
- type = unavailable
2802
+ type = unavailable ,
2803
+ sub_els = [# muc_user {items = [Item ]}]
2778
2804
},
2779
2805
ejabberd_router :route (Pres );
2780
2806
(_ , _ , _ ) -> ok
@@ -2821,9 +2847,11 @@ send_initial_presences(JID, RoomJID, Event, Data) ->
2821
2847
json = #{<<" content" >> :=
2822
2848
#{<<" membership" >> := <<" join" >>}}}} ->
2823
2849
From = jid :replace_resource (RoomJID , SenderUser ),
2850
+ Item = # muc_item {affiliation = member , role = participant },
2824
2851
Pres = # presence {from = From ,
2825
2852
to = JID ,
2826
- type = available
2853
+ type = available ,
2854
+ sub_els = [# muc_user {items = [Item ]}]
2827
2855
},
2828
2856
ejabberd_router :route (Pres ),
2829
2857
ok ;
0 commit comments