This reverts commit 389372b93f.
tags/docs-0.9
| @@ -1,63 +0,0 @@ | |||||
| ############################################################################### | |||||
| # Set default behavior to automatically normalize line endings. | |||||
| ############################################################################### | |||||
| * text=auto | |||||
| ############################################################################### | |||||
| # Set default behavior for command prompt diff. | |||||
| # | |||||
| # This is need for earlier builds of msysgit that does not have it on by | |||||
| # default for csharp files. | |||||
| # Note: This is only used by command line | |||||
| ############################################################################### | |||||
| #*.cs diff=csharp | |||||
| ############################################################################### | |||||
| # Set the merge driver for project and solution files | |||||
| # | |||||
| # Merging from the command prompt will add diff markers to the files if there | |||||
| # are conflicts (Merging from VS is not affected by the settings below, in VS | |||||
| # the diff markers are never inserted). Diff markers may cause the following | |||||
| # file extensions to fail to load in VS. An alternative would be to treat | |||||
| # these files as binary and thus will always conflict and require user | |||||
| # intervention with every merge. To do so, just uncomment the entries below | |||||
| ############################################################################### | |||||
| #*.sln merge=binary | |||||
| #*.csproj merge=binary | |||||
| #*.vbproj merge=binary | |||||
| #*.vcxproj merge=binary | |||||
| #*.vcproj merge=binary | |||||
| #*.dbproj merge=binary | |||||
| #*.fsproj merge=binary | |||||
| #*.lsproj merge=binary | |||||
| #*.wixproj merge=binary | |||||
| #*.modelproj merge=binary | |||||
| #*.sqlproj merge=binary | |||||
| #*.wwaproj merge=binary | |||||
| ############################################################################### | |||||
| # behavior for image files | |||||
| # | |||||
| # image files are treated as binary by default. | |||||
| ############################################################################### | |||||
| #*.jpg binary | |||||
| #*.png binary | |||||
| #*.gif binary | |||||
| ############################################################################### | |||||
| # diff behavior for common document formats | |||||
| # | |||||
| # Convert binary document formats to text before diffing them. This feature | |||||
| # is only available from the command line. Turn it on by uncommenting the | |||||
| # entries below. | |||||
| ############################################################################### | |||||
| #*.doc diff=astextplain | |||||
| #*.DOC diff=astextplain | |||||
| #*.docx diff=astextplain | |||||
| #*.DOCX diff=astextplain | |||||
| #*.dot diff=astextplain | |||||
| #*.DOT diff=astextplain | |||||
| #*.pdf diff=astextplain | |||||
| #*.PDF diff=astextplain | |||||
| #*.rtf diff=astextplain | |||||
| #*.RTF diff=astextplain | |||||
| @@ -106,7 +106,7 @@ namespace Discord.API.Models | |||||
| [JsonProperty(PropertyName = "channels")] | [JsonProperty(PropertyName = "channels")] | ||||
| public ChannelInfo[] Channels; | public ChannelInfo[] Channels; | ||||
| [JsonProperty(PropertyName = "joined_at")] | [JsonProperty(PropertyName = "joined_at")] | ||||
| public DateTime? JoinedAt; | |||||
| public DateTime JoinedAt; | |||||
| [JsonProperty(PropertyName = "members")] | [JsonProperty(PropertyName = "members")] | ||||
| public MembershipInfo[] Members; | public MembershipInfo[] Members; | ||||
| [JsonProperty(PropertyName = "owner_id")] | [JsonProperty(PropertyName = "owner_id")] | ||||
| @@ -49,9 +49,10 @@ | |||||
| <Compile Include="API\Models\ApiRequests.cs" /> | <Compile Include="API\Models\ApiRequests.cs" /> | ||||
| <Compile Include="API\Endpoints.cs" /> | <Compile Include="API\Endpoints.cs" /> | ||||
| <Compile Include="API\Models\WebSocketCommands.cs" /> | <Compile Include="API\Models\WebSocketCommands.cs" /> | ||||
| <Compile Include="Role.cs" /> | |||||
| <Compile Include="ChatMessage.cs" /> | |||||
| <Compile Include="Channel.cs" /> | |||||
| <Compile Include="Models\Role.cs" /> | |||||
| <Compile Include="Models\ChatMessageReference.cs" /> | |||||
| <Compile Include="Models\ChatMessage.cs" /> | |||||
| <Compile Include="Models\Channel.cs" /> | |||||
| <Compile Include="DiscordWebSocket.Events.cs" /> | <Compile Include="DiscordWebSocket.Events.cs" /> | ||||
| <Compile Include="Helpers\Http.cs" /> | <Compile Include="Helpers\Http.cs" /> | ||||
| <Compile Include="API\DiscordAPI.cs" /> | <Compile Include="API\DiscordAPI.cs" /> | ||||
| @@ -61,8 +62,8 @@ | |||||
| <Compile Include="DiscordClient.Events.cs" /> | <Compile Include="DiscordClient.Events.cs" /> | ||||
| <Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
| <Compile Include="DiscordWebSocket.cs" /> | <Compile Include="DiscordWebSocket.cs" /> | ||||
| <Compile Include="Server.cs" /> | |||||
| <Compile Include="User.cs" /> | |||||
| <Compile Include="Models\Server.cs" /> | |||||
| <Compile Include="Models\User.cs" /> | |||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="packages.config" /> | <None Include="packages.config" /> | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System; | |||||
| using Discord.Models; | |||||
| using System; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| @@ -97,35 +98,40 @@ namespace Discord | |||||
| } | } | ||||
| //Message | //Message | ||||
| public sealed class MessageEventArgs : EventArgs | |||||
| public sealed class MessageCreateEventArgs : EventArgs | |||||
| { | { | ||||
| public readonly ChatMessage Message; | public readonly ChatMessage Message; | ||||
| internal MessageEventArgs(ChatMessage msg) { Message = msg; } | |||||
| internal MessageCreateEventArgs(ChatMessage msg) { Message = msg; } | |||||
| } | |||||
| public sealed class MessageEventArgs : EventArgs | |||||
| { | |||||
| public readonly ChatMessageReference Message; | |||||
| internal MessageEventArgs(ChatMessageReference msg) { Message = msg; } | |||||
| } | } | ||||
| public event EventHandler<MessageEventArgs> MessageCreated; | |||||
| public event EventHandler<MessageCreateEventArgs> MessageCreated; | |||||
| private void RaiseMessageCreated(ChatMessage msg) | private void RaiseMessageCreated(ChatMessage msg) | ||||
| { | { | ||||
| if (MessageCreated != null) | if (MessageCreated != null) | ||||
| MessageCreated(this, new MessageEventArgs(msg)); | |||||
| MessageCreated(this, new MessageCreateEventArgs(msg)); | |||||
| } | } | ||||
| public event EventHandler<MessageEventArgs> MessageDeleted; | public event EventHandler<MessageEventArgs> MessageDeleted; | ||||
| private void RaiseMessageDeleted(ChatMessage msg) | |||||
| private void RaiseMessageDeleted(ChatMessageReference msg) | |||||
| { | { | ||||
| if (MessageDeleted != null) | if (MessageDeleted != null) | ||||
| MessageDeleted(this, new MessageEventArgs(msg)); | MessageDeleted(this, new MessageEventArgs(msg)); | ||||
| } | } | ||||
| public event EventHandler<MessageEventArgs> MessageUpdated; | public event EventHandler<MessageEventArgs> MessageUpdated; | ||||
| private void RaiseMessageUpdated(ChatMessage msg) | |||||
| private void RaiseMessageUpdated(ChatMessageReference msg) | |||||
| { | { | ||||
| if (MessageUpdated != null) | if (MessageUpdated != null) | ||||
| MessageUpdated(this, new MessageEventArgs(msg)); | MessageUpdated(this, new MessageEventArgs(msg)); | ||||
| } | } | ||||
| public event EventHandler<MessageEventArgs> MessageAcknowledged; | public event EventHandler<MessageEventArgs> MessageAcknowledged; | ||||
| private void RaiseMessageAcknowledged(ChatMessage msg) | |||||
| private void RaiseMessageAcknowledged(ChatMessageReference msg) | |||||
| { | { | ||||
| if (MessageAcknowledged != null) | if (MessageAcknowledged != null) | ||||
| MessageAcknowledged(this, new MessageEventArgs(msg)); | MessageAcknowledged(this, new MessageEventArgs(msg)); | ||||
| @@ -1,11 +1,13 @@ | |||||
| using Discord.API; | using Discord.API; | ||||
| using Discord.API.Models; | using Discord.API.Models; | ||||
| using Discord.Helpers; | using Discord.Helpers; | ||||
| using Discord.Models; | |||||
| using System; | using System; | ||||
| using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Reflection; | using System.Reflection; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Role = Discord.Models.Role; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| @@ -370,7 +372,7 @@ namespace Discord | |||||
| var extendedModel = model as ExtendedServerInfo; | var extendedModel = model as ExtendedServerInfo; | ||||
| server.AFKChannelId = extendedModel.AFKChannelId; | server.AFKChannelId = extendedModel.AFKChannelId; | ||||
| server.AFKTimeout = extendedModel.AFKTimeout; | server.AFKTimeout = extendedModel.AFKTimeout; | ||||
| server.JoinedAt = extendedModel.JoinedAt ?? DateTime.MinValue; | |||||
| server.JoinedAt = extendedModel.JoinedAt; | |||||
| server.OwnerId = extendedModel.OwnerId; | server.OwnerId = extendedModel.OwnerId; | ||||
| server.Presence = extendedModel.Presence; | server.Presence = extendedModel.Presence; | ||||
| server.Region = extendedModel.Region; | server.Region = extendedModel.Region; | ||||
| @@ -418,7 +420,7 @@ namespace Discord | |||||
| private Channel DeleteChannel(string id) | private Channel DeleteChannel(string id) | ||||
| { | { | ||||
| Channel channel = null; | Channel channel = null; | ||||
| if (_channels.TryRemove(id, out channel) && !channel.IsPrivate) | |||||
| if (_channels.TryRemove(id, out channel)) | |||||
| { | { | ||||
| bool ignored; | bool ignored; | ||||
| channel.Server._channels.TryRemove(id, out ignored); | channel.Server._channels.TryRemove(id, out ignored); | ||||
| @@ -427,10 +429,10 @@ namespace Discord | |||||
| } | } | ||||
| //TODO: Temporary measure, unsure if we want to store these or not. | //TODO: Temporary measure, unsure if we want to store these or not. | ||||
| private ChatMessage GetMessage(string id, string channelId) | |||||
| private ChatMessageReference GetMessage(string id, string channelId) | |||||
| { | { | ||||
| if (id == null || channelId == null) return null; | if (id == null || channelId == null) return null; | ||||
| return new ChatMessage(id, channelId, this); | |||||
| return new ChatMessageReference(id, channelId, this); | |||||
| } | } | ||||
| private ChatMessage UpdateMessage(WebSocketEvents.MessageCreate model, bool addNew = true) | private ChatMessage UpdateMessage(WebSocketEvents.MessageCreate model, bool addNew = true) | ||||
| { | { | ||||
| @@ -114,14 +114,14 @@ namespace Discord | |||||
| RaiseGotEvent(msg.Type, msg.Payload as JToken); | RaiseGotEvent(msg.Type, msg.Payload as JToken); | ||||
| break; | break; | ||||
| default: | default: | ||||
| RaiseOnDebugMessage("Warning: Unknown WebSocket operation ID: " + msg.Operation); | |||||
| RaiseOnDebugMessage("Unknown WebSocket operation ID: " + msg.Operation); | |||||
| break; | break; | ||||
| } | } | ||||
| builder.Clear(); | builder.Clear(); | ||||
| } | } | ||||
| } | } | ||||
| catch (Exception ex) { RaiseOnDebugMessage($"Error: {ex.Message}"); } | |||||
| catch { } | |||||
| finally { _cancelToken.Cancel(); } | finally { _cancelToken.Cancel(); } | ||||
| } | } | ||||
| @@ -1,6 +1,6 @@ | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| namespace Discord | |||||
| namespace Discord.Models | |||||
| { | { | ||||
| public sealed class Channel | public sealed class Channel | ||||
| { | { | ||||
| @@ -1,23 +1,15 @@ | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using System; | using System; | ||||
| namespace Discord | |||||
| namespace Discord.Models | |||||
| { | { | ||||
| public sealed class ChatMessage | |||||
| public sealed class ChatMessage : ChatMessageReference | |||||
| { | { | ||||
| private readonly DiscordClient _client; | |||||
| public string Id { get; } | |||||
| public bool IsMentioningEveryone { get; internal set; } | public bool IsMentioningEveryone { get; internal set; } | ||||
| public bool IsTTS { get; internal set; } | public bool IsTTS { get; internal set; } | ||||
| public string Text { get; internal set; } | public string Text { get; internal set; } | ||||
| public DateTime Timestamp { get; internal set; } | public DateTime Timestamp { get; internal set; } | ||||
| public string ChannelId { get; internal set; } | |||||
| [JsonIgnore] | |||||
| public Channel Channel { get { return _client.GetChannel(ChannelId); } } | |||||
| public string UserId { get; internal set; } | public string UserId { get; internal set; } | ||||
| [JsonIgnore] | [JsonIgnore] | ||||
| public User User { get { return _client.GetUser(UserId); } } | public User User { get { return _client.GetUser(UserId); } } | ||||
| @@ -27,11 +19,9 @@ namespace Discord | |||||
| public object[] Embeds { get; internal set; } | public object[] Embeds { get; internal set; } | ||||
| internal ChatMessage(string id, string channelId, DiscordClient client) | internal ChatMessage(string id, string channelId, DiscordClient client) | ||||
| : base(id, channelId, client) | |||||
| { | { | ||||
| Id = id; | |||||
| ChannelId = channelId; | |||||
| _client = client; | |||||
| } | |||||
| } | |||||
| public override string ToString() | public override string ToString() | ||||
| { | { | ||||
| @@ -0,0 +1,22 @@ | |||||
| using Newtonsoft.Json; | |||||
| namespace Discord.Models | |||||
| { | |||||
| public class ChatMessageReference | |||||
| { | |||||
| protected readonly DiscordClient _client; | |||||
| public string Id { get; } | |||||
| public string ChannelId { get; } | |||||
| [JsonIgnore] | |||||
| public Channel Channel { get { return _client.GetChannel(ChannelId); } } | |||||
| internal ChatMessageReference(string id, string channelId, DiscordClient client) | |||||
| { | |||||
| Id = id; | |||||
| ChannelId = channelId; | |||||
| _client = client; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,6 +1,6 @@ | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| namespace Discord | |||||
| namespace Discord.Models | |||||
| { | { | ||||
| public sealed class Role | public sealed class Role | ||||
| { | { | ||||
| @@ -4,7 +4,7 @@ using System.Collections.Concurrent; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Linq; | using System.Linq; | ||||
| namespace Discord | |||||
| namespace Discord.Models | |||||
| { | { | ||||
| public sealed class Server | public sealed class Server | ||||
| { | { | ||||
| @@ -1,6 +1,6 @@ | |||||
| using System; | using System; | ||||
| namespace Discord | |||||
| namespace Discord.Models | |||||
| { | { | ||||
| public sealed class User | public sealed class User | ||||
| { | { | ||||