Add reaction and message
This commit is contained in:
parent
74a634c642
commit
ae29162b5d
5 changed files with 80 additions and 17 deletions
1
.vscode/launch.json
vendored
1
.vscode/launch.json
vendored
|
@ -6,6 +6,7 @@
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "nexusbot",
|
"name": "nexusbot",
|
||||||
|
"preLaunchTask": "rm-socket",
|
||||||
"program": "bin/nexusbot.dart",
|
"program": "bin/nexusbot.dart",
|
||||||
"args": [
|
"args": [
|
||||||
"--socket",
|
"--socket",
|
||||||
|
|
14
.vscode/tasks.json
vendored
Normal file
14
.vscode/tasks.json
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "rm-socket",
|
||||||
|
"type": "shell",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "silent",
|
||||||
|
"close": true
|
||||||
|
},
|
||||||
|
"command": "rm socket || true"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
import "dart:convert";
|
import "dart:convert";
|
||||||
import "dart:io";
|
import "dart:io";
|
||||||
|
import "package:markdown/markdown.dart";
|
||||||
import "package:nexusbot/controllers/login_controller.dart";
|
import "package:nexusbot/controllers/login_controller.dart";
|
||||||
import "package:nexusbot/controllers/settings_controller.dart";
|
import "package:nexusbot/controllers/settings_controller.dart";
|
||||||
import "package:nexusbot/models/registration.dart";
|
import "package:nexusbot/models/registration.dart";
|
||||||
|
@ -34,30 +35,68 @@ class ApiHelper {
|
||||||
return json.decode(response.body)["room_id"];
|
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 {
|
Future<Response> register(Request request) async {
|
||||||
final settings = ref.read(SettingsController.provider)!;
|
final settings = ref.read(SettingsController.provider)!;
|
||||||
final registration = Registration.fromJson(
|
final registration = Registration.fromJson(
|
||||||
json.decode(await request.readAsString()),
|
json.decode(await request.readAsString()),
|
||||||
);
|
);
|
||||||
|
|
||||||
final response = await http.post(
|
final event = await sendMessage("""# Registration request
|
||||||
settings.homeserver.replace(
|
- Username: `${registration.username}`
|
||||||
path:
|
- Email: `${registration.email}`""", room: settings.adminRoom);
|
||||||
"_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}.",
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
await react("✅", eventId: event, room: settings.adminRoom);
|
||||||
throw Exception(
|
|
||||||
"Registration failed for ${registration.username}: ${response.body}",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Response.found(settings.successUri);
|
return Response.found(settings.successUri);
|
||||||
}
|
}
|
||||||
|
|
|
@ -385,6 +385,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
|
markdown:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: markdown
|
||||||
|
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.3.0"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -19,6 +19,7 @@ dependencies:
|
||||||
cli_tools: ^0.6.0
|
cli_tools: ^0.6.0
|
||||||
args: ^2.7.0
|
args: ^2.7.0
|
||||||
enough_mail: ^2.1.6
|
enough_mail: ^2.1.6
|
||||||
|
markdown: ^7.3.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^2.4.6
|
build_runner: ^2.4.6
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue