Finish migration to MongoDb and general improvements
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using CatsOfMastodonBot.Models;
|
||||
using JsonFlatFileDataStore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using mstdnCats.Models;
|
||||
@@ -7,55 +6,53 @@ using Telegram.Bot;
|
||||
using Telegram.Bot.Types.Enums;
|
||||
using Telegram.Bot.Types.ReplyMarkups;
|
||||
|
||||
namespace mstdnCats.Services
|
||||
namespace mstdnCats.Services;
|
||||
|
||||
public class ProcessPosts
|
||||
{
|
||||
public class ProcessPosts
|
||||
public static async Task<List<MediaAttachment>> checkAndInsertPostsAsync(IMongoCollection<Post> _db,
|
||||
TelegramBotClient _bot, List<Post> fetchedPosts, ILogger<MastodonBot>? logger)
|
||||
{
|
||||
public static async Task<List<MediaAttachment>> checkAndInsertPostsAsync(IMongoCollection<Post> _db, TelegramBotClient _bot, List<Post> fetchedPosts, ILogger<MastodonBot>? logger)
|
||||
{
|
||||
var config = ConfigData.fetchData();
|
||||
var config = ConfigData.fetchData();
|
||||
|
||||
// Get existing posts
|
||||
var existingPosts = _db.AsQueryable().Select(x => x.mstdnPostId).ToArray();
|
||||
logger?.LogInformation($"Recieved posts to proccess: {fetchedPosts.Count} - total existing posts: {existingPosts.Length}");
|
||||
int newPosts = 0;
|
||||
// Process posts
|
||||
foreach (Post post in fetchedPosts)
|
||||
// Get existing posts
|
||||
var existingPosts = _db.AsQueryable().Select(x => x.mstdnPostId).ToArray();
|
||||
logger?.LogInformation(
|
||||
$"Recieved posts to proccess: {fetchedPosts.Count} - total existing posts: {existingPosts.Length}");
|
||||
var newPosts = 0;
|
||||
// Process posts
|
||||
List<Post> validPosts = new();
|
||||
foreach (var post in fetchedPosts)
|
||||
// Check if post already exists
|
||||
if (!existingPosts.Contains(post.mstdnPostId) && post.MediaAttachments.Count > 0 &&
|
||||
post.Account.IsBot == false)
|
||||
{
|
||||
// Check if post already exists
|
||||
if (!existingPosts.Contains(post.mstdnPostId) && post.MediaAttachments.Count > 0 && post.Account.IsBot == false)
|
||||
{
|
||||
|
||||
|
||||
// Send approve or reject message to admin
|
||||
foreach (var media in post.MediaAttachments)
|
||||
{
|
||||
if (media.Type == "image")
|
||||
// Send approve or reject message to admin
|
||||
foreach (var media in post.MediaAttachments)
|
||||
if (media.Type == "image")
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
await _bot.SendPhoto(config.ADMIN_NUMID, media.PreviewUrl, caption: $"<a href=\"" + post.Url + "\"> Mastodon </a>", parseMode: ParseMode.Html
|
||||
, replyMarkup: new InlineKeyboardMarkup().AddButton("Approve", $"approve-{media.MediaId}").AddButton("Reject", $"reject-{media.MediaId}"));
|
||||
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
logger?.LogError("Error while sending message to admin: " + ex.Message + " - Media URL: " + media.PreviewUrl);
|
||||
}
|
||||
await _bot.SendPhoto(config.ADMIN_NUMID, media.PreviewUrl,
|
||||
$"<a href=\"" + post.Url + "\"> Mastodon </a>", ParseMode.Html
|
||||
, replyMarkup: new InlineKeyboardMarkup().AddButton("Approve", $"approve-{media.MediaId}").AddButton("Reject", $"reject-{media.MediaId}"));
|
||||
validPosts.Add(post);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger?.LogError("Error while sending message to admin: " + ex.Message + " - Media URL: " +
|
||||
media.PreviewUrl);
|
||||
}
|
||||
}
|
||||
// Insert post
|
||||
await _db.InsertOneAsync(post);
|
||||
newPosts++;
|
||||
|
||||
}
|
||||
newPosts++;
|
||||
}
|
||||
|
||||
logger?.LogInformation($"Proccesing done, stats: received {fetchedPosts.Count} posts, inserted and sent {newPosts} new posts.");
|
||||
// Insert post
|
||||
await _db.InsertManyAsync(validPosts);
|
||||
logger?.LogInformation(
|
||||
$"Proccesing done, stats: received {fetchedPosts.Count} posts, inserted and sent {newPosts} new posts.");
|
||||
|
||||
// Return list of media attachments
|
||||
var alldbpostsattachmentlist = _db.AsQueryable().SelectMany(x => x.MediaAttachments).ToList();
|
||||
return alldbpostsattachmentlist;
|
||||
}
|
||||
// Return list of media attachments
|
||||
var alldbpostsattachmentlist = _db.AsQueryable().SelectMany(x => x.MediaAttachments).ToList();
|
||||
return alldbpostsattachmentlist;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user