Added a virtual server for private messages

This commit is contained in:
RogueException
2015-10-22 06:16:28 -03:00
parent 434f72f551
commit 3b32cde35e
5 changed files with 65 additions and 58 deletions

View File

@@ -10,12 +10,14 @@ namespace Discord
{ {
private const string PMServerId = "Private"; private const string PMServerId = "Private";
Server PMServer { get; } public Server PMServer { get; private set; }
public Servers(DiscordClient client, object writerLock) public Servers(DiscordClient client, object writerLock)
: base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { }
protected override void Initialize()
{ {
PMServer = new Server(client, PMServerId) { IsVirtual = true }; PMServer = new Server(_client, PMServerId) { IsVirtual = true };
PMServer.Update(new API.ExtendedGuildInfo { Id = PMServerId, Name = PMServerId }); PMServer.Update(new API.ExtendedGuildInfo { Id = PMServerId, Name = PMServerId });
_dictionary[PMServerId] = PMServer; _dictionary[PMServerId] = PMServer;
} }

View File

@@ -66,83 +66,83 @@ namespace Discord
if (_config.LogLevel >= LogMessageSeverity.Info) if (_config.LogLevel >= LogMessageSeverity.Info)
{ {
ServerCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ServerCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Created Server: {e.Server?.Name}" + $"Created Server: {e.Server?.Name ?? e.ServerId}" +
(showIDs ? $" ({e.ServerId})" : "")); (showIDs ? $" ({e.ServerId})" : ""));
ServerDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ServerDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Destroyed Server: {e.Server?.Name}" + $"Destroyed Server: {e.Server?.Name ?? e.ServerId}" +
(showIDs ? $" ({e.ServerId})" : "")); (showIDs ? $" ({e.ServerId})" : ""));
ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ServerUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Server: {e.Server?.Name}" + $"Updated Server: {e.Server?.Name ?? e.ServerId}" +
(showIDs ? $" ({e.ServerId})" : "")); (showIDs ? $" ({e.ServerId})" : ""));
ServerAvailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ServerAvailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Server Available: {e.Server?.Name}" + $"Server Available: {e.Server?.Name ?? e.ServerId}" +
(showIDs ? $" ({e.ServerId})" : "")); (showIDs ? $" ({e.ServerId})" : ""));
ServerUnavailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ServerUnavailable += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Server Unavailable: {e.Server?.Name}" + $"Server Unavailable: {e.Server?.Name ?? e.ServerId}" +
(showIDs ? $" ({e.ServerId})" : "")); (showIDs ? $" ({e.ServerId})" : ""));
ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ChannelCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Created Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}" + $"Created Channel: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId})" : ""));
ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ChannelDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Destroyed Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}" + $"Destroyed Channel: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId})" : ""));
ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, ChannelUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Channel: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}" + $"Updated Channel: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId})" : ""));
MessageCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, MessageCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Created Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId}" + $"Created Message: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.MessageId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.MessageId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.MessageId})" : ""));
MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, MessageDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Deleted Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId}" + $"Deleted Message: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.MessageId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.MessageId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.MessageId})" : ""));
MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, MessageUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId}" + $"Updated Message: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.MessageId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.MessageId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.MessageId})" : ""));
RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, RoleCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Created Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name}" + $"Created Role: {e.Server?.Name ?? e.ServerId}/{e.Role?.Name ?? e.RoleId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.RoleId})." : "")); (showIDs ? $" ({e.ServerId}/{e.RoleId})" : ""));
RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, RoleUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name}" + $"Updated Role: {e.Server?.Name ?? e.ServerId}/{e.Role?.Name ?? e.RoleId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.RoleId})." : "")); (showIDs ? $" ({e.ServerId}/{e.RoleId})" : ""));
RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, RoleDeleted += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Deleted Role: {e.Server?.Name ?? "[Private]"}/{e.Role.Name}" + $"Deleted Role: {e.Server?.Name ?? e.ServerId}/{e.Role?.Name ?? e.RoleId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.RoleId})." : "")); (showIDs ? $" ({e.ServerId}/{e.RoleId})" : ""));
BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, BanAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Added Ban: {e.Server?.Name ?? "[Private]"}/{e.User?.Name ?? e.UserId}" + $"Added Ban: {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})." : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, BanRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Removed Ban: {e.Server?.Name ?? "[Private]"}/{e.User?.Name ?? e.UserId}" + $"Removed Ban: {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})." : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
UserAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, UserAdded += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Added Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name}" + $"Added Member: {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})." : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
UserRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, UserRemoved += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Removed Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name}" + $"Removed Member: {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})." : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, MemberUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Member: {e.Server?.Name ?? "[Private]"}/{e.User.Name}" + $"Updated Member: {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})." : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
UserVoiceStateUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, UserVoiceStateUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated Member (Voice State): {e.Server?.Name ?? "[Private]"}/{e.User.Name}" + $"Updated Member (Voice State): {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "0"}/{e.UserId})" : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
UserUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client, UserUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.Client,
$"Updated User: {e.User.Name}" + $"Updated User: {e.User.Name}" +
(showIDs ? $" ({e.UserId})." : "")); (showIDs ? $" ({e.UserId})" : ""));
} }
if (_config.LogLevel >= LogMessageSeverity.Verbose) if (_config.LogLevel >= LogMessageSeverity.Verbose)
{ {
UserIsTyping += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, UserIsTyping += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client,
$"Updated User (Is Typing): {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.User.Name}" + $"Updated User (Is Typing): {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.UserId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.UserId})" : ""));
MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, MessageReadRemotely += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client,
$"Read Message (Remotely): {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId}" + $"Read Message (Remotely): {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.MessageId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.MessageId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.MessageId})" : ""));
MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, MessageSent += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client,
$"Sent Message: {e.Server?.Name ?? "[Private]"}/{e.Channel.Name}/{e.MessageId}" + $"Sent Message: {e.Server?.Name ?? e.ServerId}/{e.Channel?.Name ?? e.ChannelId}/{e.MessageId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.ChannelId}/{e.MessageId})" : "")); (showIDs ? $" ({e.ServerId}/{e.ChannelId}/{e.MessageId})" : ""));
UserPresenceUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, UserPresenceUpdated += (s, e) => RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client,
$"Updated Member (Presence): {e.Server?.Name ?? "[Private]"}/{e.User.Name}" + $"Updated Member (Presence): {e.Server?.Name ?? e.ServerId}/{e.User?.Name ?? e.UserId}" +
(showIDs ? $" ({e.ServerId ?? "[Private]"}/{e.UserId})" : "")); (showIDs ? $" ({e.ServerId}/{e.UserId})" : ""));
_api.RestClient.OnRequest += (s, e) => _api.RestClient.OnRequest += (s, e) =>
{ {
@@ -154,15 +154,15 @@ namespace Discord
} }
if (_config.LogLevel >= LogMessageSeverity.Debug) if (_config.LogLevel >= LogMessageSeverity.Debug)
{ {
_channels.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Channel {e.Item?.ServerId ?? "[Private]"}/{e.Item.Id}"); _channels.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Channel {e.Item.ServerId}/{e.Item.Id}");
_channels.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Channel {e.Item.ServerId ?? "[Private]"}/{e.Item.Id}"); _channels.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Channel {e.Item.ServerId}/{e.Item.Id}");
_channels.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Channels"); _channels.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Channels");
_members.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Member {e.Item.ServerId ?? "[Private]"}/{e.Item.UserId}"); _members.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Member {e.Item.ServerId}/{e.Item.UserId}");
_members.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Member {e.Item.ServerId ?? "[Private]"}/{e.Item.UserId}"); _members.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Member {e.Item.ServerId}/{e.Item.UserId}");
_members.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Members"); _members.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Members");
_messages.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Message {e.Item.ServerId ?? "[Private]"}/{e.Item.ChannelId}/{e.Item.Id}"); _messages.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Message {e.Item.ServerId}/{e.Item.ChannelId}/{e.Item.Id}");
_messages.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Message {e.Item.ServerId ?? "[Private]"}/{e.Item.ChannelId}/{e.Item.Id}"); _messages.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Message {e.Item.ServerId}/{e.Item.ChannelId}/{e.Item.Id}");
_messages.ItemRemapped += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Remapped Message {e.Item.ServerId ?? "[Private]"}/{e.Item.ChannelId}/[{e.OldId} -> {e.NewId}]"); _messages.ItemRemapped += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Remapped Message {e.Item.ServerId}/{e.Item.ChannelId}/[{e.OldId} -> {e.NewId}]");
_messages.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Messages"); _messages.Cleared += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Cleared Messages");
_roles.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Role {e.Item.ServerId}/{e.Item.Id}"); _roles.ItemCreated += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Created Role {e.Item.ServerId}/{e.Item.Id}");
_roles.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Role {e.Item.ServerId}/{e.Item.Id}"); _roles.ItemDestroyed += (s, e) => RaiseOnLog(LogMessageSeverity.Debug, LogMessageSource.Cache, $"Destroyed Role {e.Item.ServerId}/{e.Item.Id}");

View File

@@ -61,8 +61,11 @@ namespace Discord
_dictionary = new ConcurrentDictionary<string, TValue>(); _dictionary = new ConcurrentDictionary<string, TValue>();
_onCache = onCache; _onCache = onCache;
_onUncache = onUncache; _onUncache = onUncache;
Initialize();
} }
protected virtual void Initialize() { }
public TValue this[string key] public TValue this[string key]
{ {
get get
@@ -129,6 +132,7 @@ namespace Discord
lock (_writerLock) lock (_writerLock)
{ {
_dictionary.Clear(); _dictionary.Clear();
Initialize();
RaiseCleared(); RaiseCleared();
} }
} }

View File

@@ -97,7 +97,7 @@ namespace Discord
{ {
_client = client; _client = client;
Id = id; Id = id;
ServerId = serverId; ServerId = serverId ?? _client.Servers.PMServer.Id;
RecipientId = recipientId; RecipientId = recipientId;
_messages = new ConcurrentDictionary<string, bool>(); _messages = new ConcurrentDictionary<string, bool>();
_permissionOverwrites = _initialPermissionsOverwrites; _permissionOverwrites = _initialPermissionsOverwrites;

View File

@@ -73,7 +73,7 @@ namespace Discord
{ {
_client = client; _client = client;
UserId = userId; UserId = userId;
ServerId = serverId; ServerId = serverId ?? _client.Servers.PMServer.Id;
Status = UserStatus.Offline; Status = UserStatus.Offline;
RoleIds = _initialRoleIds; RoleIds = _initialRoleIds;
_permissions = new ConcurrentDictionary<string, ChannelPermissions>(); _permissions = new ConcurrentDictionary<string, ChannelPermissions>();
@@ -90,6 +90,7 @@ namespace Discord
var user = User; var user = User;
if (user != null) if (user != null)
{ {
if (server == null || !server.IsVirtual)
user.AddServer(ServerId); user.AddServer(ServerId);
user.AddRef(); user.AddRef();
_hasRef = true; _hasRef = true;