Beispiel #1
0
        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);