The quick answer is that the Meta Toolbox can preempt the script handle in a number of different ways, which is exactly what you might need in order to sidestep CSA. APILogic does seem to be the best fit to what you're looking to do. Here's an example also using the ZeroFrame syntax of {&simple} to output to chat: !{&if a = b}True part for IF test{&elseif a = c}True part for ELSEIF test{&else}Default part{&end}{&simple} Install APIL and ZF, then paste that into chat. Since the text 'a' does not match the text 'b', the first test will fail. Since 'a' does not match the text 'c', the ELSEIF test will fail. That leaves us with the ELSE case, and you should see in your chat the message 'Default part'. Change the tests to get true outputs: {&if a = a} will give you the text conditional to the IF block {&elseif c = c} will give you the text conditional to the ELSEIF block if the IF has failed Change the location of the {&simple} tag to get NO output: !{&if a = a}This passed!{&else}It did not pass{&simple}{&end} Because 'a' is the same as 'a', the IF block passes and the text dependent on the ELSE block gets dropped, including the {&simple}. That means that what continues to the rest of the ModDeck is: !This passed! ...and you probably don't have a script intended to catch a handle like that. So, with all of that as a primer, imagine your test for having enough spell points would be in the IF block conditional. If the character has enough spell points... then do the CSA command. On the other hand, if the test fails, all of the CSA verbiage is dropped and CSA never takes action. You could, if you have ZeroFrame installed, output a message alerting you that the character lacks the resources to do what they are attempting. Or, if you have something like DiscreteWhisper, you could use it to send a message. In either case, the conditional text for the ELSE case will only stay in the message if the IF test fails. In other words, only if the character lacks the resources will the part of the command line that responds to lacking resources remain in the message. Also, to preempt Roll20 recognizing that part of the message might start out as a templated message, we'll use the ZeroFrame construction of {&template:npcaction} instead of the Roll20 version of &{template:npcaction}. All that together gives you this: !{&if @{Scarabée|class_resource} > 0}{&template:npcaction} {{rname=Utilisation de Ki}} !modbattr --name Scarabée--silent --evaluate --class_resource|-1!!! {{description=Scarabée utilise 1 point de Ki}}{&else}The resource was already at 0{&end}{&simple} ...which will output a line if the class_resource was already at 0. You could, of course, remove any output from that section by deleting the conditional text, but I find that leads to people repeatedly clicking a command because they have no feedback to tell them, "Yes, I understand, but the answer is still 'no'." TL;DR Solution So, maybe a hybrid macro, taking the best parts of this, would be to conditionally change the contents of the template message based on the results of the resource check? !&{template:npcaction} {{rname=Utilisation de Ki}} {&if ([ResourceCheck]@{Scarabée|class_resource} > 0)}!modbattr --name Scarabée --silent --evaluate --class_resource|-1!!!{&end} {{description={&if ResourceCheck}Scarabée utilise 1 point de Ki{&else}Scarabée essayé d'utiliser ki, mais n'a pas de ki à dépenser{&end}}}{&simple} Note we're back to using the Roll20 template syntax, since either way we're going to output the template (just with different content). Note, the EDIT : also notice that we're naming our conditional check to be ResourceCheck because we have to use it in different parts of the command line. This just makes it so the condition doesn't need to be evaluated twice. First we define the ResourceCheck conditional to be the check of the class resource against 0, then later we can just check that result directly like this: {&if ResourceCheck} REQUIRED SCRIPTS: APILogic, ZeroFrame, ChatSetAttr