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;
|
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 msg = channel.GetMessage(data.Id, data.Author.Id);
|
||||||
var channel = GetChannel(data.ChannelId);
|
msg.Update(data);
|
||||||
if (channel != null)
|
if (Config.LogEvents)
|
||||||
{
|
Logger.Info($"Message Update: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
|
||||||
var msg = channel.GetMessage(data.Id);
|
OnMessageUpdated(msg);
|
||||||
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.");
|
|
||||||
}
|
}
|
||||||
|
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 msg = channel.RemoveMessage(data.Id);
|
||||||
var channel = GetChannel(data.ChannelId);
|
if (Config.LogEvents)
|
||||||
if (channel != null)
|
Logger.Info($"Message Deleted: {channel.Server?.Name ?? "[Private]"}/{channel.Name}");
|
||||||
{
|
OnMessageDeleted(msg);
|
||||||
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.");
|
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
|
|||||||
@@ -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);
|
if (_messages.TryRemove(id, out msg))
|
||||||
return 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)
|
if (Client.Config.MessageCacheSize > 0)
|
||||||
throw new InvalidOperationException("Unable to retrieve a message when the message cache is disabled.");
|
{
|
||||||
|
Message result;
|
||||||
Message result;
|
if (_messages.TryGetValue(id, out result))
|
||||||
_messages.TryGetValue(id, out result);
|
return 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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user