Add reaction and message
This commit is contained in:
parent
74a634c642
commit
ae29162b5d
5 changed files with 80 additions and 17 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue