import 'dart:convert'; import 'dart:typed_data'; import 'package:dio/dio.dart'; import 'package:libac_dart/discord/networking/endpoints.dart'; import 'package:libac_dart/structs/Snowflake.dart'; import '../structures/sticker.dart'; class StickerPackets { static Future getSticker(Snowflake id) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio.get( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Stickers}/${id.toString()}"); return Sticker.fromJson(reply.data); } static Future> getStickerPacks() async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio .get("${DiscordEndpoints.BaseURL}${DiscordEndpoints.StickerPacks}"); List stickerPacks = []; var js = json.decode(reply.data); var jsStickerPacks = js['sticker_packs']; for (var entry in jsStickerPacks) { stickerPacks.add(StickerPack.decode(entry)); } return stickerPacks; } static Future> getGuildStickers(Snowflake guildId) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio.get( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Guilds}${guildId.toString()}${DiscordEndpoints.Stickers}"); List stickers = []; for (var entry in json.decode(reply.data)) { stickers.add(Sticker.decode(entry)); } return stickers; } static Future getGuildSticker( Snowflake guildId, Snowflake id) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio.get( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Guilds}${guildId.toString()}${DiscordEndpoints.Stickers}/${id.toString()}"); return Sticker.fromJson(reply.data); } static Future createGuildSticker(Snowflake guildId, String name, String description, String tags, Uint8List fileContents) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var fd = FormData.fromMap({ "name": name, "description": description, "tags": tags, "file": MultipartFile.fromBytes(fileContents) }); var reply = await dio.post( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Guilds}/${guildId.toString()}${DiscordEndpoints.Stickers}", options: Options(contentType: "multipart/form-data"), data: fd); return Sticker.fromJson(reply.data); } static Future updateGuildSticker(Snowflake guildId, Snowflake stickerId, String name, String description, String tags) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio.patch( "${DiscordEndpoints.BaseURL}${DiscordEndpoints.Guilds}/${guildId.toString()}${DiscordEndpoints.Stickers}/${stickerId.toString()}", data: json .encode({"name": name, "description": description, "tags": tags})); return Sticker.fromJson(reply.data); } static Future deleteGuildSticker( Snowflake guildId, Snowflake stickerId) async { Dio dio = Dio(DiscordSessionSettings.getOptions); var reply = await dio.delete( "${DiscordEndpoints.BaseURL}/${guildId.toString()}${DiscordEndpoints.Stickers}/${stickerId.toString()}"); if (reply.statusCode == 204) { return false; } else return true; } }