Skip to content

Commit

Permalink
Add commands vacuum, whereis and run in background
Browse files Browse the repository at this point in the history
  • Loading branch information
sgkoishi committed Feb 12, 2024
1 parent 9d5aadd commit 017bb47
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 4 deletions.
3 changes: 2 additions & 1 deletion Core/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public class Config
DefinedConsts.Commands.Ping,
DefinedConsts.Commands.Echo,
DefinedConsts.Commands.Admin.ApplyDefaultPermission,
DefinedConsts.Commands.Admin.InspectTileFrame
DefinedConsts.Commands.Admin.InspectTileFrame,
DefinedConsts.Commands.Admin.RunBackground
});

/// <summary>
Expand Down
19 changes: 19 additions & 0 deletions Core/MiscCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -314,4 +314,23 @@ private void Command_GenerateFullConfig(CommandArgs args)
args.Player.SendErrorMessage($"Failed to save config: {ex.Message}");
}
}

[Command("Admin.RunBackground", "_qbg", Permission = "chireiden.omni.admin.runbackground")]
private void Command_RunBackground(CommandArgs args)
{
if (args.Parameters.Count == 0)
{
args.Player.SendErrorMessage("No command given.");
return;
}
if (args.Parameters[0] == "-t" && args.Parameters.Count > 1)
{
Task.Run(() => TShockAPI.Commands.HandleCommand(args.Player, args.Parameters[1]));
args.Player.SendSuccessMessage($"Background task ({args.Player.Name} @ {args.Parameters[1]}) started.");
return;
}

System.Threading.ThreadPool.QueueUserWorkItem(_ => TShockAPI.Commands.HandleCommand(args.Player, args.Parameters[0]));
args.Player.SendSuccessMessage($"Background task ({args.Player.Name} @ {args.Parameters[0]}) queued.");
}
}
3 changes: 2 additions & 1 deletion Core/Vanilla.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ private void PermissionSetup()
Permission.SetInterval,
Permission.ClearInterval,
Permission.ShowTimeout,
Permission.ResetCharacter);
Permission.ResetCharacter,
Permission.Admin.RunBackground);

Utils.AliasPermission(TShockAPI.Permissions.maintenance,
Permission.Admin.MaxPlayers,
Expand Down
69 changes: 68 additions & 1 deletion Misc/Commands.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Terraria.Localization;
using System.Reflection;
using Terraria.Localization;
using TerrariaApi.Server;
using TShockAPI;

Expand All @@ -21,6 +22,21 @@ private void Command_GC(CommandArgs args)
args.Player.SendSuccessMessage("GC Triggered.");
}

[Command("Admin.SqliteVacuum", "_sv", Permission = "chireiden.omni.admin.sv")]
private void Command_SqliteVacuum(CommandArgs args)
{
var db = TShockAPI.TShock.DB;
if (TShockAPI.DB.DbExt.GetSqlType(db) == TShockAPI.DB.SqlType.Sqlite)
{
TShockAPI.DB.DbExt.Query(db, "VACUUM");
args.Player.SendSuccessMessage("SQLite Vacuum on TShock.DB triggered.");
}
else
{
args.Player.SendErrorMessage("TShock.DB is not SQLite.");
}
}

[Command("Admin.RawBroadcast", "rbc", "rawbroadcast", Permission = "chireiden.omni.admin.rawbroadcast")]
private void Command_RawBroadcast(CommandArgs args)
{
Expand Down Expand Up @@ -69,6 +85,57 @@ private void Command_DumpBuffer(CommandArgs args)
File.WriteAllBytes(path, Terraria.NetMessage.buffer[index].readBuffer[..Terraria.NetMessage.buffer[index].totalData]);
}

[Command("Admin.FindCommand", "whereis", Permission = "chireiden.omni.admin.whereis")]
private void Command_WhereIs(CommandArgs args)
{
if (args.Parameters.Count == 0)
{
args.Player.SendErrorMessage("Invalid command.");
return;
}

var c = TShockAPI.Commands.ChatCommands.Where(command => command.HasAlias(args.Parameters[0])).ToList();

args.Player.SendInfoMessage($"ChatCommands Found: {c.Count}");

var dict = ((Dictionary<string, Assembly>?) typeof(ServerApi).GetField("loadedAssemblies", _bfany)?.GetValue(null))?
.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);

foreach (var command in c)
{
var aliases = string.Join(", ", command.Names.Skip(1).Select(x => TShockAPI.Commands.Specifier + x));
args.Player.SendSuccessMessage($"{TShockAPI.Commands.Specifier}{command.Name} ({aliases}) :");
var method = command.CommandDelegate.Method;
var sig = $"{method.DeclaringType?.FullName}.{method.Name}";
args.Player.SendInfoMessage($" Signature: {sig}");
var asm = method.DeclaringType?.Assembly;
if (asm is null)
{
args.Player.SendInfoMessage($" No Assembly found");
continue;
}
if (!string.IsNullOrWhiteSpace(asm.Location))
{
args.Player.SendInfoMessage($" Location: ({asm.Location})");
}
if (dict?.TryGetValue(asm, out var fileNameWithoutExtension) == true)
{
args.Player.SendInfoMessage($" File: {fileNameWithoutExtension}");
}
var plugins = ServerApi.Plugins.Where(p => p.Plugin.GetType().Assembly == asm).ToList();
if (plugins.Count == 0)
{
args.Player.SendInfoMessage($" No Plugin found");
continue;
}
foreach (var plugin in plugins)
{
var p = plugin.Plugin;
args.Player.SendInfoMessage($" Plugin: {p.Name} v{p.Version} by {p.Author}");
}
}
}

[Command("Admin.TerminateSocket", "kc", Permission = "chireiden.omni.admin.terminatesocket")]
private void Command_TerminateSocket(CommandArgs args)
{
Expand Down
5 changes: 4 additions & 1 deletion Misc/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public override void Initialize()
DefinedConsts.Commands.Chat,
DefinedConsts.Commands.Admin.GarbageCollect,
DefinedConsts.Commands.Admin.UpsCheck,
DefinedConsts.Commands.Admin.SqliteVacuum,
}));
plugin.config.Mode.Value.Vanilla.Value.Permissions.Mutate(list => list.AddRange(new List<string>
{
Expand Down Expand Up @@ -91,7 +92,9 @@ public override void Initialize()
DefinedConsts.Permission.Admin.GarbageCollect,
DefinedConsts.Permission.Admin.RawBroadcast,
DefinedConsts.Permission.Admin.TerminateSocket,
DefinedConsts.Permission.Admin.GenerateFullConfig);
DefinedConsts.Permission.Admin.GenerateFullConfig,
DefinedConsts.Permission.Admin.SqliteVacuum,
DefinedConsts.Permission.Admin.FindCommand);

Utils.AliasPermission(TShockAPI.Permissions.su,
DefinedConsts.Permission.Admin.ListClients,
Expand Down

0 comments on commit 017bb47

Please sign in to comment.