import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:libac_dart/discord/networking/endpoints.dart'; import '../structures/user.dart'; class UserPackets { /// Requests the current user from Discord's servers static Future getCurrentUser() async { Dio dio = Dio(); var reply = await dio.get( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Users}${DiscordEndpoints.ME}"); return User.fromJson(reply.data as String); } /// Requests the user from Discord's servers /// /// [id] is expected to be a valid Discord User ID static Future getUser(int id) async { Dio dio = Dio(); var reply = await dio .get("${DiscordEndpoints.BaseURL}${DiscordEndpoints.Users}/${id}"); return User.fromJson(reply.data as String); } /// Updates any values that were set in the packet, and returns the updated user /// /// Fires a User Update gateway event static Future updateCurrentUser(ModifyCurrentUserPacket mcup) async { Dio dio = Dio(); var reply = await dio.patch( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Users}${DiscordEndpoints.ME}", data: mcup.encode()); return User.fromJson(reply.data as String); } } class ModifyCurrentUserPacket { String? username; String? avatar; String? banner; ModifyCurrentUserPacket({this.username, this.avatar, this.banner}); String encode() { return json.encode(toJson()); } Map toJson() { return { if (username != null) "username": username, if (avatar != null) "avatar": avatar, if (banner != null) "banner": banner, }; } }