Пример #1
0
        public static async Task DeletedMessageEvent(Cacheable <IMessage, ulong> msg, ISocketMessageChannel channel)
        {
            try
            {
                var logChannel = DiscordContextOverseer.GetDeletedMessageLog();
                var message    = await msg.GetOrDownloadAsync();

                if (message != null)
                {
                    var embed = new EmbedBuilder();
                    List <CachedFile> filesData = null;
                    bool hasImages = false;

                    //if at least one image (embedded or attached) was in the deleted message, look for it in the cache
                    bool imageExists = CheckForImageWithinEmbeds(message);
                    bool hasURLs     = CheckForURLs(message);
                    if ((message.Embeds.Count > 0 && imageExists) || (message.Attachments.Count > 0 && hasURLs))
                    {
                        hasImages = true;
                        filesData = ImageCacheManager.FindImagesInCache(message.Id);
                    }
                    if (hasImages)
                    {
                        if (filesData != null)
                        {
                            embed.WithTitle($"🗑 {message.Author.Username}#{message.Author.Discriminator} deleted message containing {filesData.Count} image{((filesData.Count > 1) ? "s" : "") } in {message.Channel.Name}. UserID = {message.Author.Id}");
                        }
                        else
                        {
                            embed.WithTitle($"🗑 {message.Author.Username}#{message.Author.Discriminator} deleted message containing images that weren't cached in {message.Channel.Name}. UserID = {message.Author.Id}");
                        }
                    }
                    else //it's just a message
                    {
                        embed.WithTitle($"🗑 {message.Author.Username}#{message.Author.Discriminator} deleted message messageID {message.Id} in {message.Channel.Name}. UserID = {message.Author.Id}");
                    }

                    //check for other types of embeds
                    string extraMessageContent = SearchForOtherEmbedTypes(message);

                    embed.WithDescription(message.Content + extraMessageContent);
                    embed.WithColor(new Color(255, 0, 0));

                    await logChannel.SendMessageAsync("", false, embed.Build());

                    if (filesData != null)
                    {
                        foreach (var file in filesData)
                        {
                            using (var ms = new MemoryStream(file.File))
                            {
                                await logChannel.SendFileAsync(ms, file.FileName);
                            }
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                await ExceptionManager.LogExceptionAsync(ErrMessages.DeletedMessageException, ex);
            }
        }