forked from SoDOff-Project/sodoff
Basic Moderation System #1
@ -2,6 +2,7 @@ namespace sodoff.Schema;
|
||||
|
||||
public enum UserBanType
|
||||
{
|
||||
NotBanned = 0,
|
||||
IndefiniteOpenChatBan = 1,
|
||||
TemporaryOpenChatBan = 2,
|
||||
IndefiniteAccountBan = 3,
|
||||
|
84
src/Services/ModerationService.cs
Normal file
84
src/Services/ModerationService.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using sodoff.Model;
|
||||
using sodoff.Schema;
|
||||
|
||||
namespace sodoff.Services;
|
||||
|
||||
public class ModerationService
|
||||
{
|
||||
public readonly DBContext ctx;
|
||||
|
||||
public ModerationService(DBContext ctx)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
public UserBan AddBanToViking(Viking viking, UserBanType userBanType, DateTime expirationDate = new DateTime())
|
||||
{
|
||||
// get UTC time stamp of function execution
|
||||
DateTime timestamp = DateTime.UtcNow;
|
||||
|
||||
// construct user ban
|
||||
UserBan userBan = new UserBan
|
||||
{
|
||||
UserBanType = userBanType,
|
||||
ExpiresOn = expirationDate,
|
||||
CreatedAt = timestamp
|
||||
};
|
||||
|
||||
// add to viking userban list
|
||||
viking.UserBans.Add(userBan);
|
||||
ctx.SaveChanges();
|
||||
|
||||
// return ban
|
||||
return userBan;
|
||||
}
|
||||
|
||||
public bool RemoveBanById(int id)
|
||||
{
|
||||
// find ban
|
||||
UserBan? ban = ctx.Bans.FirstOrDefault(e => e.Id == id);
|
||||
|
||||
// remove it
|
||||
if (ban != null) { ctx.Bans.Remove(ban); ctx.SaveChanges(); return true; }
|
||||
else return false;
|
||||
}
|
||||
|
||||
public bool RemoveBansFromVikingByType(Viking viking, UserBanType userBanType)
|
||||
{
|
||||
// get all bans of type
|
||||
List<UserBan> userBans = viking.UserBans.Where(e => e.UserBanType == userBanType).ToList();
|
||||
|
||||
if (userBans.Count == 0) return false;
|
||||
|
||||
// delete all
|
||||
foreach(var ban in userBans)
|
||||
viking.UserBans.Remove(ban);
|
||||
|
||||
ctx.SaveChanges();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public UserBanType IsVikingBanned(Viking viking)
|
||||
{
|
||||
// get UTC time stamp of function execution
|
||||
DateTime timestamp = DateTime.UtcNow;
|
||||
|
||||
// sort viking ban list by latest first
|
||||
List<UserBan> bans = viking.UserBans.OrderByDescending(e => e.CreatedAt).ToList();
|
||||
|
||||
if (bans.Count == 0) return UserBanType.NotBanned; // no bans in list means viking is not banned
|
||||
|
||||
if (bans.First().UserBanType == UserBanType.IndefiniteAccountBan) return UserBanType.IndefiniteAccountBan;
|
||||
else if (bans.First().UserBanType == UserBanType.IndefiniteOpenChatBan) return UserBanType.IndefiniteOpenChatBan;
|
||||
|
||||
if (DateTime.Compare(bans.First().ExpiresOn ?? new DateTime(9999, 99, 99), timestamp) > 0) return bans.First().UserBanType;
|
||||
else
|
||||
{
|
||||
// ban should be removed
|
||||
RemoveBanById(bans.First().Id);
|
||||
return UserBanType.NotBanned;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user