This commit is contained in:
Henry Hiles 2025-08-01 20:10:34 -04:00
commit 64dd38f7aa
No known key found for this signature in database
6 changed files with 265 additions and 2 deletions

View file

@ -37,6 +37,7 @@ void main(List<String> argsRaw) async {
),
);
apiHelper.listen();
serveRequests(server, handler);
print("Bot listening at ${server.address.address}");
}

View file

View file

@ -0,0 +1,12 @@
import "package:riverpod/riverpod.dart";
class LastSyncedController extends Notifier<String?> {
@override
String? build() => null;
void set(String value) => state = value;
static final provider = NotifierProvider<LastSyncedController, String?>(
LastSyncedController.new,
);
}

View file

@ -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<String> 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<Response> 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);

View file

@ -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:

View file

@ -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