| @@ -128,4 +128,14 @@ namespace Discord.API.Models | |||
| [JsonProperty(PropertyName = "channel_id")] | |||
| public string ChannelId; | |||
| } | |||
| internal class Role | |||
| { | |||
| [JsonProperty(PropertyName = "permissions")] | |||
| public int Permissions; | |||
| [JsonProperty(PropertyName = "name")] | |||
| public string Name; | |||
| [JsonProperty(PropertyName = "id")] | |||
| public string Id; | |||
| } | |||
| } | |||
| @@ -30,19 +30,22 @@ namespace Discord.API.Models | |||
| internal sealed class ChannelCreate : ChannelInfo { } | |||
| internal sealed class ChannelDelete : ChannelInfo { } | |||
| internal sealed class ChannelUpdate : ChannelInfo { } | |||
| internal sealed class GuildMemberAdd | |||
| internal sealed class GuildMemberAdd : GuildMemberUpdate | |||
| { | |||
| [JsonProperty(PropertyName = "joined_at")] | |||
| public DateTime JoinedAt; | |||
| } | |||
| internal class GuildMemberUpdate | |||
| { | |||
| [JsonProperty(PropertyName = "user")] | |||
| public UserInfo User; | |||
| [JsonProperty(PropertyName = "roles")] | |||
| public object[] Roles; | |||
| [JsonProperty(PropertyName = "joined_at")] | |||
| public DateTime JoinedAt; | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class GuildMemberRemove | |||
| { | |||
| [JsonProperty(PropertyName = "user")] | |||
| @@ -50,6 +53,37 @@ namespace Discord.API.Models | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class GuildRoleCreateUpdate | |||
| { | |||
| [JsonProperty(PropertyName = "role")] | |||
| public Role Role; | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class GuildRoleDelete | |||
| { | |||
| [JsonProperty(PropertyName = "role_id")] | |||
| public string RoleId; | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class GuildBanAddRemove | |||
| { | |||
| [JsonProperty(PropertyName = "user")] | |||
| public UserInfo User; | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class GuildBanRemove | |||
| { | |||
| [JsonProperty(PropertyName = "user_id")] | |||
| public string UserId; | |||
| [JsonProperty(PropertyName = "guild_id")] | |||
| public string GuildId; | |||
| } | |||
| internal sealed class UserUpdate : SelfUserInfo { } | |||
| internal sealed class PresenceUpdate : PresenceUserInfo { } | |||
| internal sealed class VoiceStateUpdate | |||
| @@ -49,6 +49,7 @@ | |||
| <Compile Include="API\Models\ApiRequests.cs" /> | |||
| <Compile Include="API\Endpoints.cs" /> | |||
| <Compile Include="API\Models\WebSocketCommands.cs" /> | |||
| <Compile Include="Models\Role.cs" /> | |||
| <Compile Include="Models\ChatMessageReference.cs" /> | |||
| <Compile Include="Models\ChatMessage.cs" /> | |||
| <Compile Include="Models\Channel.cs" /> | |||
| @@ -5,46 +5,12 @@ namespace Discord | |||
| { | |||
| public partial class DiscordClient | |||
| { | |||
| public sealed class ServerEventArgs : EventArgs | |||
| { | |||
| public readonly Server Server; | |||
| internal ServerEventArgs(Server server) { Server = server; } | |||
| } | |||
| public sealed class ChannelEventArgs : EventArgs | |||
| { | |||
| public readonly Channel Channel; | |||
| internal ChannelEventArgs(Channel channel) { Channel = channel; } | |||
| } | |||
| public sealed class UserEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| internal UserEventArgs(User user) { User = user; } | |||
| } | |||
| public sealed class MessageCreateEventArgs : EventArgs | |||
| { | |||
| public readonly ChatMessage Message; | |||
| internal MessageCreateEventArgs(ChatMessage msg) { Message = msg; } | |||
| } | |||
| public sealed class MessageEventArgs : EventArgs | |||
| { | |||
| public readonly ChatMessageReference Message; | |||
| internal MessageEventArgs(ChatMessageReference msg) { Message = msg; } | |||
| } | |||
| //Debug | |||
| public sealed class LogMessageEventArgs : EventArgs | |||
| { | |||
| public readonly string Message; | |||
| internal LogMessageEventArgs(string msg) { Message = msg; } | |||
| } | |||
| public sealed class UserTypingEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| public readonly Channel Channel; | |||
| internal UserTypingEventArgs(User user, Channel channel) | |||
| { | |||
| User = user; | |||
| Channel = channel; | |||
| } | |||
| } | |||
| public event EventHandler<LogMessageEventArgs> DebugMessage; | |||
| private void RaiseOnDebugMessage(string message) | |||
| @@ -53,6 +19,7 @@ namespace Discord | |||
| DebugMessage(this, new LogMessageEventArgs(message)); | |||
| } | |||
| //General | |||
| public event EventHandler Connected; | |||
| private void RaiseConnected() | |||
| { | |||
| @@ -73,54 +40,202 @@ namespace Discord | |||
| if (LoggedIn != null) | |||
| LoggedIn(this, EventArgs.Empty); | |||
| } | |||
| public event EventHandler<ServerEventArgs> ServerCreated, ServerDestroyed; | |||
| //Server | |||
| public sealed class ServerEventArgs : EventArgs | |||
| { | |||
| public readonly Server Server; | |||
| internal ServerEventArgs(Server server) { Server = server; } | |||
| } | |||
| public event EventHandler<ServerEventArgs> ServerCreated; | |||
| private void RaiseServerCreated(Server server) | |||
| { | |||
| if (ServerCreated != null) | |||
| ServerCreated(this, new ServerEventArgs(server)); | |||
| } | |||
| public event EventHandler<ServerEventArgs> ServerDestroyed; | |||
| private void RaiseServerDestroyed(Server server) | |||
| { | |||
| if (ServerDestroyed != null) | |||
| ServerDestroyed(this, new ServerEventArgs(server)); | |||
| } | |||
| public event EventHandler<ChannelEventArgs> ChannelCreated, ChannelDestroyed; | |||
| //Channel | |||
| public sealed class ChannelEventArgs : EventArgs | |||
| { | |||
| public readonly Channel Channel; | |||
| internal ChannelEventArgs(Channel channel) { Channel = channel; } | |||
| } | |||
| public event EventHandler<ChannelEventArgs> ChannelCreated; | |||
| private void RaiseChannelCreated(Channel channel) | |||
| { | |||
| if (ChannelCreated != null) | |||
| ChannelCreated(this, new ChannelEventArgs(channel)); | |||
| } | |||
| public event EventHandler<ChannelEventArgs> ChannelDestroyed; | |||
| private void RaiseChannelDestroyed(Channel channel) | |||
| { | |||
| if (ChannelDestroyed != null) | |||
| ChannelDestroyed(this, new ChannelEventArgs(channel)); | |||
| } | |||
| public event EventHandler<ChannelEventArgs> ChannelUpdated; | |||
| private void RaiseChannelUpdated(Channel channel) | |||
| { | |||
| if (ChannelUpdated != null) | |||
| ChannelUpdated(this, new ChannelEventArgs(channel)); | |||
| } | |||
| //User | |||
| public sealed class UserEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| internal UserEventArgs(User user) { User = user; } | |||
| } | |||
| //Message | |||
| public sealed class MessageCreateEventArgs : EventArgs | |||
| { | |||
| public readonly ChatMessage Message; | |||
| internal MessageCreateEventArgs(ChatMessage msg) { Message = msg; } | |||
| } | |||
| public sealed class MessageEventArgs : EventArgs | |||
| { | |||
| public readonly ChatMessageReference Message; | |||
| internal MessageEventArgs(ChatMessageReference msg) { Message = msg; } | |||
| } | |||
| public event EventHandler<MessageCreateEventArgs> MessageCreated; | |||
| public event EventHandler<MessageEventArgs> MessageDeleted, MessageUpdated, MessageAcknowledged; | |||
| private void RaiseMessageCreated(ChatMessage msg) | |||
| { | |||
| if (MessageCreated != null) | |||
| MessageCreated(this, new MessageCreateEventArgs(msg)); | |||
| } | |||
| public event EventHandler<MessageEventArgs> MessageDeleted; | |||
| private void RaiseMessageDeleted(ChatMessageReference msg) | |||
| { | |||
| if (MessageDeleted != null) | |||
| MessageDeleted(this, new MessageEventArgs(msg)); | |||
| } | |||
| public event EventHandler<MessageEventArgs> MessageUpdated; | |||
| private void RaiseMessageUpdated(ChatMessageReference msg) | |||
| { | |||
| if (MessageUpdated != null) | |||
| MessageUpdated(this, new MessageEventArgs(msg)); | |||
| } | |||
| public event EventHandler<MessageEventArgs> MessageAcknowledged; | |||
| private void RaiseMessageAcknowledged(ChatMessageReference msg) | |||
| { | |||
| if (MessageAcknowledged != null) | |||
| MessageAcknowledged(this, new MessageEventArgs(msg)); | |||
| } | |||
| //Role | |||
| public sealed class RoleEventArgs : EventArgs | |||
| { | |||
| public readonly Role Role; | |||
| internal RoleEventArgs(Role role) { Role = role; } | |||
| } | |||
| public event EventHandler<RoleEventArgs> RoleCreated; | |||
| private void RaiseRoleCreated(Role role) | |||
| { | |||
| if (RoleCreated != null) | |||
| RoleCreated(this, new RoleEventArgs(role)); | |||
| } | |||
| public event EventHandler<RoleEventArgs> RoleUpdated; | |||
| private void RaiseRoleDeleted(Role role) | |||
| { | |||
| if (RoleDeleted != null) | |||
| RoleDeleted(this, new RoleEventArgs(role)); | |||
| } | |||
| public event EventHandler<RoleEventArgs> RoleDeleted; | |||
| private void RaiseRoleUpdated(Role role) | |||
| { | |||
| if (RoleUpdated != null) | |||
| RoleUpdated(this, new RoleEventArgs(role)); | |||
| } | |||
| //Ban | |||
| public sealed class BanEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| public readonly Server Server; | |||
| internal BanEventArgs(User user, Server server) | |||
| { | |||
| User = user; | |||
| Server = server; | |||
| } | |||
| } | |||
| public event EventHandler<BanEventArgs> BanAdded; | |||
| private void RaiseBanAdded(User user, Server server) | |||
| { | |||
| if (BanAdded != null) | |||
| BanAdded(this, new BanEventArgs(user, server)); | |||
| } | |||
| public event EventHandler<BanEventArgs> BanRemoved; | |||
| private void RaiseBanRemoved(User user, Server server) | |||
| { | |||
| if (BanRemoved != null) | |||
| BanRemoved(this, new BanEventArgs(user, server)); | |||
| } | |||
| //Member | |||
| public sealed class MemberEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| public readonly Server Server; | |||
| internal MemberEventArgs(User user, Server server) | |||
| { | |||
| User = user; | |||
| Server = server; | |||
| } | |||
| } | |||
| public event EventHandler<MemberEventArgs> MemberAdded; | |||
| private void RaiseMemberAdded(User user, Server server) | |||
| { | |||
| if (MemberAdded != null) | |||
| MemberAdded(this, new MemberEventArgs(user, server)); | |||
| } | |||
| public event EventHandler<MemberEventArgs> MemberRemoved; | |||
| private void RaiseMemberRemoved(User user, Server server) | |||
| { | |||
| if (MemberRemoved != null) | |||
| MemberRemoved(this, new MemberEventArgs(user, server)); | |||
| } | |||
| public event EventHandler<MemberEventArgs> MemberUpdated; | |||
| private void RaiseMemberUpdated(User user, Server server) | |||
| { | |||
| if (MemberUpdated != null) | |||
| MemberUpdated(this, new MemberEventArgs(user, server)); | |||
| } | |||
| //Status | |||
| public sealed class UserTypingEventArgs : EventArgs | |||
| { | |||
| public readonly User User; | |||
| public readonly Channel Channel; | |||
| internal UserTypingEventArgs(User user, Channel channel) | |||
| { | |||
| User = user; | |||
| Channel = channel; | |||
| } | |||
| } | |||
| public event EventHandler<UserEventArgs> PresenceUpdated; | |||
| private void RaisePresenceUpdated(User user) | |||
| { | |||
| @@ -7,6 +7,7 @@ using System.Collections.Concurrent; | |||
| using System.Collections.Generic; | |||
| using System.Reflection; | |||
| using System.Threading.Tasks; | |||
| using Role = Discord.Models.Role; | |||
| namespace Discord | |||
| { | |||
| @@ -107,15 +108,23 @@ namespace Discord | |||
| RaiseChannelDestroyed(channel); | |||
| } | |||
| break; | |||
| case "CHANNEL_UPDATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.ChannelUpdate>(); | |||
| var channel = DeleteChannel(data.Id); | |||
| RaiseChannelUpdated(channel); | |||
| } | |||
| break; | |||
| //Members | |||
| case "GUILD_MEMBER_ADD": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildMemberAdd>(); | |||
| var user = UpdateUser(data.User); | |||
| var user = UpdateUser(data.User); | |||
| var server = GetServer(data.GuildId); | |||
| server._members[user.Id] = true; | |||
| } | |||
| RaiseMemberAdded(user, server); | |||
| } | |||
| break; | |||
| case "GUILD_MEMBER_REMOVE": | |||
| { | |||
| @@ -123,22 +132,56 @@ namespace Discord | |||
| var user = UpdateUser(data.User); | |||
| var server = GetServer(data.GuildId); | |||
| server._members[user.Id] = true; | |||
| RaiseMemberRemoved(user, server); | |||
| } | |||
| break; | |||
| case "GUILD_MEMBER_UPDATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildMemberUpdate>(); | |||
| var user = UpdateUser(data.User); | |||
| var server = GetServer(data.GuildId); | |||
| RaiseMemberUpdated(user, server); | |||
| } | |||
| break; | |||
| //Users | |||
| case "PRESENCE_UPDATE": | |||
| //Roles | |||
| case "GUILD_ROLE_CREATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.PresenceUpdate>(); | |||
| var user = UpdateUser(data); | |||
| RaisePresenceUpdated(user); | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>(); | |||
| var role = UpdateRole(data); | |||
| RaiseRoleCreated(role); | |||
| } | |||
| break; | |||
| case "VOICE_STATE_UPDATE": | |||
| case "GUILD_ROLE_DELETE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.VoiceStateUpdate>(); | |||
| var user = GetUser(data.UserId); //TODO: Don't ignore this | |||
| RaiseVoiceStateUpdated(user); | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildRoleDelete>(); | |||
| var role = GetRole(data.RoleId, data.GuildId); | |||
| RaiseRoleDeleted(role); | |||
| } | |||
| break; | |||
| case "GUILD_ROLE_UPDATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>(); | |||
| var role = UpdateRole(data); | |||
| RaiseRoleUpdated(role); | |||
| } | |||
| break; | |||
| //Roles | |||
| case "GUILD_BAN_ADD": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildBanAddRemove>(); | |||
| var user = UpdateUser(data.User); | |||
| var server = GetServer(data.GuildId); | |||
| RaiseBanAdded(user, server); | |||
| } | |||
| break; | |||
| case "GUILD_BAN_REMOVE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.GuildBanAddRemove>(); | |||
| var user = UpdateUser(data.User); | |||
| var server = GetServer(data.GuildId); | |||
| RaiseBanRemoved(user, server); | |||
| } | |||
| break; | |||
| @@ -172,6 +215,22 @@ namespace Discord | |||
| RaiseMessageAcknowledged(msg); | |||
| } | |||
| break; | |||
| //Statuses | |||
| case "PRESENCE_UPDATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.PresenceUpdate>(); | |||
| var user = UpdateUser(data); | |||
| RaisePresenceUpdated(user); | |||
| } | |||
| break; | |||
| case "VOICE_STATE_UPDATE": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.VoiceStateUpdate>(); | |||
| var user = GetUser(data.UserId); //TODO: Don't ignore this | |||
| RaiseVoiceStateUpdated(user); | |||
| } | |||
| break; | |||
| case "TYPING_START": | |||
| { | |||
| var data = e.Event.ToObject<WebSocketEvents.TypingStart>(); | |||
| @@ -271,7 +330,7 @@ namespace Discord | |||
| _users.TryGetValue(id, out user); | |||
| return user; | |||
| } | |||
| private User UpdateUser(UserInfo model) | |||
| private User UpdateUser(UserInfo model, bool addNew = true) | |||
| { | |||
| var user = GetUser(model.Id) ?? new User(model.Id, this); | |||
| @@ -291,7 +350,8 @@ namespace Discord | |||
| user.Status = extendedModel.Status; | |||
| } | |||
| _users[model.Id] = user; | |||
| if (addNew) | |||
| _users[model.Id] = user; | |||
| return user; | |||
| } | |||
| @@ -302,7 +362,7 @@ namespace Discord | |||
| _servers.TryGetValue(id, out server); | |||
| return server; | |||
| } | |||
| private Server UpdateServer(ServerInfo model) | |||
| private Server UpdateServer(ServerInfo model, bool addNew = true) | |||
| { | |||
| var server = GetServer(model.Id) ?? new Server(model.Id, this); | |||
| @@ -321,17 +381,18 @@ namespace Discord | |||
| foreach (var channel in extendedModel.Channels) | |||
| { | |||
| UpdateChannel(channel, model.Id); | |||
| UpdateChannel(channel, model.Id, addNew); | |||
| server._channels[channel.Id] = true; | |||
| } | |||
| foreach (var membership in extendedModel.Members) | |||
| { | |||
| UpdateUser(membership.User); | |||
| UpdateUser(membership.User, addNew); | |||
| server._members[membership.User.Id] = true; | |||
| } | |||
| } | |||
| _servers[model.Id] = server; | |||
| if (addNew) | |||
| _servers[model.Id] = server; | |||
| return server; | |||
| } | |||
| @@ -342,7 +403,7 @@ namespace Discord | |||
| _channels.TryGetValue(id, out channel); | |||
| return channel; | |||
| } | |||
| private Channel UpdateChannel(ChannelInfo model, string serverId) | |||
| private Channel UpdateChannel(ChannelInfo model, string serverId, bool addNew = true) | |||
| { | |||
| var channel = GetChannel(model.Id) ?? new Channel(model.Id, serverId, this); | |||
| @@ -352,7 +413,8 @@ namespace Discord | |||
| channel.RecipientId = model.Recipient?.Id; | |||
| channel.Type = model.Type; | |||
| _channels[model.Id] = channel; | |||
| if (addNew) | |||
| _channels[model.Id] = channel; | |||
| return channel; | |||
| } | |||
| private Channel DeleteChannel(string id) | |||
| @@ -370,18 +432,13 @@ namespace Discord | |||
| private ChatMessageReference GetMessage(string id, string channelId) | |||
| { | |||
| if (id == null || channelId == null) return null; | |||
| var msg = new ChatMessageReference(id, this); | |||
| msg.ChannelId = channelId; | |||
| return msg; | |||
| return new ChatMessageReference(id, channelId, this); | |||
| } | |||
| private ChatMessage UpdateMessage(WebSocketEvents.MessageCreate model) | |||
| private ChatMessage UpdateMessage(WebSocketEvents.MessageCreate model, bool addNew = true) | |||
| { | |||
| return new ChatMessage(model.Id, this) | |||
| return new ChatMessage(model.Id, model.ChannelId, this) | |||
| { | |||
| Attachments = model.Attachments, | |||
| ChannelId = model.ChannelId, | |||
| Text = model.Content, | |||
| Embeds = model.Embeds, | |||
| IsMentioningEveryone = model.IsMentioningEveryone, | |||
| @@ -391,6 +448,20 @@ namespace Discord | |||
| }; | |||
| } | |||
| private Role GetRole(string id, string serverId) | |||
| { | |||
| if (id == null || serverId == null) return null; | |||
| return new Role(id, serverId, this); | |||
| } | |||
| private Role UpdateRole(WebSocketEvents.GuildRoleCreateUpdate role, bool addNew = true) | |||
| { | |||
| return new Role(role.Role.Id, role.GuildId, this) | |||
| { | |||
| Name = role.Role.Name, | |||
| Permissions = role.Role.Permissions | |||
| }; | |||
| } | |||
| private void CheckReady() | |||
| { | |||
| if (!_isReady) | |||
| @@ -2,9 +2,9 @@ | |||
| namespace Discord.Models | |||
| { | |||
| public class Channel | |||
| public sealed class Channel | |||
| { | |||
| protected readonly DiscordClient _client; | |||
| private readonly DiscordClient _client; | |||
| private string _name; | |||
| public string Id { get; } | |||
| @@ -12,8 +12,7 @@ namespace Discord.Models | |||
| public bool IsPrivate { get; internal set; } | |||
| public string Type { get; internal set; } | |||
| [JsonIgnore] | |||
| public string ServerId { get; } | |||
| [JsonIgnore] | |||
| public Server Server { get { return ServerId != null ? _client.GetServer(ServerId) : null; } } | |||
| @@ -35,7 +34,6 @@ namespace Discord.Models | |||
| public override string ToString() | |||
| { | |||
| return Name; | |||
| //return Name + " (" + Id + ")"; | |||
| } | |||
| } | |||
| } | |||
| @@ -3,23 +3,23 @@ using System; | |||
| namespace Discord.Models | |||
| { | |||
| public class ChatMessage : ChatMessageReference | |||
| public sealed class ChatMessage : ChatMessageReference | |||
| { | |||
| public bool IsMentioningEveryone { get; internal set; } | |||
| public bool IsTTS { get; internal set; } | |||
| public string Text { get; internal set; } | |||
| public DateTime Timestamp { get; internal set; } | |||
| [JsonIgnore] | |||
| public string UserId { get; internal set; } | |||
| [JsonIgnore] | |||
| public User User { get { return _client.GetUser(UserId); } } | |||
| //Not Implemented | |||
| public object[] Attachments { get; internal set; } | |||
| public object[] Embeds { get; internal set; } | |||
| internal ChatMessage(string id, DiscordClient client) | |||
| : base(id, client) | |||
| internal ChatMessage(string id, string channelId, DiscordClient client) | |||
| : base(id, channelId, client) | |||
| { | |||
| } | |||
| @@ -1,16 +1,21 @@ | |||
| namespace Discord.Models | |||
| using Newtonsoft.Json; | |||
| namespace Discord.Models | |||
| { | |||
| public class ChatMessageReference | |||
| { | |||
| protected readonly DiscordClient _client; | |||
| public string Id { get; } | |||
| public string ChannelId { get; internal set; } | |||
| public string ChannelId { get; } | |||
| [JsonIgnore] | |||
| public Channel Channel { get { return _client.GetChannel(ChannelId); } } | |||
| internal ChatMessageReference(string id, DiscordClient client) | |||
| internal ChatMessageReference(string id, string channelId, DiscordClient client) | |||
| { | |||
| Id = id; | |||
| ChannelId = channelId; | |||
| _client = client; | |||
| } | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| using Newtonsoft.Json; | |||
| namespace Discord.Models | |||
| { | |||
| public sealed class Role | |||
| { | |||
| private readonly DiscordClient _client; | |||
| public string Id { get; } | |||
| public string Name { get; internal set; } | |||
| public int Permissions { get; internal set; } | |||
| public string ServerId { get; } | |||
| [JsonIgnore] | |||
| public Server Server { get { return _client.GetServer(ServerId); } } | |||
| internal Role(string id, string serverId, DiscordClient client) | |||
| { | |||
| Id = id; | |||
| _client = client; | |||
| } | |||
| public override string ToString() | |||
| { | |||
| return Name; | |||
| } | |||
| } | |||
| } | |||
| @@ -6,9 +6,9 @@ using System.Linq; | |||
| namespace Discord.Models | |||
| { | |||
| public class Server | |||
| public sealed class Server | |||
| { | |||
| protected readonly DiscordClient _client; | |||
| private readonly DiscordClient _client; | |||
| public string Id { get; } | |||
| public string Name { get; internal set; } | |||
| @@ -22,13 +22,13 @@ namespace Discord.Models | |||
| public User Owner { get { return _client.GetUser(OwnerId); } } | |||
| internal ConcurrentDictionary<string, bool> _members; | |||
| [JsonIgnore] | |||
| public IEnumerable<string> MemberIds { get { return _members.Keys; } } | |||
| [JsonIgnore] | |||
| public IEnumerable<User> Members { get { return _members.Keys.Select(x => _client.GetUser(x)); } } | |||
| internal ConcurrentDictionary<string, bool> _channels; | |||
| [JsonIgnore] | |||
| public IEnumerable<string> ChannelIds { get { return _channels.Keys; } } | |||
| [JsonIgnore] | |||
| public IEnumerable<Channel> Channels { get { return _channels.Keys.Select(x => _client.GetChannel(x)); } } | |||
| //Not Implemented | |||
| @@ -47,7 +47,6 @@ namespace Discord.Models | |||
| public override string ToString() | |||
| { | |||
| return Name; | |||
| //return Name + " (" + Id + ")"; | |||
| } | |||
| } | |||
| } | |||
| @@ -2,9 +2,9 @@ | |||
| namespace Discord.Models | |||
| { | |||
| public class User | |||
| public sealed class User | |||
| { | |||
| protected readonly DiscordClient _client; | |||
| private readonly DiscordClient _client; | |||
| public string Id { get; } | |||
| public string Name { get; internal set; } | |||
| @@ -34,7 +34,6 @@ namespace Discord.Models | |||
| public override string ToString() | |||
| { | |||
| return Name; | |||
| //return Name + " (" + Id + ")"; | |||
| } | |||
| } | |||
| } | |||