Added .dmmod and .dmcmd to disable modules and commands in bot DMs

This commit is contained in:
Toastie 2024-12-08 15:45:08 +13:00
parent 4a723b7c1c
commit dc9ec2dafe
Signed by: toastie_t0ast
GPG key ID: 27F3B6855AFD40A4
7 changed files with 103 additions and 10 deletions

View file

@ -73,5 +73,38 @@ public partial class Permissions
await Response().Confirm(strs.gcmd_remove(Format.Bold(cmd.Name))).SendAsync(); await Response().Confirm(strs.gcmd_remove(Format.Bold(cmd.Name))).SendAsync();
} }
[Cmd]
[OwnerOnly]
public async Task DmModule(ModuleOrExpr module)
{
var moduleName = module.Name.ToLowerInvariant();
var added = _service.ToggleModule(moduleName, true);
if (added)
{
await Response().Confirm(strs.dmmod_add(Format.Bold(module.Name))).SendAsync();
return;
}
await Response().Confirm(strs.dmmod_remove(Format.Bold(module.Name))).SendAsync();
}
[Cmd]
[OwnerOnly]
public async Task DmCommand(CommandOrExprInfo cmd)
{
var commandName = cmd.Name.ToLowerInvariant();
var added = _service.ToggleCommand(commandName, true);
if (added)
{
await Response().Confirm(strs.dmcmd_add(Format.Bold(cmd.Name))).SendAsync();
return;
}
await Response().Confirm(strs.dmcmd_remove(Format.Bold(cmd.Name))).SendAsync();
}
} }
} }

View file

@ -24,11 +24,20 @@ public class GlobalPermissionService : IExecPreCommand, IEService
var settings = _bss.Data; var settings = _bss.Data;
var commandName = command.Name.ToLowerInvariant(); var commandName = command.Name.ToLowerInvariant();
if (commandName != "resetglobalperms" if (commandName != "resetglobalperms")
&& (settings.Blocked.Commands.Contains(commandName) {
|| settings.Blocked.Modules.Contains(moduleName.ToLowerInvariant()))) if (settings.Blocked.Commands.Contains(commandName)
|| settings.Blocked.Modules.Contains(moduleName.ToLowerInvariant()))
return Task.FromResult(true); return Task.FromResult(true);
if (ctx.Guild is null)
{
if (settings.DmBlocked.Commands.Contains(commandName)
|| settings.DmBlocked.Modules.Contains(moduleName.ToLowerInvariant()))
return Task.FromResult(true);
}
}
return Task.FromResult(false); return Task.FromResult(false);
} }
@ -37,13 +46,30 @@ public class GlobalPermissionService : IExecPreCommand, IEService
/// </summary> /// </summary>
/// <param name="moduleName">Lowercase module name</param> /// <param name="moduleName">Lowercase module name</param>
/// <returns>Whether the module is added</returns> /// <returns>Whether the module is added</returns>
public bool ToggleModule(string moduleName) public bool ToggleModule(string moduleName, bool priv = false)
{ {
var added = false; var added = false;
_bss.ModifyConfig(bs => _bss.ModifyConfig(bs =>
{ {
if (bs.Blocked.Modules.Add(moduleName)) if (priv)
{
if (bs.DmBlocked.Modules.Add(moduleName))
{
added = true; added = true;
}
else
{
bs.DmBlocked.Modules.Remove(moduleName);
added = false;
}
return;
}
if (bs.Blocked.Modules.Add(moduleName))
{
added = true;
}
else else
{ {
bs.Blocked.Modules.Remove(moduleName); bs.Blocked.Modules.Remove(moduleName);
@ -59,13 +85,30 @@ public class GlobalPermissionService : IExecPreCommand, IEService
/// </summary> /// </summary>
/// <param name="commandName">Lowercase command name</param> /// <param name="commandName">Lowercase command name</param>
/// <returns>Whether the command is added</returns> /// <returns>Whether the command is added</returns>
public bool ToggleCommand(string commandName) public bool ToggleCommand(string commandName, bool priv = false)
{ {
var added = false; var added = false;
_bss.ModifyConfig(bs => _bss.ModifyConfig(bs =>
{
if (priv)
{ {
if (bs.Blocked.Commands.Add(commandName)) if (bs.Blocked.Commands.Add(commandName))
{
added = true; added = true;
}
else
{
bs.Blocked.Commands.Remove(commandName);
added = false;
}
return;
}
if (bs.Blocked.Commands.Add(commandName))
{
added = true;
}
else else
{ {
bs.Blocked.Commands.Remove(commandName); bs.Blocked.Commands.Remove(commandName);

View file

@ -12,7 +12,7 @@ namespace EllieBot.Common.Configs;
public sealed partial class BotConfig : ICloneable<BotConfig> public sealed partial class BotConfig : ICloneable<BotConfig>
{ {
[Comment("""DO NOT CHANGE""")] [Comment("""DO NOT CHANGE""")]
public int Version { get; set; } = 8; public int Version { get; set; } = 9;
[Comment(""" [Comment("""
Most commands, when executed, have a small colored line Most commands, when executed, have a small colored line
@ -81,6 +81,9 @@ public sealed partial class BotConfig : ICloneable<BotConfig>
[Comment("""List of modules and commands completely blocked on the bot""")] [Comment("""List of modules and commands completely blocked on the bot""")]
public BlockedConfig Blocked { get; set; } public BlockedConfig Blocked { get; set; }
[Comment("""List of modules and commands blocked from usage in DMs on the bot""")]
public BlockedConfig DmBlocked { get; set; } = new();
[Comment("""Which string will be used to recognize the commands""")] [Comment("""Which string will be used to recognize the commands""")]
public string Prefix { get; set; } public string Prefix { get; set; }

View file

@ -70,10 +70,10 @@ public sealed class BotConfigService : ConfigServiceBase<BotConfig>
c.IgnoreOtherBots = true; c.IgnoreOtherBots = true;
}); });
if(data.Version < 8) if(data.Version < 9)
ModifyConfig(c => ModifyConfig(c =>
{ {
c.Version = 8; c.Version = 9;
}); });
} }
} }

View file

@ -1039,6 +1039,12 @@ gamevoicechannel:
- gvc - gvc
shoplistadd: shoplistadd:
- shoplistadd - shoplistadd
dmcommand:
- dmcommand
- dmcmd
dmmodule:
- dmmodule
- dmmod
globalcommand: globalcommand:
- globalcommand - globalcommand
- gcmd - gcmd

View file

@ -1,5 +1,5 @@
# DO NOT CHANGE # DO NOT CHANGE
version: 8 version: 9
# Most commands, when executed, have a small colored line # Most commands, when executed, have a small colored line
# next to the response. The color depends whether the command # next to the response. The color depends whether the command
# is completed, errored or in progress (pending) # is completed, errored or in progress (pending)
@ -78,6 +78,10 @@ helpText: |-
blocked: blocked:
commands: [] commands: []
modules: [] modules: []
# List of modules and commands blocked from usage in DMs on the bot
dmBlocked:
commands: []
modules: []
# Which string will be used to recognize the commands # Which string will be used to recognize the commands
prefix: . prefix: .
# Whether the bot will rotate through all specified statuses. # Whether the bot will rotate through all specified statuses.

View file

@ -758,6 +758,10 @@
"gcmd_remove": "Command {0} has been enabled on all servers.", "gcmd_remove": "Command {0} has been enabled on all servers.",
"gmod_add": "Module {0} has been disabled on all servers.", "gmod_add": "Module {0} has been disabled on all servers.",
"gmod_remove": "Module {0} has been enabled on all servers.", "gmod_remove": "Module {0} has been enabled on all servers.",
"dmmod_add": "Module {0} has been disabled in bot DMs.",
"dmmod_remove": "Module {0} has been enabled in bot DMs.",
"dmcmd_add": "Command {0} has been disabled in bot DMs.",
"dmcmd_remove": "Command {0} has been enabled in bot DMs.",
"lgp_none": "No blocked commands or modules.", "lgp_none": "No blocked commands or modules.",
"cant_read_or_send": "You can't read from or send messages to that channel.", "cant_read_or_send": "You can't read from or send messages to that channel.",
"quotes_notfound": "No quotes found matching the quote ID specified.", "quotes_notfound": "No quotes found matching the quote ID specified.",