Source code for bTagScript.block.discord_blocks.command_block

from typing import Optional

from ...interface import verb_required_block
from ...interpreter import Context


[docs]class CommandBlock(verb_required_block(True, payload=True)): """ Run a command as if the tag invoker had ran it. Only 3 command blocks can be used in a tag. **Usage:** ``{command:<command>}`` **Aliases:** ``c, com, command`` **Payload:** command **Parameter:** None **Examples:** .. tagscript:: {c:ping} # Invokes ping command {c:ban {target(id)} Chatflood/spam} # Invokes ban command on the pinged user with the reason as "Chatflood/spam" """ ACCEPTED_NAMES = ("c", "com", "command") def __init__(self, limit: int = 3) -> None: """ Construct with limits """ self.limit = limit super().__init__()
[docs] def process(self, ctx: Context) -> Optional[str]: """ Process the block and update response.actions """ command = ctx.verb.payload.strip() actions = ctx.response.actions.get("commands") if actions: if len(actions) >= self.limit: return f"`COMMAND LIMIT REACHED ({self.limit})`" else: ctx.response.actions["commands"] = [] ctx.response.actions["commands"].append(command) return ""