polfan-server-js-client 0.1.91 → 0.1.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +126 -87
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +9 -4
- package/build/types/state-tracker/MessagesManager.d.ts +15 -9
- package/build/types/types/dist/schemes/FollowedTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/FollowTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetFollowedTopics.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/UnfollowTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/events/FollowedTopicUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/FollowedTopics.d.ts +1 -0
- package/build/types/types/dist/schemes/events/TopicFollowed.d.ts +1 -0
- package/build/types/types/dist/schemes/events/TopicUnfollowed.d.ts +1 -0
- package/build/types/types/src/index.d.ts +9 -4
- package/build/types/types/src/schemes/FollowedTopic.d.ts +7 -0
- package/build/types/types/src/schemes/commands/{GetAckReports.d.ts → FollowTopic.d.ts} +1 -1
- package/build/types/types/src/schemes/commands/GetFollowedTopics.d.ts +4 -0
- package/build/types/types/src/schemes/commands/UnfollowTopic.d.ts +4 -0
- package/build/types/types/src/schemes/events/FollowedTopicUpdated.d.ts +4 -0
- package/build/types/types/src/schemes/events/FollowedTopics.d.ts +4 -0
- package/build/types/types/src/schemes/events/TopicFollowed.d.ts +4 -0
- package/build/types/types/src/schemes/events/TopicUnfollowed.d.ts +4 -0
- package/package.json +1 -1
- package/src/AbstractChatClient.ts +17 -6
- package/src/state-tracker/MessagesManager.ts +95 -53
- package/src/state-tracker/RoomsManager.ts +0 -2
- package/src/types/dist/index.d.ts +10 -4
- package/src/types/dist/schemes/FollowedTopic.d.ts +7 -0
- package/src/types/dist/schemes/FollowedTopic.js +2 -0
- package/src/types/dist/schemes/commands/CreateTopic.d.ts +2 -2
- package/src/types/dist/schemes/commands/FollowTopic.d.ts +4 -0
- package/src/types/dist/schemes/commands/FollowTopic.js +2 -0
- package/src/types/dist/schemes/commands/GetFollowedTopics.d.ts +4 -0
- package/src/types/dist/schemes/commands/GetFollowedTopics.js +2 -0
- package/src/types/dist/schemes/commands/UnfollowTopic.d.ts +4 -0
- package/src/types/dist/schemes/commands/UnfollowTopic.js +2 -0
- package/src/types/dist/schemes/events/AckReports.d.ts +2 -2
- package/src/types/dist/schemes/events/FollowedTopicUpdated.d.ts +4 -0
- package/src/types/dist/schemes/events/FollowedTopicUpdated.js +2 -0
- package/src/types/dist/schemes/events/FollowedTopics.d.ts +4 -0
- package/src/types/dist/schemes/events/FollowedTopics.js +2 -0
- package/src/types/dist/schemes/events/TopicFollowed.d.ts +4 -0
- package/src/types/dist/schemes/events/TopicFollowed.js +2 -0
- package/src/types/dist/schemes/events/TopicUnfollowed.d.ts +4 -0
- package/src/types/dist/schemes/events/TopicUnfollowed.js +2 -0
- package/src/types/src/index.ts +16 -6
- package/src/types/src/schemes/FollowedTopic.ts +8 -0
- package/src/types/src/schemes/commands/{GetAckReports.ts → FollowTopic.ts} +1 -1
- package/src/types/src/schemes/commands/GetFollowedTopics.ts +5 -0
- package/src/types/src/schemes/commands/UnfollowTopic.ts +5 -0
- package/src/types/src/schemes/events/FollowedTopicUpdated.ts +5 -0
- package/src/types/src/schemes/events/FollowedTopics.ts +5 -0
- package/src/types/src/schemes/events/TopicFollowed.ts +5 -0
- package/src/types/src/schemes/events/TopicUnfollowed.ts +5 -0
- package/build/types/types/src/schemes/AckReport.d.ts +0 -7
- package/build/types/types/src/schemes/events/AckReports.d.ts +0 -4
- package/src/types/src/schemes/AckReport.ts +0 -7
- package/src/types/src/schemes/events/AckReports.ts +0 -5
package/build/index.js
CHANGED
|
@@ -653,12 +653,27 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
653
653
|
MessagesManager_classCallCheck(this, MessagesManager);
|
|
654
654
|
this.tracker = tracker;
|
|
655
655
|
MessagesManager_defineProperty(this, "list", new IndexedCollection());
|
|
656
|
-
MessagesManager_defineProperty(this, "
|
|
656
|
+
MessagesManager_defineProperty(this, "followedTopics", new IndexedCollection());
|
|
657
657
|
this.tracker.client.on('NewMessage', function (ev) {
|
|
658
658
|
return _this.handleNewMessage(ev);
|
|
659
659
|
});
|
|
660
|
-
this.tracker.client.on('
|
|
661
|
-
return _this.
|
|
660
|
+
this.tracker.client.on('FollowedTopicUpdated', function (ev) {
|
|
661
|
+
return _this.handleFollowedTopicUpdated(ev);
|
|
662
|
+
});
|
|
663
|
+
this.tracker.client.on('TopicFollowed', function (ev) {
|
|
664
|
+
return _this.handleTopicFollowed(ev);
|
|
665
|
+
});
|
|
666
|
+
this.tracker.client.on('TopicUnfollowed', function (ev) {
|
|
667
|
+
return _this.handleTopicUnfollowed(ev);
|
|
668
|
+
});
|
|
669
|
+
this.tracker.client.on('RoomDeleted', function (ev) {
|
|
670
|
+
return _this.handleRoomDeleted(ev);
|
|
671
|
+
});
|
|
672
|
+
this.tracker.client.on('RoomLeft', function (ev) {
|
|
673
|
+
return _this.handleRoomLeft(ev);
|
|
674
|
+
});
|
|
675
|
+
this.tracker.client.on('TopicDeleted', function (ev) {
|
|
676
|
+
return _this.handleTopicDeleted(ev);
|
|
662
677
|
});
|
|
663
678
|
}
|
|
664
679
|
|
|
@@ -688,15 +703,14 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
688
703
|
}()
|
|
689
704
|
/**
|
|
690
705
|
* Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.
|
|
691
|
-
* Then you can get the reports using
|
|
692
|
-
* @see
|
|
706
|
+
* Then you can get the reports using getRoomFollowedTopics().
|
|
707
|
+
* @see getRoomFollowedTopics
|
|
693
708
|
*/
|
|
694
709
|
}, {
|
|
695
|
-
key: "
|
|
710
|
+
key: "cacheSpaceFollowedTopic",
|
|
696
711
|
value: function () {
|
|
697
|
-
var
|
|
698
|
-
var
|
|
699
|
-
var roomIds, missingRoomIds, result;
|
|
712
|
+
var _cacheSpaceFollowedTopic = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(spaceId) {
|
|
713
|
+
var result;
|
|
700
714
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
701
715
|
while (1) {
|
|
702
716
|
switch (_context2.prev = _context2.next) {
|
|
@@ -711,59 +725,41 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
711
725
|
throw new Error("You are not in space ".concat(spaceId));
|
|
712
726
|
case 4:
|
|
713
727
|
_context2.next = 6;
|
|
714
|
-
return this.tracker.
|
|
715
|
-
case 6:
|
|
716
|
-
roomIds = _context2.sent.findBy('spaceId', spaceId).map(function (room) {
|
|
717
|
-
return room.id;
|
|
718
|
-
});
|
|
719
|
-
missingRoomIds = roomIds.filter(function (roomId) {
|
|
720
|
-
return !_this2.acks.has(roomId);
|
|
721
|
-
});
|
|
722
|
-
if (!missingRoomIds.length) {
|
|
723
|
-
_context2.next = 15;
|
|
724
|
-
break;
|
|
725
|
-
}
|
|
726
|
-
_context2.next = 11;
|
|
727
|
-
return this.tracker.client.send('GetAckReports', {
|
|
728
|
+
return this.tracker.client.send('GetFollowedTopics', {
|
|
728
729
|
location: {
|
|
729
730
|
spaceId: spaceId
|
|
730
731
|
}
|
|
731
732
|
});
|
|
732
|
-
case
|
|
733
|
+
case 6:
|
|
733
734
|
result = _context2.sent;
|
|
734
735
|
if (!result.error) {
|
|
735
|
-
_context2.next =
|
|
736
|
+
_context2.next = 9;
|
|
736
737
|
break;
|
|
737
738
|
}
|
|
738
739
|
throw result.error;
|
|
739
|
-
case
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
return report.roomId === roomId;
|
|
743
|
-
});
|
|
744
|
-
_this2.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);
|
|
745
|
-
});
|
|
746
|
-
case 15:
|
|
740
|
+
case 9:
|
|
741
|
+
this.setFollowedTopicsArray(result.data.followedTopics);
|
|
742
|
+
case 10:
|
|
747
743
|
case "end":
|
|
748
744
|
return _context2.stop();
|
|
749
745
|
}
|
|
750
746
|
}
|
|
751
747
|
}, _callee2, this);
|
|
752
748
|
}));
|
|
753
|
-
function
|
|
754
|
-
return
|
|
749
|
+
function cacheSpaceFollowedTopic(_x2) {
|
|
750
|
+
return _cacheSpaceFollowedTopic.apply(this, arguments);
|
|
755
751
|
}
|
|
756
|
-
return
|
|
752
|
+
return cacheSpaceFollowedTopic;
|
|
757
753
|
}()
|
|
758
754
|
/**
|
|
759
755
|
* Get ack reports for the given room. Undefined if you are not in the room.
|
|
760
756
|
* @param roomId
|
|
761
757
|
*/
|
|
762
758
|
}, {
|
|
763
|
-
key: "
|
|
759
|
+
key: "getRoomFollowedTopics",
|
|
764
760
|
value: function () {
|
|
765
|
-
var
|
|
766
|
-
var
|
|
761
|
+
var _getRoomFollowedTopics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(roomId) {
|
|
762
|
+
var result;
|
|
767
763
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
768
764
|
while (1) {
|
|
769
765
|
switch (_context3.prev = _context3.next) {
|
|
@@ -771,45 +767,44 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
771
767
|
_context3.next = 2;
|
|
772
768
|
return this.tracker.rooms.get();
|
|
773
769
|
case 2:
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
_context3.next = 5;
|
|
770
|
+
if (_context3.sent.has(roomId)) {
|
|
771
|
+
_context3.next = 4;
|
|
777
772
|
break;
|
|
778
773
|
}
|
|
779
774
|
return _context3.abrupt("return", undefined);
|
|
780
|
-
case
|
|
781
|
-
if (this.
|
|
782
|
-
_context3.next =
|
|
775
|
+
case 4:
|
|
776
|
+
if (this.followedTopics.has(roomId)) {
|
|
777
|
+
_context3.next = 11;
|
|
783
778
|
break;
|
|
784
779
|
}
|
|
785
|
-
_context3.next =
|
|
786
|
-
return this.tracker.client.send('
|
|
780
|
+
_context3.next = 7;
|
|
781
|
+
return this.tracker.client.send('GetFollowedTopics', {
|
|
787
782
|
location: {
|
|
788
783
|
roomId: roomId
|
|
789
784
|
}
|
|
790
785
|
});
|
|
791
|
-
case
|
|
786
|
+
case 7:
|
|
792
787
|
result = _context3.sent;
|
|
793
788
|
if (!result.error) {
|
|
794
|
-
_context3.next =
|
|
789
|
+
_context3.next = 10;
|
|
795
790
|
break;
|
|
796
791
|
}
|
|
797
792
|
throw result.error;
|
|
793
|
+
case 10:
|
|
794
|
+
this.setFollowedTopicsArray(result.data.followedTopics);
|
|
798
795
|
case 11:
|
|
799
|
-
|
|
796
|
+
return _context3.abrupt("return", this.followedTopics.get(roomId));
|
|
800
797
|
case 12:
|
|
801
|
-
return _context3.abrupt("return", this.acks.get(roomId));
|
|
802
|
-
case 13:
|
|
803
798
|
case "end":
|
|
804
799
|
return _context3.stop();
|
|
805
800
|
}
|
|
806
801
|
}
|
|
807
802
|
}, _callee3, this);
|
|
808
803
|
}));
|
|
809
|
-
function
|
|
810
|
-
return
|
|
804
|
+
function getRoomFollowedTopics(_x3) {
|
|
805
|
+
return _getRoomFollowedTopics.apply(this, arguments);
|
|
811
806
|
}
|
|
812
|
-
return
|
|
807
|
+
return getRoomFollowedTopics;
|
|
813
808
|
}()
|
|
814
809
|
/**
|
|
815
810
|
* For internal use. If you want to delete the message, execute a proper command on client object.
|
|
@@ -818,7 +813,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
818
813
|
}, {
|
|
819
814
|
key: "_deleteByTopicIds",
|
|
820
815
|
value: function _deleteByTopicIds(roomId) {
|
|
821
|
-
var _this$list, _this$
|
|
816
|
+
var _this$list, _this$followedTopics$;
|
|
822
817
|
for (var _len = arguments.length, topicIds = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
823
818
|
topicIds[_key - 1] = arguments[_key];
|
|
824
819
|
}
|
|
@@ -828,7 +823,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
828
823
|
topicId: topicId
|
|
829
824
|
});
|
|
830
825
|
})));
|
|
831
|
-
(_this$
|
|
826
|
+
(_this$followedTopics$ = this.followedTopics.get(roomId)) === null || _this$followedTopics$ === void 0 ? void 0 : _this$followedTopics$["delete"].apply(_this$followedTopics$, topicIds);
|
|
832
827
|
}
|
|
833
828
|
|
|
834
829
|
/**
|
|
@@ -865,55 +860,53 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
865
860
|
}
|
|
866
861
|
}
|
|
867
862
|
}
|
|
868
|
-
this.
|
|
863
|
+
this.createFollowedStructuresForNewTopics(roomId, newTopics);
|
|
869
864
|
}
|
|
870
865
|
}, {
|
|
871
866
|
key: "handleNewMessage",
|
|
872
867
|
value: function handleNewMessage(ev) {
|
|
873
|
-
|
|
874
|
-
this.
|
|
868
|
+
var _this$list$get;
|
|
869
|
+
(_this$list$get = this.list.get(getCombinedId(ev.location))) === null || _this$list$get === void 0 ? void 0 : _this$list$get.set(ev.message);
|
|
870
|
+
this.updateLocallyFollowedTopicOnNewMessage(ev);
|
|
875
871
|
}
|
|
876
872
|
}, {
|
|
877
|
-
key: "
|
|
878
|
-
value: function
|
|
879
|
-
var
|
|
880
|
-
ev.
|
|
881
|
-
var ackReports = _this3.acks.get(report.roomId);
|
|
882
|
-
if (ackReports) {
|
|
883
|
-
ackReports.set(report);
|
|
884
|
-
}
|
|
885
|
-
});
|
|
873
|
+
key: "handleFollowedTopicUpdated",
|
|
874
|
+
value: function handleFollowedTopicUpdated(ev) {
|
|
875
|
+
var _this$followedTopics$2;
|
|
876
|
+
(_this$followedTopics$2 = this.followedTopics.get(ev.followedTopic.location.roomId)) === null || _this$followedTopics$2 === void 0 ? void 0 : _this$followedTopics$2.set(ev.followedTopic);
|
|
886
877
|
}
|
|
887
878
|
}, {
|
|
888
|
-
key: "
|
|
889
|
-
value: function
|
|
890
|
-
var
|
|
891
|
-
if (!
|
|
879
|
+
key: "createFollowedStructuresForNewTopics",
|
|
880
|
+
value: function createFollowedStructuresForNewTopics(roomId, topics) {
|
|
881
|
+
var followedTopic = this.followedTopics.get(roomId);
|
|
882
|
+
if (!followedTopic) {
|
|
892
883
|
// If we don't follow ack reports for this room, skip
|
|
893
884
|
return;
|
|
894
885
|
}
|
|
895
|
-
var
|
|
886
|
+
var followedTopics = topics.map(function (topic) {
|
|
896
887
|
return {
|
|
897
|
-
|
|
898
|
-
|
|
888
|
+
location: {
|
|
889
|
+
roomId: roomId,
|
|
890
|
+
topicId: topic.id
|
|
891
|
+
},
|
|
899
892
|
lastAckMessageId: null,
|
|
900
893
|
missed: 0,
|
|
901
894
|
missedMoreThan: null
|
|
902
895
|
};
|
|
903
896
|
});
|
|
904
|
-
|
|
897
|
+
followedTopic.set.apply(followedTopic, MessagesManager_toConsumableArray(followedTopics));
|
|
905
898
|
}
|
|
906
899
|
}, {
|
|
907
|
-
key: "
|
|
908
|
-
value: function
|
|
900
|
+
key: "updateLocallyFollowedTopicOnNewMessage",
|
|
901
|
+
value: function updateLocallyFollowedTopicOnNewMessage(ev) {
|
|
909
902
|
var _this$tracker$me;
|
|
910
|
-
var
|
|
911
|
-
if (!
|
|
903
|
+
var followedTopic = this.followedTopics.get(ev.location.roomId);
|
|
904
|
+
if (!followedTopic) {
|
|
912
905
|
// If we don't follow ack reports for this room, skip
|
|
913
906
|
return;
|
|
914
907
|
}
|
|
915
908
|
var isMe = ev.message.author.id === ((_this$tracker$me = this.tracker.me) === null || _this$tracker$me === void 0 ? void 0 : _this$tracker$me.id);
|
|
916
|
-
var
|
|
909
|
+
var currentFollowedTopic = followedTopic.get(ev.location.topicId);
|
|
917
910
|
var update;
|
|
918
911
|
if (isMe) {
|
|
919
912
|
// Reset missed messages count if new message is authored by me
|
|
@@ -925,11 +918,59 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
925
918
|
} else {
|
|
926
919
|
// ...add 1 otherwise
|
|
927
920
|
update = {
|
|
928
|
-
missed:
|
|
929
|
-
missedMoreThan:
|
|
921
|
+
missed: currentFollowedTopic.missed === null ? null : currentFollowedTopic.missed + 1,
|
|
922
|
+
missedMoreThan: currentFollowedTopic.missedMoreThan === null ? null : currentFollowedTopic.missedMoreThan
|
|
930
923
|
};
|
|
931
924
|
}
|
|
932
|
-
|
|
925
|
+
followedTopic.set(_objectSpread(_objectSpread({}, currentFollowedTopic), update));
|
|
926
|
+
}
|
|
927
|
+
}, {
|
|
928
|
+
key: "handleTopicFollowed",
|
|
929
|
+
value: function handleTopicFollowed(ev) {
|
|
930
|
+
this.setFollowedTopicsArray([ev.followedTopic]);
|
|
931
|
+
}
|
|
932
|
+
}, {
|
|
933
|
+
key: "handleTopicUnfollowed",
|
|
934
|
+
value: function handleTopicUnfollowed(ev) {
|
|
935
|
+
var _this$followedTopics$3;
|
|
936
|
+
(_this$followedTopics$3 = this.followedTopics.get(ev.location.roomId)) === null || _this$followedTopics$3 === void 0 ? void 0 : _this$followedTopics$3["delete"](ev.location.topicId);
|
|
937
|
+
}
|
|
938
|
+
}, {
|
|
939
|
+
key: "handleRoomDeleted",
|
|
940
|
+
value: function handleRoomDeleted(ev) {
|
|
941
|
+
this.followedTopics["delete"](ev.id);
|
|
942
|
+
}
|
|
943
|
+
}, {
|
|
944
|
+
key: "handleRoomLeft",
|
|
945
|
+
value: function handleRoomLeft(ev) {
|
|
946
|
+
this.followedTopics["delete"](ev.id);
|
|
947
|
+
}
|
|
948
|
+
}, {
|
|
949
|
+
key: "handleTopicDeleted",
|
|
950
|
+
value: function handleTopicDeleted(ev) {
|
|
951
|
+
var _this$followedTopics$4;
|
|
952
|
+
(_this$followedTopics$4 = this.followedTopics.get(ev.location.roomId)) === null || _this$followedTopics$4 === void 0 ? void 0 : _this$followedTopics$4["delete"](ev.location.topicId);
|
|
953
|
+
}
|
|
954
|
+
}, {
|
|
955
|
+
key: "setFollowedTopicsArray",
|
|
956
|
+
value: function setFollowedTopicsArray(followedTopics) {
|
|
957
|
+
var roomToTopics = {};
|
|
958
|
+
|
|
959
|
+
// Reassign reports to limit collection change event emit
|
|
960
|
+
followedTopics.forEach(function (followedTopic) {
|
|
961
|
+
var _followedTopic$locati, _roomToTopics$_follow;
|
|
962
|
+
(_roomToTopics$_follow = roomToTopics[_followedTopic$locati = followedTopic.location.roomId]) !== null && _roomToTopics$_follow !== void 0 ? _roomToTopics$_follow : roomToTopics[_followedTopic$locati] = [];
|
|
963
|
+
roomToTopics[followedTopic.location.roomId].push(followedTopic);
|
|
964
|
+
});
|
|
965
|
+
for (var _roomId in roomToTopics) {
|
|
966
|
+
var _this$followedTopics$5;
|
|
967
|
+
if (!this.followedTopics.has(_roomId)) {
|
|
968
|
+
this.followedTopics.set([_roomId, new ObservableIndexedObjectCollection(function (report) {
|
|
969
|
+
return report.location.topicId;
|
|
970
|
+
})]);
|
|
971
|
+
}
|
|
972
|
+
(_this$followedTopics$5 = this.followedTopics.get(_roomId)).set.apply(_this$followedTopics$5, MessagesManager_toConsumableArray(roomToTopics[_roomId]));
|
|
973
|
+
}
|
|
933
974
|
}
|
|
934
975
|
}]);
|
|
935
976
|
return MessagesManager;
|
|
@@ -1285,7 +1326,6 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
1285
1326
|
}, {
|
|
1286
1327
|
key: "addJoinedRoomTopics",
|
|
1287
1328
|
value: function addJoinedRoomTopics(roomId) {
|
|
1288
|
-
var _this$messages2;
|
|
1289
1329
|
for (var _len2 = arguments.length, topics = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
1290
1330
|
topics[_key2 - 1] = arguments[_key2];
|
|
1291
1331
|
}
|
|
@@ -1295,7 +1335,6 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
1295
1335
|
} else {
|
|
1296
1336
|
this.topics.set([roomId, new ObservableIndexedObjectCollection('id', topics)]);
|
|
1297
1337
|
}
|
|
1298
|
-
(_this$messages2 = this.messages)._handleNewTopics.apply(_this$messages2, [roomId].concat(topics));
|
|
1299
1338
|
}
|
|
1300
1339
|
}, {
|
|
1301
1340
|
key: "handleRoomJoined",
|