feat: support MSC 3935: cute events
- add cute event skeletron (`im.fluffychat.cute_events`) - add cute events to default command batch - this way, all SDK users can profit from cute events - supported events: `hug`, `googly_eyes`, `cuddle` Fixes: https://rail.chat/@AgathaSorceress@eldritch.cafe/109336005433123570 Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
This commit is contained in:
parent
c077062089
commit
476963069a
|
|
@ -354,7 +354,8 @@ class Encryption {
|
||||||
Future<Map<String, dynamic>> encryptGroupMessagePayload(
|
Future<Map<String, dynamic>> encryptGroupMessagePayload(
|
||||||
String roomId, Map<String, dynamic> payload,
|
String roomId, Map<String, dynamic> payload,
|
||||||
{String type = EventTypes.Message}) async {
|
{String type = EventTypes.Message}) async {
|
||||||
final Map<String, dynamic>? mRelatesTo = payload.remove('m.relates_to');
|
final Map<String, dynamic>? mRelatesTo =
|
||||||
|
Map.from(payload).remove('m.relates_to');
|
||||||
// Events which only contain a m.relates_to like reactions don't need to
|
// Events which only contain a m.relates_to like reactions don't need to
|
||||||
// be encrypted.
|
// be encrypted.
|
||||||
if (payload.isEmpty && mRelatesTo != null) {
|
if (payload.isEmpty && mRelatesTo != null) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import 'package:matrix/encryption/key_manager.dart';
|
||||||
import 'package:matrix/encryption/ssss.dart';
|
import 'package:matrix/encryption/ssss.dart';
|
||||||
import 'package:matrix/encryption/utils/base64_unpadded.dart';
|
import 'package:matrix/encryption/utils/base64_unpadded.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:matrix/msc_extensions/msc_3814_dehydrated_devices/msc_3814_dehydrated_devices.dart';
|
|
||||||
|
|
||||||
enum BootstrapState {
|
enum BootstrapState {
|
||||||
/// Is loading.
|
/// Is loading.
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,10 @@ export 'src/utils/uia_request.dart';
|
||||||
export 'src/utils/uri_extension.dart';
|
export 'src/utils/uri_extension.dart';
|
||||||
|
|
||||||
export 'msc_extensions/extension_recent_emoji/recent_emoji.dart';
|
export 'msc_extensions/extension_recent_emoji/recent_emoji.dart';
|
||||||
|
export 'msc_extensions/msc_3935_cute_events/msc_3935_cute_events.dart';
|
||||||
export 'msc_extensions/msc_1236_widgets/msc_1236_widgets.dart';
|
export 'msc_extensions/msc_1236_widgets/msc_1236_widgets.dart';
|
||||||
|
export 'msc_extensions/msc_2835_uia_login/msc_2835_uia_login.dart';
|
||||||
|
export 'msc_extensions/msc_3814_dehydrated_devices/msc_3814_dehydrated_devices.dart';
|
||||||
|
|
||||||
export 'src/utils/web_worker/web_worker_stub.dart'
|
export 'src/utils/web_worker/web_worker_stub.dart'
|
||||||
if (dart.library.html) 'src/utils/web_worker/web_worker.dart';
|
if (dart.library.html) 'src/utils/web_worker/web_worker.dart';
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,7 @@ Please try to cover the following conventions:
|
||||||
## Implemented non-spec features
|
## Implemented non-spec features
|
||||||
|
|
||||||
- MSC 1236 - Widget API V2
|
- MSC 1236 - Widget API V2
|
||||||
|
- MSC 2835 - UIA login
|
||||||
|
- MSC 3814 - Dehydrated Devices
|
||||||
|
- MSC 3935 - Cute Events
|
||||||
- `io.element.recent_emoji` - recent emoji sync in account data
|
- `io.element.recent_emoji` - recent emoji sync in account data
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
abstract class CuteEventContent {
|
||||||
|
static const String eventType = 'im.fluffychat.cute_event';
|
||||||
|
|
||||||
|
const CuteEventContent._();
|
||||||
|
|
||||||
|
static Map<String, dynamic> get googlyEyes => {
|
||||||
|
'msgtype': CuteEventContent.eventType,
|
||||||
|
'cute_type': 'googly_eyes',
|
||||||
|
'body': '👀'
|
||||||
|
};
|
||||||
|
static Map<String, dynamic> get cuddle => {
|
||||||
|
'msgtype': CuteEventContent.eventType,
|
||||||
|
'cute_type': 'cuddle',
|
||||||
|
'body': '😊'
|
||||||
|
};
|
||||||
|
static Map<String, dynamic> get hug => {
|
||||||
|
'msgtype': CuteEventContent.eventType,
|
||||||
|
'cute_type': 'hug',
|
||||||
|
'body': '🤗',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -227,6 +227,33 @@ extension CommandsClientExtension on Client {
|
||||||
await args.room.removeFromDirectChat();
|
await args.room.removeFromDirectChat();
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
addCommand('hug', (CommandArgs args) async {
|
||||||
|
final content = CuteEventContent.hug;
|
||||||
|
return await args.room.sendEvent(
|
||||||
|
content,
|
||||||
|
inReplyTo: args.inReplyTo,
|
||||||
|
editEventId: args.editEventId,
|
||||||
|
txid: args.txid,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
addCommand('googly', (CommandArgs args) async {
|
||||||
|
final content = CuteEventContent.googlyEyes;
|
||||||
|
return await args.room.sendEvent(
|
||||||
|
content,
|
||||||
|
inReplyTo: args.inReplyTo,
|
||||||
|
editEventId: args.editEventId,
|
||||||
|
txid: args.txid,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
addCommand('cuddle', (CommandArgs args) async {
|
||||||
|
final content = CuteEventContent.cuddle;
|
||||||
|
return await args.room.sendEvent(
|
||||||
|
content,
|
||||||
|
inReplyTo: args.inReplyTo,
|
||||||
|
editEventId: args.editEventId,
|
||||||
|
txid: args.txid,
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -236,6 +263,7 @@ class CommandArgs {
|
||||||
Event? inReplyTo;
|
Event? inReplyTo;
|
||||||
Room room;
|
Room room;
|
||||||
String? txid;
|
String? txid;
|
||||||
|
|
||||||
CommandArgs(
|
CommandArgs(
|
||||||
{required this.msg,
|
{required this.msg,
|
||||||
this.editEventId,
|
this.editEventId,
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,27 @@ void main() {
|
||||||
expect(room.client.prevBatch, null);
|
expect(room.client.prevBatch, null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('cute events - googly eyes', () async {
|
||||||
|
FakeMatrixApi.calledEndpoints.clear();
|
||||||
|
await room.sendTextEvent('/googly');
|
||||||
|
final sent = getLastMessagePayload();
|
||||||
|
expect(sent, CuteEventContent.googlyEyes);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('cute events - hug', () async {
|
||||||
|
FakeMatrixApi.calledEndpoints.clear();
|
||||||
|
await room.sendTextEvent('/hug');
|
||||||
|
final sent = getLastMessagePayload();
|
||||||
|
expect(sent, CuteEventContent.hug);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('cute events - hug', () async {
|
||||||
|
FakeMatrixApi.calledEndpoints.clear();
|
||||||
|
await room.sendTextEvent('/cuddle');
|
||||||
|
final sent = getLastMessagePayload();
|
||||||
|
expect(sent, CuteEventContent.cuddle);
|
||||||
|
});
|
||||||
|
|
||||||
test('dispose client', () async {
|
test('dispose client', () async {
|
||||||
await client.dispose(closeDatabase: true);
|
await client.dispose(closeDatabase: true);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue