64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
using BirdsiteLive.DAL.Contracts;
|
|
using BirdsiteLive.Domain.Repository;
|
|
using BirdsiteLive.Moderation.Actions;
|
|
|
|
namespace BirdsiteLive.Moderation.Processors
|
|
{
|
|
public interface IFollowerModerationProcessor
|
|
{
|
|
Task ProcessAsync(ModerationTypeEnum type);
|
|
}
|
|
|
|
public class FollowerModerationProcessor : IFollowerModerationProcessor
|
|
{
|
|
private readonly IFollowersDal _followersDal;
|
|
private readonly IModerationRepository _moderationRepository;
|
|
private readonly IRemoveFollowerAction _removeFollowerAction;
|
|
|
|
#region Ctor
|
|
public FollowerModerationProcessor(
|
|
IFollowersDal followersDal,
|
|
IModerationRepository moderationRepository,
|
|
IRemoveFollowerAction removeFollowerAction
|
|
)
|
|
{
|
|
_followersDal = followersDal;
|
|
_moderationRepository = moderationRepository;
|
|
_removeFollowerAction = removeFollowerAction;
|
|
}
|
|
#endregion
|
|
|
|
public async Task ProcessAsync(ModerationTypeEnum type)
|
|
{
|
|
if (type == ModerationTypeEnum.None)
|
|
return;
|
|
|
|
var followers = await _followersDal.GetAllFollowersAsync();
|
|
|
|
foreach (var follower in followers)
|
|
{
|
|
var followerHandle =
|
|
$"@{follower.Acct.Trim()}@{follower.Host.Trim()}".ToLowerInvariant();
|
|
var status = _moderationRepository.CheckStatus(
|
|
ModerationEntityTypeEnum.Follower,
|
|
followerHandle
|
|
);
|
|
|
|
if (
|
|
type == ModerationTypeEnum.WhiteListing
|
|
&& status != ModeratedTypeEnum.WhiteListed
|
|
|| type == ModerationTypeEnum.BlackListing
|
|
&& status == ModeratedTypeEnum.BlackListed
|
|
)
|
|
{
|
|
Console.WriteLine($"Remove {followerHandle}");
|
|
await _removeFollowerAction.ProcessAsync(follower);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|