import 'dart:convert'; import 'package:libac_dart/discord/user.dart'; class ApplicationPacket { bool botPublic; bool botRequiresCodeGrant; String coverImage; String description; String guildId; String? icon; String id; Map integrationConfig; String name; User? owner; ApplicationPacket( {required this.botPublic, required this.botRequiresCodeGrant, required this.coverImage, required this.description, required this.guildId, required this.id, required this.integrationConfig, required this.name, this.icon, this.owner}); Map toJson() { Map itc = {}; for (MapEntry entry in integrationConfig.entries) { itc[entry.key] = entry.value.toJson(); } return { "bot_public": botPublic, "bot_require_code_grant": botRequiresCodeGrant, "cover_image": coverImage, "description": description, "guild_id": guildId, "icon": icon, "id": id, "integration_types_config": itc, "name": name, "owner": owner.toJson() }; } String encode() { return json.encode(toJson()); } factory ApplicationPacket.fromJson(String js) { return ApplicationPacket.decode(json.decode(js)); } factory ApplicationPacket.decode(Map js) { var itc = {}; var itc_js = js["integration_types_config"] as Map; for (MapEntry jsx in itc_js.entries) { itc[jsx.key] = ApplicationIntegrationType.decode(jsx.value as Map); } return ApplicationPacket( botPublic: js['bot_public'] as bool, botRequiresCodeGrant: js['bot_require_code_grant'] as bool, coverImage: js['cover_image'] as String, description: js['description'] as String, guildId: js['guild_id'] as String, id: js['id'] as String, integrationConfig: itc as Map, name: js['name'] as String, owner: User.decode(js['owner']), icon: js['icon']); } } class OAuth2InstallParams { List scopes; String permissions; OAuth2InstallParams({required this.scopes, required this.permissions}); String encode() { return json.encode(toJson()); } Map toJson() { return {"scopes": scopes, "permissions": permissions}; } factory OAuth2InstallParams.fromJson(String js) { return OAuth2InstallParams.decode(json.decode(js)); } factory OAuth2InstallParams.decode(Map js) { return OAuth2InstallParams( scopes: js['scopes'] as List, permissions: js['permissions'] as String); } } class ApplicationIntegrationType { OAuth2InstallParams? installParams; ApplicationIntegrationType({this.installParams}); String encode() { return json.encode(toJson()); } Map toJson() { return {"oauth2_install_params": installParams}; } factory ApplicationIntegrationType.fromJson(String js) { Map jd = json.decode(js); return ApplicationIntegrationType.decode(jd); } factory ApplicationIntegrationType.decode(Map js) { ApplicationIntegrationType ait = ApplicationIntegrationType(); if (js["oauth2_install_params"] == null) { ait = ApplicationIntegrationType( installParams: OAuth2InstallParams.decode(js['oauth2_install_params'])); } return ait; } }