using System; using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Application; namespace Discord.Rest { /// /// Represents a REST-based entity that contains information about a Discord application created via the developer portal. /// [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public class RestApplication : RestEntity, IApplication { protected string _iconId; /// public string Name { get; private set; } /// public string Description { get; private set; } /// public string[] RPCOrigins { get; private set; } /// public ulong Flags { get; private set; } /// public IUser Owner { get; private set; } /// public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); /// public string IconUrl => CDN.GetApplicationIconUrl(Id, _iconId); internal RestApplication(BaseDiscordClient discord, ulong id) : base(discord, id) { } internal static RestApplication Create(BaseDiscordClient discord, Model model) { var entity = new RestApplication(discord, model.Id); entity.Update(model); return entity; } internal void Update(Model model) { Description = model.Description; RPCOrigins = model.RPCOrigins; Name = model.Name; _iconId = model.Icon; if (model.Flags.IsSpecified) Flags = model.Flags.Value; //TODO: Do we still need this? if (model.Owner.IsSpecified) Owner = RestUser.Create(Discord, model.Owner.Value); } /// Unable to update this object from a different application token. public async Task UpdateAsync() { var response = await Discord.ApiClient.GetMyApplicationAsync().ConfigureAwait(false); if (response.Id != Id) throw new InvalidOperationException("Unable to update this object from a different application token."); Update(response); } /// /// Gets the name of the application. /// /// /// Name of the application. /// public override string ToString() => Name; private string DebuggerDisplay => $"{Name} ({Id})"; } }