using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Model = Discord.API.Integration;
namespace Discord.Rest
{
///
/// Represents a Rest-based implementation of .
///
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestIntegration : RestEntity, IIntegration
{
private long? _syncedAtTicks;
///
public string Name { get; private set; }
///
public string Type { get; private set; }
///
public bool IsEnabled { get; private set; }
///
public bool? IsSyncing { get; private set; }
///
public ulong? RoleId { get; private set; }
///
public bool? HasEnabledEmoticons { get; private set; }
///
public IntegrationExpireBehavior? ExpireBehavior { get; private set; }
///
public int? ExpireGracePeriod { get; private set; }
///
IUser IIntegration.User => User;
///
public IIntegrationAccount Account { get; private set; }
///
public DateTimeOffset? SyncedAt => DateTimeUtils.FromTicks(_syncedAtTicks);
///
public int? SubscriberCount { get; private set; }
///
public bool? IsRevoked { get; private set; }
///
public IIntegrationApplication Application { get; private set; }
internal IGuild Guild { get; private set; }
public RestUser User { get; private set; }
internal RestIntegration(BaseDiscordClient discord, IGuild guild, ulong id)
: base(discord, id)
{
Guild = guild;
}
internal static RestIntegration Create(BaseDiscordClient discord, IGuild guild, Model model)
{
var entity = new RestIntegration(discord, guild, model.Id);
entity.Update(model);
return entity;
}
internal void Update(Model model)
{
Name = model.Name;
Type = model.Type;
IsEnabled = model.Enabled;
IsSyncing = model.Syncing.IsSpecified ? model.Syncing.Value : null;
RoleId = model.RoleId.IsSpecified ? model.RoleId.Value : null;
HasEnabledEmoticons = model.EnableEmoticons.IsSpecified ? model.EnableEmoticons.Value : null;
ExpireBehavior = model.ExpireBehavior.IsSpecified ? model.ExpireBehavior.Value : null;
ExpireGracePeriod = model.ExpireGracePeriod.IsSpecified ? model.ExpireGracePeriod.Value : null;
User = model.User.IsSpecified ? RestUser.Create(Discord, model.User.Value) : null;
Account = model.Account.IsSpecified ? RestIntegrationAccount.Create(model.Account.Value) : null;
SubscriberCount = model.SubscriberAccount.IsSpecified ? model.SubscriberAccount.Value : null;
IsRevoked = model.Revoked.IsSpecified ? model.Revoked.Value : null;
Application = model.Application.IsSpecified ? RestIntegrationApplication.Create(Discord, model.Application.Value) : null;
_syncedAtTicks = model.SyncedAt.IsSpecified ? model.SyncedAt.Value.UtcTicks : null;
}
public Task DeleteAsync()
=> Discord.ApiClient.DeleteIntegrationAsync(GuildId, Id);
public override string ToString() => Name;
private string DebuggerDisplay => $"{Name} ({Id}{(IsEnabled ? ", Enabled" : "")})";
///
public ulong GuildId { get; private set; }
///
IGuild IIntegration.Guild
{
get
{
if (Guild != null)
return Guild;
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}
}
}