| @@ -180,5 +180,17 @@ namespace Discord | |||||
| /// A sticker was deleted. | /// A sticker was deleted. | ||||
| /// </summary> | /// </summary> | ||||
| StickerDeleted = 92, | StickerDeleted = 92, | ||||
| /// <summary> | |||||
| /// A thread was created. | |||||
| /// </summary> | |||||
| ThreadCreate = 110, | |||||
| /// <summary> | |||||
| /// A thread was updated. | |||||
| /// </summary> | |||||
| ThreadUpdate = 111, | |||||
| /// <summary> | |||||
| /// A thread was deleted. | |||||
| /// </summary> | |||||
| ThreadDelete = 112 | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| using Newtonsoft.Json; | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.API | namespace Discord.API | ||||
| { | { | ||||
| @@ -7,6 +7,12 @@ namespace Discord.API | |||||
| [JsonProperty("webhooks")] | [JsonProperty("webhooks")] | ||||
| public Webhook[] Webhooks { get; set; } | public Webhook[] Webhooks { get; set; } | ||||
| [JsonProperty("threads")] | |||||
| public Channel[] Threads { get; set; } | |||||
| [JsonProperty("integrations")] | |||||
| public Integration[] Integrations { get; set; } | |||||
| [JsonProperty("users")] | [JsonProperty("users")] | ||||
| public User[] Users { get; set; } | public User[] Users { get; set; } | ||||
| @@ -1,4 +1,4 @@ | |||||
| using Newtonsoft.Json; | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.API | namespace Discord.API | ||||
| { | { | ||||
| @@ -1,4 +1,4 @@ | |||||
| using System; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using Model = Discord.API.AuditLog; | using Model = Discord.API.AuditLog; | ||||
| @@ -51,6 +51,7 @@ namespace Discord.Rest | |||||
| [ActionType.MessageBulkDeleted] = MessageBulkDeleteAuditLogData.Create, | [ActionType.MessageBulkDeleted] = MessageBulkDeleteAuditLogData.Create, | ||||
| [ActionType.MessagePinned] = MessagePinAuditLogData.Create, | [ActionType.MessagePinned] = MessagePinAuditLogData.Create, | ||||
| [ActionType.MessageUnpinned] = MessageUnpinAuditLogData.Create, | [ActionType.MessageUnpinned] = MessageUnpinAuditLogData.Create, | ||||
| }; | }; | ||||
| public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry) | public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| @@ -0,0 +1,36 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| namespace Discord.Rest | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents information for a stage. | |||||
| /// </summary> | |||||
| public class StageInfo | |||||
| { | |||||
| /// <summary> | |||||
| /// Gets the topic of the stage channel. | |||||
| /// </summary> | |||||
| public string Topic { get; } | |||||
| /// <summary> | |||||
| /// Gets the privacy level of the stage channel. | |||||
| /// </summary> | |||||
| public StagePrivacyLevel? PrivacyLevel { get; } | |||||
| /// <summary> | |||||
| /// Gets the user who started the stage channel. | |||||
| /// </summary> | |||||
| public IUser User { get; } | |||||
| internal StageInfo(IUser user, StagePrivacyLevel? level, string topic) | |||||
| { | |||||
| this.Topic = topic; | |||||
| this.PrivacyLevel = level; | |||||
| this.User = user; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,55 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| using Model = Discord.API.AuditLog; | |||||
| using EntryModel = Discord.API.AuditLogEntry; | |||||
| namespace Discord.Rest | |||||
| { | |||||
| /// <summary> | |||||
| /// Contains a piece of audit log data related to a stage going live. | |||||
| /// </summary> | |||||
| public class StageInstanceCreateAuditLogData : IAuditLogData | |||||
| { | |||||
| /// <summary> | |||||
| /// Gets the topic of the stage channel. | |||||
| /// </summary> | |||||
| public string Topic { get; } | |||||
| /// <summary> | |||||
| /// Gets the privacy level of the stage channel. | |||||
| /// </summary> | |||||
| public StagePrivacyLevel PrivacyLevel { get; } | |||||
| /// <summary> | |||||
| /// Gets the user who started the stage channel. | |||||
| /// </summary> | |||||
| public IUser User { get; } | |||||
| /// <summary> | |||||
| /// Gets the Id of the stage channel. | |||||
| /// </summary> | |||||
| public ulong StageChannelId { get; } | |||||
| internal StageInstanceCreateAuditLogData(string topic, StagePrivacyLevel privacyLevel, IUser user, ulong channelId) | |||||
| { | |||||
| Topic = topic; | |||||
| PrivacyLevel = privacyLevel; | |||||
| User = user; | |||||
| StageChannelId = channelId; | |||||
| } | |||||
| internal static StageInstanceCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | |||||
| { | |||||
| var topic = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "topic").NewValue.ToObject<string>(discord.ApiClient.Serializer); | |||||
| var privacyLevel = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "privacy_level").NewValue.ToObject<StagePrivacyLevel>(discord.ApiClient.Serializer); | |||||
| var user = log.Users.FirstOrDefault(x => x.Id == entry.UserId); | |||||
| var channelId = entry.Options.ChannelId; | |||||
| return new StageInstanceCreateAuditLogData(topic, privacyLevel, RestUser.Create(discord, user), channelId ?? 0); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,55 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| using Model = Discord.API.AuditLog; | |||||
| using EntryModel = Discord.API.AuditLogEntry; | |||||
| namespace Discord.Rest | |||||
| { | |||||
| /// <summary> | |||||
| /// Contains a piece of audit log data related to a stage instance deleted. | |||||
| /// </summary> | |||||
| public class StageInstanceDeleteAuditLogData | |||||
| { | |||||
| /// <summary> | |||||
| /// Gets the topic of the stage channel. | |||||
| /// </summary> | |||||
| public string Topic { get; } | |||||
| /// <summary> | |||||
| /// Gets the privacy level of the stage channel. | |||||
| /// </summary> | |||||
| public StagePrivacyLevel PrivacyLevel { get; } | |||||
| /// <summary> | |||||
| /// Gets the user who started the stage channel. | |||||
| /// </summary> | |||||
| public IUser User { get; } | |||||
| /// <summary> | |||||
| /// Gets the Id of the stage channel. | |||||
| /// </summary> | |||||
| public ulong StageChannelId { get; } | |||||
| internal StageInstanceDeleteAuditLogData(string topic, StagePrivacyLevel privacyLevel, IUser user, ulong channelId) | |||||
| { | |||||
| Topic = topic; | |||||
| PrivacyLevel = privacyLevel; | |||||
| User = user; | |||||
| StageChannelId = channelId; | |||||
| } | |||||
| internal static StageInstanceDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | |||||
| { | |||||
| var topic = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "topic").OldValue.ToObject<string>(discord.ApiClient.Serializer); | |||||
| var privacyLevel = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "privacy_level").OldValue.ToObject<StagePrivacyLevel>(discord.ApiClient.Serializer); | |||||
| var user = log.Users.FirstOrDefault(x => x.Id == entry.UserId); | |||||
| var channelId = entry.Options.ChannelId; | |||||
| return new StageInstanceDeleteAuditLogData(topic, privacyLevel, RestUser.Create(discord, user), channelId ?? 0); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,55 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| using Model = Discord.API.AuditLog; | |||||
| using EntryModel = Discord.API.AuditLogEntry; | |||||
| namespace Discord.Rest | |||||
| { | |||||
| /// <summary> | |||||
| /// Contains a piece of audit log data related to a stage instance update. | |||||
| /// </summary> | |||||
| public class StageInstanceUpdatedAuditLogData | |||||
| { | |||||
| /// <summary> | |||||
| /// Gets the Id of the stage channel. | |||||
| /// </summary> | |||||
| public ulong StageChannelId { get; } | |||||
| /// <summary> | |||||
| /// Gets the stage information before the changes. | |||||
| /// </summary> | |||||
| public StageInfo Before { get; } | |||||
| /// <summary> | |||||
| /// Gets the stage information after the changes. | |||||
| /// </summary> | |||||
| public StageInfo After { get; } | |||||
| internal StageInstanceUpdatedAuditLogData(ulong channelId, StageInfo before, StageInfo after) | |||||
| { | |||||
| StageChannelId = channelId; | |||||
| Before = before; | |||||
| After = after; | |||||
| } | |||||
| internal static StageInstanceUpdatedAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | |||||
| { | |||||
| var channelId = entry.Options.ChannelId.Value; | |||||
| var topic = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "topic"); | |||||
| var privacy = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "privacy"); | |||||
| var user = RestUser.Create(discord, log.Users.FirstOrDefault(x => x.Id == entry.UserId)); | |||||
| var oldTopic = topic?.OldValue.ToObject<string>(); | |||||
| var newTopic = topic?.NewValue.ToObject<string>(); | |||||
| var oldPrivacy = privacy?.OldValue.ToObject<StagePrivacyLevel>(); | |||||
| var newPrivacy = privacy?.NewValue.ToObject<StagePrivacyLevel>(); | |||||
| return new StageInstanceUpdatedAuditLogData(channelId, new StageInfo(user, oldPrivacy, oldTopic), new StageInfo(user, newPrivacy, newTopic)); | |||||
| } | |||||
| } | |||||
| } | |||||