Browse Source

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

pull/22/merge
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; break;
case "MESSAGE_UPDATE": 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; break;
case "MESSAGE_DELETE": 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; break;
case "MESSAGE_ACK": case "MESSAGE_ACK":
@@ -907,7 +895,7 @@ namespace Discord
var channel = GetChannel(data.ChannelId); var channel = GetChannel(data.ChannelId);
if (channel != null) if (channel != null)
{ {
var msg = channel.GetMessage(data.MessageId);
var msg = channel.GetMessage(data.MessageId, null);
if (msg != null) if (msg != null)
{ {
if (Config.LogEvents) if (Config.LogEvents)


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

@@ -263,21 +263,25 @@ namespace Discord
if (Client.Config.MessageCacheSize > 0) if (Client.Config.MessageCacheSize > 0)
{ {
Message msg; 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) 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, public async Task<Message[]> DownloadMessages(int limit = 100, ulong? relativeMessageId = null,
RelativeDirection relativeDir = RelativeDirection.Before, bool useCache = true) 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> /// <summary> Returns the server containing the channel this message was sent to. </summary>
public Server Server => Channel.Server; public Server Server => Channel.Server;
/// <summary> Returns if this message was sent from the logged-in accounts. </summary> /// <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) internal Message(ulong id, Channel channel, User user)
{ {
@@ -279,7 +279,7 @@ namespace Discord
} }
if (model.IsMentioningEveryone != null) 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 }; MentionedRoles = new Role[] { Server.EveryoneRole };
else else
MentionedRoles = new Role[0]; 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 bool Equals(object obj) => obj is Message && (obj as Message).Id == Id;
public override int GetHashCode() => unchecked(Id.GetHashCode() + 9979); 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