public static async Task UpdateStarboard(StarboardMessage starboardMessage) { Starboard starboard = new Starboard { MsgID = starboardMessage.message.Id, ChannelID = starboardMessage.channel.Id, UserID = starboardMessage.author.Id }; SocketGuild guild = starboardMessage.channel.Guild; SocketTextChannel starboardChannel = guild.Channels.FirstOrDefault(x => x.Id == GetChnlId("starboard")) as SocketTextChannel; // If starboard message does not exist if (!starboardMessage.starboardExists() && starboardMessage.stars >= Config.StarboardMin) { SocketTextChannel channel = guild.Channels.First(x => x.Id == starboardMessage.channel.Id) as SocketTextChannel; string link = channel.GetMessageAsync(starboardMessage.message.Id).Result.GetJumpUrl(); EmbedBuilder embed = new EmbedBuilder(); embed.WithAuthor(starboardMessage.message.Author); embed.WithColor(Color.Gold); if (starboardMessage.message.Content != null && starboardMessage.message.Content != "") { embed.AddField("Content", starboardMessage.message.Content); } embed.AddField("Channel:", starboardMessage.channel.Mention); if (starboardMessage.message.Attachments.Count == 1) { embed.WithImageUrl(starboardMessage.message.Attachments.First().Url); } embed.WithDescription($"[Link to original message]({link})"); RestUserMessage msg = await starboardChannel.SendMessageAsync($"{starboardMessage.stars} :star2:", false, embed.Build()); starboardMessage.starboardid = msg.Id; await starboardMessage.Save(); } // If starboard message exists and needs editing else if (starboardMessage.starboardExists() && starboardMessage.stars >= Config.StarboardMin) { Starboard starboard1 = await StarboardFunctions.getStarboardByMsgID(starboardMessage.message.Id); IUserMessage msg = starboardChannel.GetMessageAsync(starboard1.SBMessageID).Result as IUserMessage; await msg.ModifyAsync(x => x.Content = $"{starboardMessage.stars} :star2:"); await starboardMessage.Save(); } // If starboard message needs removal else if (starboardMessage.starboardExists() && starboardMessage.stars < Config.StarboardMin) { Starboard starboard1 = await StarboardFunctions.getStarboardByMsgID(starboardMessage.message.Id); IUserMessage msg = starboardChannel.GetMessageAsync(starboard1.SBMessageID).Result as IUserMessage; await msg.DeleteAsync(); await starboardMessage.Save(); } }
public async Task SetStarboardChannelId(ulong guildId, ulong starboardChannelId) => await _soraTransactor.DoInTransactionAsync(async context => { // We have to create a guild if it doesnt exist, bcs the starboard is a weak entity. await GuildRepository.GetOrSetAndGetGuild(guildId, context).ConfigureAwait(false); // Then we try and get or create the starboard var starboard = await context.Starboards.FindAsync(guildId).ConfigureAwait(false); if (starboard == null) { // Create it starboard = new Starboard(guildId, starboardChannelId); // ReSharper disable once MethodHasAsyncOverload context.Starboards.Add(starboard); } else { starboard.StarboardChannelId = starboardChannelId; } await context.SaveChangesAsync(); }).ConfigureAwait(false);