Add artificial blocking to jimmy because funny
All checks were successful
Build and Publish Jimmy.2 / build_and_publish (push) Successful in 6s
All checks were successful
Build and Publish Jimmy.2 / build_and_publish (push) Successful in 6s
This commit is contained in:
parent
5ab832d51f
commit
a64bd4fa12
2 changed files with 36 additions and 1 deletions
|
@ -4,7 +4,11 @@
|
||||||
token = "token" # the bot token
|
token = "token" # the bot token
|
||||||
debug_guilds = [994710566612500550] # server IDs to create slash commands in. Omit for all guilds.
|
debug_guilds = [994710566612500550] # server IDs to create slash commands in. Omit for all guilds.
|
||||||
disabled_commands = ["i do not exist"] # A list of full command names to disable (e.g. "<group name> <subcommand", "command_name").
|
disabled_commands = ["i do not exist"] # A list of full command names to disable (e.g. "<group name> <subcommand", "command_name").
|
||||||
|
disable_mode = "disable" # Can be "disable" or "remove". "remove" removes the command entirely until the next reboot.
|
||||||
modules = ["cogs.*"] # a list of modules to load. Glob-based patterns can be used. Defaults to all cogs if ommitted
|
modules = ["cogs.*"] # a list of modules to load. Glob-based patterns can be used. Defaults to all cogs if ommitted
|
||||||
|
delay = { 421698654189912064 = [0.1, 2.5] } # Adds an artificial delay before running commands. Useful for a soft-ban.
|
||||||
|
# Values must range from 0.01 (minimum) and 2.8 (maximum).
|
||||||
|
|
||||||
|
|
||||||
[logging]
|
[logging]
|
||||||
level = "DEBUG" # can be one of DEBUG, INFO, WARNING, ERROR, CRITICAL. Defaults to INFO
|
level = "DEBUG" # can be one of DEBUG, INFO, WARNING, ERROR, CRITICAL. Defaults to INFO
|
||||||
|
|
33
src/main.py
33
src/main.py
|
@ -124,6 +124,8 @@ for module in CONFIG["jimmy"].get("modules", ["cogs/*.py"]):
|
||||||
except (discord.ExtensionNotFound, ModuleNotFoundError):
|
except (discord.ExtensionNotFound, ModuleNotFoundError):
|
||||||
log.debug("%r does not exist - trying as glob pattern", module)
|
log.debug("%r does not exist - trying as glob pattern", module)
|
||||||
for ext in glob.glob(module, recursive=True):
|
for ext in glob.glob(module, recursive=True):
|
||||||
|
if ext.endswith(("__init__.py", ".pyc")):
|
||||||
|
continue
|
||||||
ext = ext.replace("/", ".")[:-3] # foo/bar.py -> foo.bar
|
ext = ext.replace("/", ".")[:-3] # foo/bar.py -> foo.bar
|
||||||
if ext.split(".")[-1].startswith("__"):
|
if ext.split(".")[-1].startswith("__"):
|
||||||
log.info("Skipping loading %s - starts with double underscore." % ext)
|
log.info("Skipping loading %s - starts with double underscore." % ext)
|
||||||
|
@ -194,7 +196,25 @@ async def delete_message(ctx: discord.ApplicationContext, message: discord.Messa
|
||||||
async def check_is_enabled(ctx: commands.Context | discord.ApplicationContext) -> bool:
|
async def check_is_enabled(ctx: commands.Context | discord.ApplicationContext) -> bool:
|
||||||
disabled = CONFIG["jimmy"].get("disabled_commands", [])
|
disabled = CONFIG["jimmy"].get("disabled_commands", [])
|
||||||
if ctx.command.qualified_name in disabled:
|
if ctx.command.qualified_name in disabled:
|
||||||
raise commands.DisabledCommand("%s is disabled via this instance's configuration file.")
|
raise commands.DisabledCommand(
|
||||||
|
"%s is disabled via this instance's configuration file." % (
|
||||||
|
ctx.command.qualified_name
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@bot.before_invoke
|
||||||
|
async def add_delays(ctx: commands.Context | discord.ApplicationContext) -> bool:
|
||||||
|
blocked = CONFIG["jimmy"].get("delay", {})
|
||||||
|
if str(ctx.author.id) in blocked:
|
||||||
|
range_start, range_end = blocked[str(ctx.author.id)]
|
||||||
|
range_start = max(0.01, range_start)
|
||||||
|
range_end = min(2.89, range_end)
|
||||||
|
n = random.randint(round(range_start * 100), round(range_end * 100)) / 100
|
||||||
|
log.warning("Delaying user %s by %.2f seconds.", ctx.author, n)
|
||||||
|
await asyncio.sleep(n)
|
||||||
|
log.info("Artificial delay for %s lifted", ctx.author)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,4 +222,15 @@ if not CONFIG["jimmy"].get("token"):
|
||||||
log.critical("No token specified in config.toml. Exiting. (hint: set jimmy.token in config.toml)")
|
log.critical("No token specified in config.toml. Exiting. (hint: set jimmy.token in config.toml)")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
__disabled = CONFIG["jimmy"].get("disabled_commands", [])
|
||||||
|
__disabled_mode = CONFIG["jimmy"].get("disabled_mode", "disabled").lower()
|
||||||
|
if __disabled:
|
||||||
|
if __disabled_mode == "delete":
|
||||||
|
for __command__name in __disabled:
|
||||||
|
_cmd = bot.get_application_command(__command__name)
|
||||||
|
if not _cmd:
|
||||||
|
log.warning("Unknown command %r - cannot remove.", __command__name)
|
||||||
|
else:
|
||||||
|
bot.remove_application_command(_cmd)
|
||||||
|
|
||||||
bot.run(CONFIG["jimmy"]["token"])
|
bot.run(CONFIG["jimmy"]["token"])
|
||||||
|
|
Loading…
Reference in a new issue