fix: don't delete rows from messages table when the associated member is deleted
This commit is contained in:
@@ -51,7 +51,7 @@ public class ProxiedMessage
|
||||
|
||||
var msg = await GetMessageToEdit(ctx);
|
||||
|
||||
if (ctx.System.Id != msg.System.Id)
|
||||
if (ctx.System.Id != msg.System?.Id)
|
||||
throw new PKError("Can't edit a message sent by a different system.");
|
||||
|
||||
var newContent = ctx.RemainderOrNull().NormalizeLineEndSpacing();
|
||||
@@ -209,7 +209,7 @@ public class ProxiedMessage
|
||||
if (!showContent)
|
||||
throw new PKError(noShowContentError);
|
||||
|
||||
if (message.System.Id != ctx.System.Id)
|
||||
if (message.System?.Id != ctx.System.Id && message.Message.Sender != ctx.Author.Id)
|
||||
throw new PKError("You can only delete your own messages.");
|
||||
|
||||
await ctx.Rest.DeleteMessage(message.Message.Channel, message.Message.Mid);
|
||||
|
||||
@@ -128,7 +128,7 @@ public class ReactionAdded: IEventHandler<MessageReactionAddEvent>
|
||||
var system = await _repo.GetSystemByAccount(evt.UserId);
|
||||
|
||||
// Can only delete your own message
|
||||
if (msg.System.Id != system?.Id) return;
|
||||
if (msg.System?.Id != system?.Id && msg.Message.Sender != evt.UserId) return;
|
||||
|
||||
try
|
||||
{
|
||||
@@ -170,16 +170,17 @@ public class ReactionAdded: IEventHandler<MessageReactionAddEvent>
|
||||
try
|
||||
{
|
||||
var dm = await _cache.GetOrCreateDmChannel(_rest, evt.UserId);
|
||||
await _rest.CreateMessage(dm.Id, new MessageRequest
|
||||
{
|
||||
Embed = await _embeds.CreateMemberEmbed(
|
||||
msg.System,
|
||||
msg.Member,
|
||||
guild,
|
||||
LookupContext.ByNonOwner,
|
||||
DateTimeZone.Utc
|
||||
)
|
||||
});
|
||||
if (msg.Member != null)
|
||||
await _rest.CreateMessage(dm.Id, new MessageRequest
|
||||
{
|
||||
Embed = await _embeds.CreateMemberEmbed(
|
||||
msg.System,
|
||||
msg.Member,
|
||||
guild,
|
||||
LookupContext.ByNonOwner,
|
||||
DateTimeZone.Utc
|
||||
)
|
||||
});
|
||||
|
||||
await _rest.CreateMessage(
|
||||
dm.Id,
|
||||
@@ -202,6 +203,8 @@ public class ReactionAdded: IEventHandler<MessageReactionAddEvent>
|
||||
var requiredPerms = PermissionSet.ViewChannel | PermissionSet.SendMessages;
|
||||
if (member == null || !(await _cache.PermissionsFor(evt.ChannelId, member)).HasFlag(requiredPerms)) return;
|
||||
|
||||
if (msg.Member == null) return;
|
||||
|
||||
var config = await _repo.GetSystemConfig(msg.System.Id);
|
||||
|
||||
if (config.PingsEnabled)
|
||||
|
||||
@@ -355,13 +355,20 @@ public class EmbedService
|
||||
|
||||
// Put it all together
|
||||
var eb = new EmbedBuilder()
|
||||
.Author(new Embed.EmbedAuthor(msg.Member.NameFor(ctx),
|
||||
IconUrl: msg.Member.AvatarFor(ctx).TryGetCleanCdnUrl()))
|
||||
.Author(new Embed.EmbedAuthor(msg.Member?.NameFor(ctx) ?? "(deleted member)",
|
||||
IconUrl: msg.Member?.AvatarFor(ctx).TryGetCleanCdnUrl()))
|
||||
.Description(content)
|
||||
.Image(showContent ? new Embed.EmbedImage(serverMsg?.Attachments?.FirstOrDefault()?.Url) : null)
|
||||
.Field(new Embed.Field("System",
|
||||
msg.System.Name != null ? $"{msg.System.Name} (`{msg.System.Hid}`)" : $"`{msg.System.Hid}`", true))
|
||||
.Field(new Embed.Field("Member", $"{msg.Member.NameFor(ctx)} (`{msg.Member.Hid}`)", true))
|
||||
msg.System == null
|
||||
? "*(deleted or unknown system)*"
|
||||
: msg.System.Name != null ? $"{msg.System.Name} (`{msg.System.Hid}`)" : $"`{msg.System.Hid}`"
|
||||
, true))
|
||||
.Field(new Embed.Field("Member",
|
||||
msg.Member == null
|
||||
? "*(deleted member)*"
|
||||
: $"{msg.Member.NameFor(ctx)} (`{msg.Member.Hid}`)"
|
||||
, true))
|
||||
.Field(new Embed.Field("Sent by", userStr, true))
|
||||
.Timestamp(DiscordUtils.SnowflakeToInstant(msg.Message.Mid).ToDateTimeOffset().ToString("O"));
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public class LogChannelService
|
||||
var triggerChannel = await _cache.GetChannel(proxiedMessage.Channel);
|
||||
|
||||
var system = await _repo.GetSystem(ctx.SystemId.Value);
|
||||
var member = await _repo.GetMember(proxiedMessage.Member);
|
||||
var member = await _repo.GetMember(proxiedMessage.Member!.Value);
|
||||
|
||||
// Send embed!
|
||||
var embed = _embed.CreateLoggedMessageEmbed(trigger, hookMessage, system.Hid, member, triggerChannel.Name,
|
||||
|
||||
Reference in New Issue
Block a user