Fire Message events and enable GetMessage even if cache is disabled. Add Message.User null checks.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user