SecondBot/Core/Commands/Parcel/ParcelBan.cs
2021-02-09 22:53:45 +00:00

91 lines
3.2 KiB
C#

using OpenMetaverse;
using static OpenMetaverse.ParcelManager;
namespace BSB.Commands.CMD_Parcel
{
public class ParcelBan : CoreCommand_1arg
{
public override string[] ArgTypes { get { return new[] { "Avatar", "True|False" }; } }
public override string[] ArgHints { get { return new[] { "Avatar [UUID or Firstname Lastname]", "Type" }; } }
public override string Helpfile { get { return "Bans an avatar [ARG 1] from a parcel<br/>by setting Type to False you can unban"; } }
protected bool ban_target(OpenMetaverse.Parcel p, UUID target)
{
bool alreadyBanned = false;
foreach (ParcelAccessEntry E in p.AccessBlackList)
{
if (E.AgentID == target)
{
alreadyBanned = true;
break;
}
}
if (alreadyBanned == true)
{
return Failed("Target is in the blacklist");
}
ParcelAccessEntry entry = new ParcelAccessEntry();
entry.AgentID = target;
entry.Flags = AccessList.Ban;
entry.Time = new System.DateTime(3030, 03, 03);
p.AccessBlackList.Add(entry);
p.Update(bot.GetClient.Network.CurrentSim, false);
return true;
}
protected bool unban_target(OpenMetaverse.Parcel p, UUID target)
{
bool alreadyBanned = false;
ParcelAccessEntry removeme = new ParcelAccessEntry();
foreach (ParcelAccessEntry E in p.AccessBlackList)
{
if (E.AgentID == target)
{
alreadyBanned = true;
removeme = E;
break;
}
}
if (alreadyBanned == false)
{
return Failed("Target is NOT in the blacklist");
}
p.AccessBlackList.Remove(removeme);
p.Update(bot.GetClient.Network.CurrentSim, false);
return true;
}
public override bool CallFunction(string[] args)
{
if (base.CallFunction(args) == false)
{
return false;
}
if (UUID.TryParse(args[0], out UUID target) == false)
{
return Failed("Arg 0 requires UUID");
}
bool banuser = true;
if (args.Length == 2)
{
if (args[1] == "False")
{
banuser = false;
}
}
int localid = bot.GetClient.Parcels.GetParcelLocalID(bot.GetClient.Network.CurrentSim, bot.GetClient.Self.SimPosition);
if (bot.GetClient.Network.CurrentSim.Parcels.ContainsKey(localid) == false)
{
return Failed("Unable to get parcel details");
}
OpenMetaverse.Parcel p = bot.GetClient.Network.CurrentSim.Parcels[localid];
if (banuser == true)
{
return ban_target(p, target);
}
return unban_target(p, target);
}
}
}