From 64dd38f7aa6d1ffb04ccb397c7cf3d2a869080e9 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Fri, 1 Aug 2025 20:10:34 -0400 Subject: [PATCH] initial --- bin/nexusbot.dart | 1 + lib/controllers/client_controller.dart | 0 lib/controllers/last_synced_controller.dart | 12 ++ lib/helpers/api_helper.dart | 25 +++ pubspec.lock | 228 +++++++++++++++++++- pubspec.yaml | 1 + 6 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 lib/controllers/client_controller.dart create mode 100644 lib/controllers/last_synced_controller.dart diff --git a/bin/nexusbot.dart b/bin/nexusbot.dart index c4311b0..b7444d6 100644 --- a/bin/nexusbot.dart +++ b/bin/nexusbot.dart @@ -37,6 +37,7 @@ void main(List argsRaw) async { ), ); + apiHelper.listen(); serveRequests(server, handler); print("Bot listening at ${server.address.address}"); } diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/controllers/last_synced_controller.dart b/lib/controllers/last_synced_controller.dart new file mode 100644 index 0000000..a36d33d --- /dev/null +++ b/lib/controllers/last_synced_controller.dart @@ -0,0 +1,12 @@ +import "package:riverpod/riverpod.dart"; + +class LastSyncedController extends Notifier { + @override + String? build() => null; + + void set(String value) => state = value; + + static final provider = NotifierProvider( + LastSyncedController.new, + ); +} diff --git a/lib/helpers/api_helper.dart b/lib/helpers/api_helper.dart index b6a4f9e..d50f556 100644 --- a/lib/helpers/api_helper.dart +++ b/lib/helpers/api_helper.dart @@ -1,12 +1,14 @@ import "dart:convert"; import "dart:io"; import "package:markdown/markdown.dart"; +import "package:nexusbot/controllers/last_synced_controller.dart"; import "package:nexusbot/controllers/login_controller.dart"; import "package:nexusbot/controllers/settings_controller.dart"; import "package:nexusbot/models/registration.dart"; import "package:shelf/shelf.dart"; import "package:http/http.dart" as http; import "package:riverpod/riverpod.dart"; +import "package:matrix/matrix.dart"; class ApiHelper { final Ref ref; @@ -86,12 +88,35 @@ class ApiHelper { return json.decode(response.body)["event_id"]; } + Future listen() async { + final settings = ref.watch(SettingsController.provider)!; + final response = await http.get( + settings.homeserver.replace( + path: "_matrix/client/v3/sync", + queryParameters: { + "timeout": "30000", + if (ref.watch(LastSyncedController.provider) != null case final since) + "since": since, + }, + ), + headers: await getHeaders(), + ); + + if (response.statusCode != 200) { + throw Exception("Sync failed: ${response.body}"); + } + + final data = json.decode(response); + } + Future register(Request request) async { final settings = ref.read(SettingsController.provider)!; final registration = Registration.fromJson( json.decode(await request.readAsString()), ); + Login + final event = await sendMessage("""# Registration request - Username: `${registration.username}` - Email: `${registration.email}`""", room: settings.adminRoom); diff --git a/pubspec.lock b/pubspec.lock index e45aaff..906c12f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "7.4.5" + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" args: dependency: "direct main" description: @@ -41,6 +49,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.0" + base58check: + dependency: transitive + description: + name: base58check + sha256: "6c300dfc33e598d2fe26319e13f6243fea81eaf8204cb4c6b69ef20a625319a5" + url: "https://pub.dev" + source: hosted + version: "2.0.0" basic_utils: dependency: transitive description: @@ -49,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.7.0" + blurhash_dart: + dependency: transitive + description: + name: blurhash_dart + sha256: "43955b6c2e30a7d440028d1af0fa185852f3534b795cc6eb81fbf397b464409f" + url: "https://pub.dev" + source: hosted + version: "1.2.1" boolean_selector: dependency: transitive description: @@ -65,6 +89,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.5.1" + build_cli_annotations: + dependency: transitive + description: + name: build_cli_annotations + sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172 + url: "https://pub.dev" + source: hosted + version: "2.1.0" build_config: dependency: transitive description: @@ -121,6 +153,14 @@ packages: url: "https://pub.dev" source: hosted version: "8.10.1" + canonical_json: + dependency: transitive + description: + name: canonical_json + sha256: d6be1dd66b420c6ac9f42e3693e09edf4ff6edfee26cb4c28c1c019fdb8c0c15 + url: "https://pub.dev" + source: hosted + version: "1.1.2" checked_yaml: dependency: transitive description: @@ -137,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.0" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" cli_tools: dependency: "direct main" description: @@ -177,6 +225,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" + url: "https://pub.dev" + source: hosted + version: "1.15.0" crypto: dependency: transitive description: @@ -185,6 +241,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" dart_mappable: dependency: transitive description: @@ -209,6 +273,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.3" + enhanced_enum: + dependency: transitive + description: + name: enhanced_enum + sha256: "074c5a8b9664799ca91e1e8b68003b8694cb19998671cbafd9c7779c13fcdecf" + url: "https://pub.dev" + source: hosted + version: "0.2.4" enough_convert: dependency: transitive description: @@ -241,6 +313,14 @@ packages: url: "https://pub.dev" source: hosted version: "11.0.4" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" file: dependency: transitive description: @@ -257,6 +337,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + flutter_rust_bridge: + dependency: transitive + description: + name: flutter_rust_bridge + sha256: b416ff56002789e636244fb4cc449f587656eff995e5a7169457eb0593fcaddb + url: "https://pub.dev" + source: hosted + version: "2.10.0" freezed: dependency: "direct dev" description: @@ -297,6 +385,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + html_unescape: + dependency: transitive + description: + name: html_unescape + sha256: "15362d7a18f19d7b742ef8dcb811f5fd2a2df98db9f80ea393c075189e0b61e3" + url: "https://pub.dev" + source: hosted + version: "2.0.0" http: dependency: "direct main" description: @@ -329,6 +433,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + url: "https://pub.dev" + source: hosted + version: "4.5.4" intl: dependency: transitive description: @@ -349,10 +461,10 @@ packages: dependency: transitive description: name: js - sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.6.7" json_annotation: dependency: "direct main" description: @@ -401,6 +513,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.12.17" + matrix: + dependency: "direct main" + description: + name: matrix + sha256: "0c033a6ebf4ed2f56ed604769984072961fefc0cb255a802ed441dcaec490196" + url: "https://pub.dev" + source: hosted + version: "1.1.0" meta: dependency: transitive description: @@ -465,6 +585,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" + url: "https://pub.dev" + source: hosted + version: "6.0.3" pub_api_client: dependency: transitive description: @@ -489,6 +617,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + random_string: + dependency: transitive + description: + name: random_string + sha256: "03b52435aae8cbdd1056cf91bfc5bf845e9706724dd35ae2e99fa14a1ef79d02" + url: "https://pub.dev" + source: hosted + version: "2.3.1" rfc_6901: dependency: transitive description: @@ -505,6 +641,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.6.1" + sdp_transform: + dependency: transitive + description: + name: sdp_transform + sha256: "73e412a5279a5c2de74001535208e20fff88f225c9a4571af0f7146202755e45" + url: "https://pub.dev" + source: hosted + version: "0.3.2" shelf: dependency: "direct main" description: @@ -529,6 +673,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" + slugify: + dependency: transitive + description: + name: slugify + sha256: b272501565cb28050cac2d96b7bf28a2d24c8dae359280361d124f3093d337c3 + url: "https://pub.dev" + source: hosted + version: "2.0.0" source_gen: dependency: transitive description: @@ -545,6 +697,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.5" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" source_span: dependency: transitive description: @@ -553,6 +721,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" + url: "https://pub.dev" + source: hosted + version: "2.5.6" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: dd806fff004a0aeb01e208b858dbc649bc72104670d425a81a6dd17698535f6e + url: "https://pub.dev" + source: hosted + version: "2.8.0" stack_trace: dependency: transitive description: @@ -625,6 +809,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.6" + test_core: + dependency: transitive + description: + name: test_core + sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" + url: "https://pub.dev" + source: hosted + version: "0.6.11" timing: dependency: transitive description: @@ -649,6 +841,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + unorm_dart: + dependency: transitive + description: + name: unorm_dart + sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.dev" + source: hosted + version: "15.0.2" + vodozemac: + dependency: transitive + description: + name: vodozemac + sha256: dba14017e042748fb22d270e8ab1d3e46965b89788dd3857dba938ec07571968 + url: "https://pub.dev" + source: hosted + version: "0.2.0" watcher: dependency: transitive description: @@ -681,6 +897,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + webrtc_interface: + dependency: transitive + description: + name: webrtc_interface + sha256: "86fe3afc81a08481dfb25cf14a5a94e27062ecef25544783f352c914e0bbc1ca" + url: "https://pub.dev" + source: hosted + version: "1.2.2+hotfix.2" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f65a51f..7846fa3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,6 +20,7 @@ dependencies: args: ^2.7.0 enough_mail: ^2.1.6 markdown: ^7.3.0 + matrix: ^1.1.0 dev_dependencies: build_runner: ^2.4.6