Skip to content

Commit

Permalink
Merge branch 'InFTord-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Naamloos committed Oct 20, 2023
2 parents ad9220d + 8c973bd commit d2a5175
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 191 deletions.
2 changes: 1 addition & 1 deletion ModCore/Commands/Starboard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public async Task RandomAsync(InteractionContext ctx)
}

var starCount = guildStars.Count(x => x.ChannelId == star.ChannelId && x.MessageId == star.MessageId);
var response = Reactions.buildMessage(msg, emoji, starCount);
var response = StarboardListeners.buildStarboardMessage(msg, starCount, emoji);
var converted = new DiscordInteractionResponseBuilder(response);

await ctx.CreateResponseAsync(converted);
Expand Down
189 changes: 0 additions & 189 deletions ModCore/Listeners/Reactions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,78 +42,6 @@ public static async Task ReactionAdd(MessageReactionAddEventArgs eventargs, Data
}

return;

// Starboard
var emoji = config.Starboard.Emoji;
DiscordEmoji discordemoji = null;
if (emoji.EmojiId != 0)
discordemoji = DiscordEmoji.FromGuildEmote(client, (ulong)emoji.EmojiId);
else
discordemoji = DiscordEmoji.FromUnicode(client, emoji.EmojiName);

if (config.Starboard.Enable && eventargs.Emoji == discordemoji)
{
long starboardmessageid = 0;
var channel = eventargs.Channel.Guild.Channels.First(x => x.Key == (ulong)config.Starboard.ChannelId).Value;

if ((!channel.IsNSFW) && eventargs.Channel.IsNSFW)
return;

if (channel.Id != eventargs.Channel.Id) // star on starboard entry
{
// fetch REST message (cache sometimes fails)
var message = await eventargs.Channel.GetMessageAsync(eventargs.Message.Id);
var user = await eventargs.Channel.Guild.GetMemberAsync(eventargs.User.Id);

if (message.Author.Id == user.Id || user.IsBot)
return;

if (db.StarDatas.Any(x => (ulong)x.MessageId == eventargs.Message.Id && (ulong)x.ChannelId == eventargs.Channel.Id))
{
var count = db.StarDatas.Count(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == eventargs.Message.Id);

if (db.StarDatas.Any(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == eventargs.Message.Id && x.StarboardMessageId != 0))
{
var other = db.StarDatas.First(x => (ulong)x.MessageId == message.Id && x.StarboardMessageId != 0);
var oldsbmessage = await channel.GetMessageAsync((ulong)other.StarboardMessageId);

var starboardmessage = await oldsbmessage.ModifyAsync(buildMessage(message, eventargs.Emoji, count + 1));
starboardmessageid = (long)starboardmessage.Id;
}
else
{
if(count + 1 >= config.Starboard.Minimum)
{
// create msg
var starboardmessage = await channel.SendMessageAsync(buildMessage(message, eventargs.Emoji, count + 1));
starboardmessageid = (long)starboardmessage.Id;
}
}
}
else if (config.Starboard.Minimum <= 1)
{
var starboardmessage = await channel.SendMessageAsync(buildMessage(message, eventargs.Emoji, 1));
starboardmessageid = (long)starboardmessage.Id;
}

await db.StarDatas.AddAsync(new DatabaseStarData
{
ChannelId = (long)eventargs.Channel.Id,
GuildId = (long)eventargs.Guild.Id,
MessageId = (long)message.Id,
AuthorId = (long)message.Author.Id,
StarboardMessageId = starboardmessageid,
StargazerId = (long)eventargs.User.Id,
});

// somebody once told me...
var allstars = db.StarDatas.Where(x => (ulong)x.MessageId == message.Id).ToList();
allstars.ForEach(x => x.StarboardMessageId = starboardmessageid);
db.StarDatas.UpdateRange(allstars);

await db.SaveChangesAsync();
}
}
}
}

Expand All @@ -138,124 +66,7 @@ public static async Task ReactionRemove(MessageReactionRemoveEventArgs eventargs
}

return;

//SB
var emoji = config.Starboard.Emoji;
DiscordEmoji discordemoji = null;
if (emoji.EmojiId != 0)
discordemoji = DiscordEmoji.FromGuildEmote(client, (ulong)emoji.EmojiId);
else
discordemoji = DiscordEmoji.FromUnicode(client, emoji.EmojiName);

if (config.Starboard.Enable && eventargs.Emoji == discordemoji)
{
var channel = eventargs.Channel.Guild.Channels.First(x => x.Key == (ulong)config.Starboard.ChannelId).Value;
if (channel.Id != eventargs.Channel.Id)
{
// fetch REST message (cache sometimes fails)
var message = await eventargs.Channel.GetMessageAsync(eventargs.Message.Id);
var user = await channel.Guild.GetMemberAsync(eventargs.User.Id);

long newstarboardmessageid = 0;
if (db.StarDatas.Any(x => (ulong)x.MessageId == message.Id && (ulong)x.StargazerId == user.Id && x.StarboardMessageId != 0))
{
var star = db.StarDatas.First(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == message.Id && (ulong)x.StargazerId == user.Id);
var count = db.StarDatas.Count(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == message.Id);

if (db.StarDatas.Any(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == message.Id && (ulong)x.StargazerId == user.Id && x.StarboardMessageId != 0))
{
var starboardmessageid = db.StarDatas.First(x => x.ChannelId == (long)eventargs.Channel.Id && (ulong)x.MessageId == message.Id && (ulong)x.StargazerId == user.Id && x.StarboardMessageId != 0)
.StarboardMessageId;

var m = await channel.GetMessageAsync((ulong)starboardmessageid);
if (count - 1 >= config.Starboard.Minimum)
{
await m.ModifyAsync(buildMessage(message, eventargs.Emoji, count - 1));
newstarboardmessageid = starboardmessageid;
}
else
{
await m.DeleteAsync();
}
}

db.StarDatas.Remove(star);
await db.SaveChangesAsync();

// somebody once told me...
var allstars = db.StarDatas.Where(x => (ulong)x.MessageId == message.Id).ToList();
allstars.ForEach(x => x.StarboardMessageId = newstarboardmessageid);
db.StarDatas.UpdateRange(allstars);

await db.SaveChangesAsync();
}
}
}
}
}

//[AsyncListener(EventType.MessageReactionsCleared)]
public static async Task ReactionClear(MessageReactionsClearEventArgs eventargs, DiscordClient client, DatabaseContextBuilder database)
{
GuildSettings config = null;
using (var db = database.CreateContext())
{
config = eventargs.Channel.Guild.GetGuildSettings(db);
if (config == null)
return;

var emoji = config.Starboard.Emoji;
DiscordEmoji discordemoji = null;
if (emoji.EmojiId != 0)
discordemoji = DiscordEmoji.FromGuildEmote(client, (ulong)emoji.EmojiId);
else
discordemoji = DiscordEmoji.FromUnicode(client, emoji.EmojiName);

if (config.Starboard.Enable)
{
var channel = eventargs.Channel.Guild.Channels.First(x => x.Key == (ulong)config.Starboard.ChannelId).Value;
if (db.StarDatas.Any(x => (ulong)x.MessageId == eventargs.Message.Id))
{
await (await channel.GetMessageAsync((ulong)db.StarDatas.First(x => (ulong)x.MessageId == eventargs.Message.Id).StarboardMessageId)).DeleteAsync();
db.StarDatas.RemoveRange(db.StarDatas.Where(x => (ulong)x.MessageId == eventargs.Message.Id));
await db.SaveChangesAsync();
}
}
}
}

public static DiscordMessageBuilder buildMessage(DiscordMessage message, DiscordEmoji emoji, int count)
{
var embed = new DiscordEmbedBuilder()
.WithAuthor($"{message.Author.GetDisplayUsername()}",
iconUrl: (string.IsNullOrEmpty(message.Author.AvatarHash) ? message.Author.DefaultAvatarUrl : message.Author.AvatarUrl))
.WithDescription(message.Content.Truncate(800, "..."))
.WithFooter($"ID: {message.Id}")
.WithTimestamp(message.Id);

// This is shit code kek
if (message.Attachments.Any(x => x.Url.ToLower().EndsWith(".jpg") || x.Url.ToLower().EndsWith(".png")
|| x.Url.ToLower().EndsWith(".jpeg") || x.Url.ToLower().EndsWith(".gif")))
embed.WithImageUrl(message.Attachments.First(x => x.Url.ToLower().EndsWith(".jpg") || x.Url.ToLower().EndsWith(".png")
|| x.Url.ToLower().EndsWith(".jpeg") || x.Url.ToLower().EndsWith(".gif")).Url);

var emotename = emoji.GetDiscordName().Replace(":", "");
emotename = emotename.EndsWith('s') ? emotename : count > 1 ? emotename + "s" : emotename;

if(message.ReferencedMessage != null)
{
var refContent = message.ReferencedMessage.Content.Truncate(200, "...").Replace(")[", "​)[") + " ";

embed.Description += $"\n\n**➥** {message.ReferencedMessage.Author.Mention}: {refContent} {(message.ReferencedMessage.Attachments.Count() > 0 ? $"_<{message.ReferencedMessage.Attachments.Count()} file(s)>_" : "")}";
}

var messageBuilder = new DiscordMessageBuilder()
.AddEmbed(embed)
.WithContent($"{emoji} {count} {emotename} in {message.Channel.Mention}");

messageBuilder.AddComponents(new DiscordLinkButtonComponent(message.JumpLink.ToString(), "Go to message"));

return messageBuilder;
}
}
}
2 changes: 1 addition & 1 deletion ModCore/Listeners/StarboardListeners.cs
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ public class StarboardListeners
}

private static readonly string[] validFileExts = { ".jpg", ".gif", ".png", ".jpeg", ".webp" };
private static DiscordMessageBuilder buildStarboardMessage(DiscordMessage sourceMessage, long count, DiscordEmoji emoji)
public static DiscordMessageBuilder buildStarboardMessage(DiscordMessage sourceMessage, long count, DiscordEmoji emoji)
{
// TODO cleanup
var embed = new DiscordEmbedBuilder()
Expand Down

0 comments on commit d2a5175

Please sign in to comment.