diff --git a/src/Discord.Net/DiscordClient.Channels.cs b/src/Discord.Net/DiscordClient.Channels.cs index 1b15a2d2f..541182141 100644 --- a/src/Discord.Net/DiscordClient.Channels.cs +++ b/src/Discord.Net/DiscordClient.Channels.cs @@ -106,7 +106,7 @@ namespace Discord if (channel == null) { var response = await _api.CreatePMChannel(_userId, member.Id).ConfigureAwait(false); - var recipient = _members.GetOrAdd(response.Recipient?.Id, _servers.PMServer.Id); + var recipient = _members.GetOrAdd(response.Recipient?.Id, null); recipient.Update(response.Recipient); channel = _channels.GetOrAdd(response.Id, response.GuildId, response.Recipient?.Id); channel.Update(response); diff --git a/src/Discord.Net/DiscordClient.Roles.cs b/src/Discord.Net/DiscordClient.Roles.cs index 866852061..10fc46ff5 100644 --- a/src/Discord.Net/DiscordClient.Roles.cs +++ b/src/Discord.Net/DiscordClient.Roles.cs @@ -12,20 +12,7 @@ namespace Discord public Roles(DiscordClient client, object writerLock) : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } - - internal Role CreateVirtualRole(string serverId, string name) - { - var role = new Role(_client, serverId, serverId); - _dictionary[serverId] = role; - role.Update(new API.RoleInfo - { - Id = serverId, - Name = name, - Permissions = ServerPermissions.None.RawValue - }); - return role; - } - + public Role GetOrAdd(string id, string serverId) => GetOrAdd(id, () => new Role(_client, id, serverId)); } diff --git a/src/Discord.Net/DiscordClient.Servers.cs b/src/Discord.Net/DiscordClient.Servers.cs index 0e053f3e4..afebc9c02 100644 --- a/src/Discord.Net/DiscordClient.Servers.cs +++ b/src/Discord.Net/DiscordClient.Servers.cs @@ -8,36 +8,9 @@ namespace Discord { internal sealed class Servers : AsyncCollection { - public Server PMServer { get; private set; } - public Servers(DiscordClient client, object writerLock) : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } - protected override void Initialize() - { - PMServer = CreateVirtualServer("Private"); - } - - private Server CreateVirtualServer(string name) - { - string id = $"[{name}]"; - var server = new Server(_client, id) { IsVirtual = true }; - _dictionary[id] = server; - - var everyone = _client.Roles.CreateVirtualRole(id, "@everyone"); - server.Update(new API.GuildInfo - { - Id = id, - Name = id, - JoinedAt = DateTime.UtcNow, - Roles = new API.RoleInfo[] { new API.RoleInfo { - Id = everyone.Id, - Name = everyone.Name - } } - }); - return server; - } - public Server GetOrAdd(string id) => GetOrAdd(id, () => new Server(_client, id)); } diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index d212398d5..040620168 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -46,13 +46,6 @@ namespace Discord _servers = new Servers(this, cacheLock); _users = new Users(this, cacheLock); - _channels.Clear(); - _members.Clear(); - _messages.Clear(); - _roles.Clear(); - _servers.Clear(); - _users.Clear(); - _status = UserStatus.Online; this.Connected += async (s, e) => @@ -76,58 +69,58 @@ namespace Discord if (_config.LogLevel >= LogMessageSeverity.Info) { ServerCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Created Server: {e.Server?.Name}"); + $"Created Server: {e.Server?.Name ?? "[Private]"}"); ServerDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Destroyed Server: {e.Server?.Name}"); + $"Destroyed Server: {e.Server?.Name ?? "[Private]"}"); ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Server: {e.Server?.Name}"); + $"Updated Server: {e.Server?.Name ?? "[Private]"}"); ServerAvailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Server Available: {e.Server?.Name}"); + $"Server Available: {e.Server?.Name ?? "[Private]"}"); ServerUnavailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Server Unavailable: {e.Server?.Name}"); + $"Server Unavailable: {e.Server?.Name ?? "[Private]"}"); ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Created Channel: {e.Server?.Name}/{e.Channel?.Name}"); + $"Created Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Destroyed Channel: {e.Server?.Name}/{e.Channel?.Name}"); + $"Destroyed Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Channel: {e.Server?.Name}/{e.Channel?.Name}"); + $"Updated Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); MessageCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Created Message: {e.Server?.Name}/{e.Channel?.Name}/{e.Message?.Id}"); + $"Created Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Deleted Message: {e.Server?.Name}/{e.Channel?.Name}/{e.Message?.Id}"); + $"Deleted Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Message: {e.Server?.Name}/{e.Channel?.Name}/{e.Message?.Id}"); + $"Updated Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Created Role: {e.Server?.Name}/{e.Role?.Name}"); + $"Created Role: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Role: {e.Server?.Name}/{e.Role?.Name}"); + $"Updated Role: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Deleted Role: {e.Server?.Name}/{e.Role?.Name}"); + $"Deleted Role: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, $"Added Ban: {e.Server?.Name }/{e.UserId}"); BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Removed Ban: {e.Server?.Name}/{e.UserId}"); + $"Removed Ban: {e.Server?.Name ?? "[Private]"}/{e.UserId}"); UserAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Added Member: {e.Server?.Name}/{e.UserId}"); + $"Added Member: {e.Server?.Name ?? "[Private]"}/{e.UserId}"); UserRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Removed Member: {e.Server?.Name}/{e.UserId}"); + $"Removed Member: {e.Server?.Name ?? "[Private]"}/{e.UserId}"); MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Member: {e.Server?.Name}/{e.UserId}"); + $"Updated Member: {e.Server?.Name ?? "[Private]"}/{e.UserId}"); UserVoiceStateUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, - $"Updated Member (Voice State): {e.Server?.Name}/{e.UserId}"); + $"Updated Member (Voice State): {e.Server?.Name ?? "[Private]"}/{e.UserId}"); ProfileUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, "Updated Profile"); } if (_config.LogLevel >= LogMessageSeverity.Verbose) { UserIsTyping += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, - $"Updated User (Is Typing): {e.Server?.Name}/{e.Channel?.Name}/{e.Member?.Name}"); + $"Updated User (Is Typing): {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Member?.Name}"); MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, - $"Read Message (Remotely): {e.Server?.Name}/{e.Channel?.Name}/{e.Message?.Id}"); + $"Read Message (Remotely): {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, - $"Sent Message: {e.Server?.Name}/{e.Channel?.Name}/{e.Message?.Id}"); + $"Sent Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); UserPresenceUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, - $"Updated Member (Presence): {e.Server?.Name}/{e.Member?.Name}"); + $"Updated Member (Presence): {e.Server?.Name ?? "[Private]"}/{e.Member?.Name}"); _api.RestClient.OnRequest += (s, e) => { @@ -139,18 +132,18 @@ namespace Discord } if (_config.LogLevel >= LogMessageSeverity.Debug) { - _channels.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Channel {e.Item.Server.Id}/{e.Item.Id}"); - _channels.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Channel {e.Item.Server.Id}/{e.Item.Id}"); + _channels.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Channel {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); + _channels.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Channel {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); _channels.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Channels"); - _members.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Member {e.Item.Server.Id}/{e.Item.Id}"); - _members.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Member {e.Item.Server.Id}/{e.Item.Id}"); + _members.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Member {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); + _members.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Member {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); _members.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Members"); - _messages.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Message {e.Item.Server.Id}/{e.Item.Channel.Id}/{e.Item.Id}"); - _messages.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Message {e.Item.Server.Id}/{e.Item.Channel.Id}/{e.Item.Id}"); - _messages.ItemRemapped += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Remapped Message {e.Item.Server.Id}/{e.Item.Channel.Id}/[{e.OldId} -> {e.NewId}]"); + _messages.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Message {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}"); + _messages.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Message {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}"); + _messages.ItemRemapped += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Remapped Message {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Channel.Id}/[{e.OldId} -> {e.NewId}]"); _messages.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Messages"); - _roles.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Role {e.Item.Server.Id}/{e.Item.Id}"); - _roles.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Role {e.Item.Server.Id}/{e.Item.Id}"); + _roles.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Role {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); + _roles.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Role {e.Item.Server?.Id ?? "[Private]"}/{e.Item.Id}"); _roles.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Roles"); _servers.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Server {e.Item.Id}"); _servers.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Server {e.Item.Id}"); @@ -293,7 +286,7 @@ namespace Discord case "READY": //Resync { var data = e.Payload.ToObject(_serializer); - _currentUser = _members.GetOrAdd(data.User.Id, _servers.PMServer.Id); + _currentUser = _members.GetOrAdd(data.User.Id, null); _currentUser.Update(data.User); foreach (var model in data.Guilds) { @@ -305,7 +298,7 @@ namespace Discord } foreach (var model in data.PrivateChannels) { - var user = _members.GetOrAdd(model.Recipient.Id, _servers.PMServer.Id); + var user = _members.GetOrAdd(model.Recipient.Id, null); user.Update(model.Recipient); var channel = _channels.GetOrAdd(model.Id, null, user.Id); channel.Update(model); @@ -360,7 +353,7 @@ namespace Discord Channel channel; if (data.IsPrivate) { - var member = _members.GetOrAdd(data.Recipient.Id, _servers.PMServer.Id); + var member = _members.GetOrAdd(data.Recipient.Id, null); member.Update(data.Recipient); channel = _channels.GetOrAdd(data.Id, null, member.Id); } diff --git a/src/Discord.Net/Helpers/AsyncCollection.cs b/src/Discord.Net/Helpers/AsyncCollection.cs index cc3cc9413..e76cff6ac 100644 --- a/src/Discord.Net/Helpers/AsyncCollection.cs +++ b/src/Discord.Net/Helpers/AsyncCollection.cs @@ -63,8 +63,6 @@ namespace Discord _onUncache = onUncache; } - protected virtual void Initialize() { } - public TValue this[string key] { get @@ -131,7 +129,6 @@ namespace Discord lock (_writerLock) { _dictionary.Clear(); - Initialize(); RaiseCleared(); } } diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index 73e290aaf..434b6de50 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -86,7 +86,7 @@ namespace Discord internal Channel(DiscordClient client, string id, string serverId, string recipientId) : base(client, id) { - _serverId = serverId ?? _client.Servers.PMServer.Id; + _serverId = serverId; _recipientId = recipientId; _permissionOverwrites = _initialPermissionsOverwrites; _areMembersStale = true; diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index d143ecf19..838fccdf4 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -70,7 +70,7 @@ namespace Discord internal Member(DiscordClient client, string id, string serverId) : base(client, id) { - ServerId = serverId ?? _client.Servers.PMServer.Id; + ServerId = serverId; Status = UserStatus.Offline; _roleIds = _initialRoleIds; _channels = new ConcurrentDictionary();