initial commit

This commit is contained in:
Henry Hiles 2025-08-01 15:58:45 -04:00
commit e8e678bc2b
No known key found for this signature in database
23 changed files with 2339 additions and 0 deletions

View file

@ -0,0 +1,36 @@
import "dart:io";
import "dart:convert";
import "package:http/http.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:riverpod/riverpod.dart";
class LoginController extends AsyncNotifier<String> {
@override
Future<String> build() async {
final settings = ref.watch(SettingsController.provider)!;
final response = await post(
settings.homeserver.replace(path: "_matrix/client/v3/login"),
headers: {HttpHeaders.contentTypeHeader: "application/json"},
body: json.encode({
"type": "m.login.password",
"device_id": "script",
"identifier": {"type": "m.id.user", "user": settings.name},
"password": (await File(
settings.botPasswordFile,
).readAsString()).trim(),
}),
);
if (response.statusCode != 200) {
throw Exception(
"Login failed, check your name, homeserver and botPasswordFile: ${response.body}",
);
}
return json.decode(response.body)["access_token"];
}
static final provider = AsyncNotifierProvider<LoginController, String>(
LoginController.new,
);
}

View file

@ -0,0 +1,16 @@
import "package:args/args.dart";
import "package:nexusbot/models/settings.dart";
import "package:riverpod/riverpod.dart";
class SettingsController extends Notifier<Settings?> {
@override
Settings? build() => null;
void set(ArgResults args) => state = Settings.fromJson(<String, dynamic>{
for (final opt in args.options) opt: args.option(opt),
});
static final provider = NotifierProvider<SettingsController, Settings?>(
SettingsController.new,
);
}