Browse Source

Fire Message events and enable GetMessage even if cache is disabled. Add Message.User null checks.

tags/docs-0.9
RogueException 9 years ago
parent
commit
cea8708dfb
3 changed files with 36 additions and 44 deletions
  1. +20
    -32
      src/Discord.Net/DiscordClient.cs
  2. +13
    -9
      src/Discord.Net/Models/Channel.cs
  3. +3
    -3
      src/Discord.Net/Models/Message.cs

+ 20
- 32
src/Discord.Net/DiscordClient.cs View File

@@ -858,45 +858,33 @@ namespace Discord
break;
case "MESSAGE_UPDATE":
{
if (Config.MessageCacheSize > 0)
var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer);
var channel = GetChannel(data.ChannelId);
if (channel != null)
{
var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer);
var channel = GetChannel(data.ChannelId);
if (channel != null)
{
var msg = channel.GetMessage(data.Id);
if (msg != null)
{
msg.Update(data);
if (Config.LogEvents)
Logger.Info($"Message Update: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
OnMessageUpdated(msg);
}
}
else
Logger.Warning("MESSAGE_UPDATE referenced an unknown channel.");
var msg = channel.GetMessage(data.Id, data.Author.Id);
msg.Update(data);
if (Config.LogEvents)
Logger.Info($"Message Update: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
OnMessageUpdated(msg);
}
else
Logger.Warning("MESSAGE_UPDATE referenced an unknown channel.");
}
break;
case "MESSAGE_DELETE":
{
if (Config.MessageCacheSize > 0)
var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer);
var channel = GetChannel(data.ChannelId);
if (channel != null)
{
var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer);
var channel = GetChannel(data.ChannelId);
if (channel != null)
{
var msg = channel.RemoveMessage(data.Id);
if (msg != null)
{
if (Config.LogEvents)
Logger.Info($"Message Deleted: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
OnMessageDeleted(msg);
}
}
else
Logger.Warning("MESSAGE_DELETE referenced an unknown channel.");
var msg = channel.RemoveMessage(data.Id);
if (Config.LogEvents)
Logger.Info($"Message Deleted: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
OnMessageDeleted(msg);
}
else
Logger.Warning("MESSAGE_DELETE referenced an unknown channel.");
}
break;
case "MESSAGE_ACK":
@@ -907,7 +895,7 @@ namespace Discord
var channel = GetChannel(data.ChannelId);
if (channel != null)
{
var msg = channel.GetMessage(data.MessageId);
var msg = channel.GetMessage(data.MessageId, null);
if (msg != null)
{
if (Config.LogEvents)


+ 13
- 9
src/Discord.Net/Models/Channel.cs View File

@@ -263,21 +263,25 @@ namespace Discord
if (Client.Config.MessageCacheSize > 0)
{
Message msg;
_messages.TryRemove(id, out msg);
return msg;
if (_messages.TryRemove(id, out msg))
return msg;
}
return null;
return new Message(id, this, null);
}

public Message GetMessage(ulong id)
=> GetMessage(id, null);
internal Message GetMessage(ulong id, ulong? userId)
{
if (Client.Config.MessageCacheSize <= 0)
throw new InvalidOperationException("Unable to retrieve a message when the message cache is disabled.");

Message result;
_messages.TryGetValue(id, out result);
return result;
if (Client.Config.MessageCacheSize > 0)
{
Message result;
if (_messages.TryGetValue(id, out result))
return result;
}
return new Message(id, this, userId != null ? GetUser(userId.Value) : null);
}

public async Task<Message[]> DownloadMessages(int limit = 100, ulong? relativeMessageId = null,
RelativeDirection relativeDir = RelativeDirection.Before, bool useCache = true)
{


+ 3
- 3
src/Discord.Net/Models/Message.cs View File

@@ -206,7 +206,7 @@ namespace Discord
/// <summary> Returns the server containing the channel this message was sent to. </summary>
public Server Server => Channel.Server;
/// <summary> Returns if this message was sent from the logged-in accounts. </summary>
public bool IsAuthor => User.Id == Client.CurrentUser?.Id;
public bool IsAuthor => User != null && User.Id == Client.CurrentUser?.Id;

internal Message(ulong id, Channel channel, User user)
{
@@ -279,7 +279,7 @@ namespace Discord
}
if (model.IsMentioningEveryone != null)
{
if (model.IsMentioningEveryone.Value && User.GetPermissions(channel).MentionEveryone)
if (model.IsMentioningEveryone.Value && User != null && User.GetPermissions(channel).MentionEveryone)
MentionedRoles = new Role[] { Server.EveryoneRole };
else
MentionedRoles = new Role[0];
@@ -360,6 +360,6 @@ namespace Discord

public override bool Equals(object obj) => obj is Message && (obj as Message).Id == Id;
public override int GetHashCode() => unchecked(Id.GetHashCode() + 9979);
public override string ToString() => $"{User}: {RawText}";
public override string ToString() => $"{User?.Name ?? "Unknown User"}: {RawText}";
}
}

Loading…
Cancel
Save