diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 1ff0c4230..000000000
--- a/.gitattributes
+++ /dev/null
@@ -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
diff --git a/Discord.Net/API/Models/General.cs b/Discord.Net/API/Models/General.cs
index c20b7f7bc..46c487d8d 100644
--- a/Discord.Net/API/Models/General.cs
+++ b/Discord.Net/API/Models/General.cs
@@ -106,7 +106,7 @@ namespace Discord.API.Models
[JsonProperty(PropertyName = "channels")]
public ChannelInfo[] Channels;
[JsonProperty(PropertyName = "joined_at")]
- public DateTime? JoinedAt;
+ public DateTime JoinedAt;
[JsonProperty(PropertyName = "members")]
public MembershipInfo[] Members;
[JsonProperty(PropertyName = "owner_id")]
diff --git a/Discord.Net/Discord.Net.csproj b/Discord.Net/Discord.Net.csproj
index 6fb72ee9c..eda49edcd 100644
--- a/Discord.Net/Discord.Net.csproj
+++ b/Discord.Net/Discord.Net.csproj
@@ -49,9 +49,10 @@
-
-
-
+
+
+
+
@@ -61,8 +62,8 @@
-
-
+
+
diff --git a/Discord.Net/DiscordClient.Events.cs b/Discord.Net/DiscordClient.Events.cs
index 23bd54d63..62349c566 100644
--- a/Discord.Net/DiscordClient.Events.cs
+++ b/Discord.Net/DiscordClient.Events.cs
@@ -1,4 +1,5 @@
-using System;
+using Discord.Models;
+using System;
namespace Discord
{
@@ -97,35 +98,40 @@ namespace Discord
}
//Message
- public sealed class MessageEventArgs : EventArgs
+ public sealed class MessageCreateEventArgs : EventArgs
{
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 MessageCreated;
+ public event EventHandler MessageCreated;
private void RaiseMessageCreated(ChatMessage msg)
{
if (MessageCreated != null)
- MessageCreated(this, new MessageEventArgs(msg));
+ MessageCreated(this, new MessageCreateEventArgs(msg));
}
public event EventHandler MessageDeleted;
- private void RaiseMessageDeleted(ChatMessage msg)
+ private void RaiseMessageDeleted(ChatMessageReference msg)
{
if (MessageDeleted != null)
MessageDeleted(this, new MessageEventArgs(msg));
}
public event EventHandler MessageUpdated;
- private void RaiseMessageUpdated(ChatMessage msg)
+ private void RaiseMessageUpdated(ChatMessageReference msg)
{
if (MessageUpdated != null)
MessageUpdated(this, new MessageEventArgs(msg));
}
public event EventHandler MessageAcknowledged;
- private void RaiseMessageAcknowledged(ChatMessage msg)
+ private void RaiseMessageAcknowledged(ChatMessageReference msg)
{
if (MessageAcknowledged != null)
MessageAcknowledged(this, new MessageEventArgs(msg));
diff --git a/Discord.Net/DiscordClient.cs b/Discord.Net/DiscordClient.cs
index 703933dc5..ff51ae9f3 100644
--- a/Discord.Net/DiscordClient.cs
+++ b/Discord.Net/DiscordClient.cs
@@ -1,11 +1,13 @@
using Discord.API;
using Discord.API.Models;
using Discord.Helpers;
+using Discord.Models;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
+using Role = Discord.Models.Role;
namespace Discord
{
@@ -370,7 +372,7 @@ namespace Discord
var extendedModel = model as ExtendedServerInfo;
server.AFKChannelId = extendedModel.AFKChannelId;
server.AFKTimeout = extendedModel.AFKTimeout;
- server.JoinedAt = extendedModel.JoinedAt ?? DateTime.MinValue;
+ server.JoinedAt = extendedModel.JoinedAt;
server.OwnerId = extendedModel.OwnerId;
server.Presence = extendedModel.Presence;
server.Region = extendedModel.Region;
@@ -418,7 +420,7 @@ namespace Discord
private Channel DeleteChannel(string id)
{
Channel channel = null;
- if (_channels.TryRemove(id, out channel) && !channel.IsPrivate)
+ if (_channels.TryRemove(id, out channel))
{
bool 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.
- private ChatMessage GetMessage(string id, string channelId)
+ private ChatMessageReference GetMessage(string id, string channelId)
{
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)
{
diff --git a/Discord.Net/DiscordWebSocket.cs b/Discord.Net/DiscordWebSocket.cs
index 5c8c83c49..8bd2b6d80 100644
--- a/Discord.Net/DiscordWebSocket.cs
+++ b/Discord.Net/DiscordWebSocket.cs
@@ -114,14 +114,14 @@ namespace Discord
RaiseGotEvent(msg.Type, msg.Payload as JToken);
break;
default:
- RaiseOnDebugMessage("Warning: Unknown WebSocket operation ID: " + msg.Operation);
+ RaiseOnDebugMessage("Unknown WebSocket operation ID: " + msg.Operation);
break;
}
builder.Clear();
}
}
- catch (Exception ex) { RaiseOnDebugMessage($"Error: {ex.Message}"); }
+ catch { }
finally { _cancelToken.Cancel(); }
}
diff --git a/Discord.Net/Channel.cs b/Discord.Net/Models/Channel.cs
similarity index 97%
rename from Discord.Net/Channel.cs
rename to Discord.Net/Models/Channel.cs
index 25d59818f..23919e192 100644
--- a/Discord.Net/Channel.cs
+++ b/Discord.Net/Models/Channel.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Discord
+namespace Discord.Models
{
public sealed class Channel
{
diff --git a/Discord.Net/ChatMessage.cs b/Discord.Net/Models/ChatMessage.cs
similarity index 66%
rename from Discord.Net/ChatMessage.cs
rename to Discord.Net/Models/ChatMessage.cs
index e25d1e8b0..1b8d95d90 100644
--- a/Discord.Net/ChatMessage.cs
+++ b/Discord.Net/Models/ChatMessage.cs
@@ -1,23 +1,15 @@
using Newtonsoft.Json;
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 IsTTS { get; internal set; }
public string Text { 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; }
[JsonIgnore]
public User User { get { return _client.GetUser(UserId); } }
@@ -27,11 +19,9 @@ namespace Discord
public object[] Embeds { get; internal set; }
internal ChatMessage(string id, string channelId, DiscordClient client)
+ : base(id, channelId, client)
{
- Id = id;
- ChannelId = channelId;
- _client = client;
- }
+ }
public override string ToString()
{
diff --git a/Discord.Net/Models/ChatMessageReference.cs b/Discord.Net/Models/ChatMessageReference.cs
new file mode 100644
index 000000000..d3c800cf3
--- /dev/null
+++ b/Discord.Net/Models/ChatMessageReference.cs
@@ -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;
+ }
+ }
+}
diff --git a/Discord.Net/Role.cs b/Discord.Net/Models/Role.cs
similarity index 95%
rename from Discord.Net/Role.cs
rename to Discord.Net/Models/Role.cs
index ccc774dfc..1c6d47a8e 100644
--- a/Discord.Net/Role.cs
+++ b/Discord.Net/Models/Role.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Discord
+namespace Discord.Models
{
public sealed class Role
{
diff --git a/Discord.Net/Server.cs b/Discord.Net/Models/Server.cs
similarity index 98%
rename from Discord.Net/Server.cs
rename to Discord.Net/Models/Server.cs
index 373ea8010..667f0cc66 100644
--- a/Discord.Net/Server.cs
+++ b/Discord.Net/Models/Server.cs
@@ -4,7 +4,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
-namespace Discord
+namespace Discord.Models
{
public sealed class Server
{
diff --git a/Discord.Net/User.cs b/Discord.Net/Models/User.cs
similarity index 97%
rename from Discord.Net/User.cs
rename to Discord.Net/Models/User.cs
index b38ce01bc..f9f528e89 100644
--- a/Discord.Net/User.cs
+++ b/Discord.Net/Models/User.cs
@@ -1,6 +1,6 @@
using System;
-namespace Discord
+namespace Discord.Models
{
public sealed class User
{