Add reaction and message

This commit is contained in:
Henry Hiles 2025-08-01 17:38:12 -04:00
commit ae29162b5d
No known key found for this signature in database
5 changed files with 80 additions and 17 deletions

View file

@ -1,5 +1,6 @@
import "dart:convert";
import "dart:io";
import "package:markdown/markdown.dart";
import "package:nexusbot/controllers/login_controller.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:nexusbot/models/registration.dart";
@ -34,30 +35,68 @@ class ApiHelper {
return json.decode(response.body)["room_id"];
}
Future<String> sendMessage(message, {required String room}) async {
final settings = ref.read(SettingsController.provider)!;
final response = await http.put(
settings.homeserver.replace(
path:
"_matrix/client/v3/rooms/${await getRoomId(room)}/send/m.room.message/${getTxn()}",
),
headers: await getHeaders(),
body: json.encode({
"msgtype": "m.text",
"body": message,
"format": "org.matrix.custom.html",
"formatted_body": markdownToHtml(message),
}),
);
if (response.statusCode != 200) {
throw Exception("Message send failed for room $room: ${response.body}");
}
return json.decode(response.body)["event_id"];
}
Future<String> react(
String reaction, {
required String eventId,
required String room,
}) async {
final settings = ref.read(SettingsController.provider)!;
final response = await http.put(
settings.homeserver.replace(
path:
"_matrix/client/v3/rooms/${await getRoomId(room)}/send/m.reaction/${getTxn()}",
),
headers: await getHeaders(),
body: json.encode({
"m.relates_to": {
"rel_type": "m.annotation",
"event_id": eventId,
"key": reaction,
},
}),
);
if (response.statusCode != 200) {
throw Exception("Reaction failed for room $room: ${response.body}");
}
return json.decode(response.body)["event_id"];
}
Future<Response> register(Request request) async {
final settings = ref.read(SettingsController.provider)!;
final registration = Registration.fromJson(
json.decode(await request.readAsString()),
);
final response = await http.post(
settings.homeserver.replace(
path:
"_matrix/client/v3/rooms/${await getRoomId(settings.adminRoom)}/send/m.room.message/${getTxn()}",
),
headers: await getHeaders(),
body: json.encode({
"msgtype": "m.text",
"body":
"Signup request from ${registration.username}, email is: ${registration.email}.",
}),
);
final event = await sendMessage("""# Registration request
- Username: `${registration.username}`
- Email: `${registration.email}`""", room: settings.adminRoom);
if (response.statusCode != 200) {
throw Exception(
"Registration failed for ${registration.username}: ${response.body}",
);
}
await react("", eventId: event, room: settings.adminRoom);
return Response.found(settings.successUri);
}