diff --git a/lib/src/event.dart b/lib/src/event.dart index a3835755..e039aeb9 100644 --- a/lib/src/event.dart +++ b/lib/src/event.dart @@ -243,17 +243,17 @@ class Event extends MatrixEvent { } User get asUser => User.fromState( - // state key should always be set for member events - stateKey: stateKey!, - prevContent: prevContent, - content: content, - typeKey: type, - eventId: eventId, - roomId: roomId, - senderId: senderId, - originServerTs: originServerTs, - unsigned: unsigned, - room: room); + // state key should always be set for member events + stateKey: stateKey!, + prevContent: prevContent, + content: content, + typeKey: type, + eventId: eventId, + senderId: senderId, + originServerTs: originServerTs, + unsigned: unsigned, + room: room, + ); String get messageType => type == EventTypes.Sticker ? MessageTypes.Sticker diff --git a/lib/src/user.dart b/lib/src/user.dart index f7321baa..473f47f8 100644 --- a/lib/src/user.dart +++ b/lib/src/user.dart @@ -20,33 +20,35 @@ import 'package:matrix/matrix.dart'; /// Represents a Matrix User which may be a participant in a Matrix Room. class User extends Event { - factory User(String id, - {String? membership, - String? displayName, - String? avatarUrl, - required Room room}) { + factory User( + String id, { + String? membership, + String? displayName, + String? avatarUrl, + required Room room, + }) { return User.fromState( stateKey: id, + senderId: id, + eventId: 'fake_event', content: { if (membership != null) 'membership': membership, if (displayName != null) 'displayname': displayName, if (avatarUrl != null) 'avatar_url': avatarUrl, }, typeKey: EventTypes.RoomMember, - roomId: room.id, room: room, originServerTs: DateTime.now(), ); } User.fromState({ - dynamic prevContent, + Map? prevContent, required String stateKey, - dynamic content, + Map content = const {}, required String typeKey, - String eventId = 'fakevent', - String? roomId, - String senderId = 'fakesender', + required String eventId, + required String senderId, required DateTime originServerTs, dynamic unsigned, required Room room, diff --git a/lib/src/utils/commands_extension.dart b/lib/src/utils/commands_extension.dart index 27ac03ac..470821bc 100644 --- a/lib/src/utils/commands_extension.dart +++ b/lib/src/utils/commands_extension.dart @@ -220,6 +220,13 @@ extension CommandsClientExtension on Client { return ''; }); addCommand('markasdm', (CommandArgs args) async { + final mxid = args.msg; + if (!mxid.isValidMatrixId) { + throw Exception('You must enter a valid mxid when using /maskasdm'); + } + if (await args.room.requestUser(mxid, requestProfile: false) == null) { + throw Exception('User $mxid is not in this room'); + } await args.room.addToDirectChat(args.msg); return; }); diff --git a/test/commands_test.dart b/test/commands_test.dart index aecdcb6a..f6575ec6 100644 --- a/test/commands_test.dart +++ b/test/commands_test.dart @@ -314,7 +314,7 @@ void main() { test('markasdm', () async { FakeMatrixApi.calledEndpoints.clear(); - await room.sendTextEvent('/markasdm @fakealice:example.com'); + await room.sendTextEvent('/markasdm @test:fakeServer.notExisting'); expect( json.decode(FakeMatrixApi .calledEndpoints[ @@ -325,7 +325,7 @@ void main() { json.decode(FakeMatrixApi .calledEndpoints[ '/client/v3/user/%40test%3AfakeServer.notExisting/account_data/m.direct'] - ?.first)?['@fakealice:example.com'], + ?.first)?['@test:fakeServer.notExisting'], ['!1234:fakeServer.notExisting']); expect( json @@ -335,19 +335,12 @@ void main() { ?.first) .entries .any((e) => - e.key != '@fakealice:example.com' && + e.key != '@test:fakeServer.notExisting' && e.key != '@alice:example.com' && e.value.contains('!1234:fakeServer.notExisting')), false); FakeMatrixApi.calledEndpoints.clear(); - await room.sendTextEvent('/markasdm'); - expect( - json.decode(FakeMatrixApi - .calledEndpoints[ - '/client/v3/user/%40test%3AfakeServer.notExisting/account_data/m.direct'] - ?.first)?[''], - ['!1234:fakeServer.notExisting']); }); test('markasgroup', () async {