Along with Jarren's excellent suggestions, I'll also add that you can do something like this with the Metascript Toolbox script. The Toolbox is a set of metascripts that provide different functionalities... in this case you'd be making use of Fetch and ZeroFrame. Fetch offers a construction that gets the speaker: @(speaker....) Now, since characters have different name properties from players (and players could be speaking either as themselves or their character), the property is a little different in each case: @(speaker.character_name) @(speaker.player_name) I didn't get around to adding a "get the name of the speaker regardless of if it's a character or a player," however Fetch has a default entry that we can make use of. Basically, if the thing you are looking for doesn't exist, Fetch will return the default value. So, if we put the player name retrieval syntax inside the default area of the character name retrieval syntax, then no matter who we're speaking as, we should get the name: @(speaker.character_name[@(speaker.player_name)]) Then, we can make use of ZeroFrames ability to output to the chat any message that starts as a bangsy message (intended for your mods). ZeroFrame does that by use of the {&simple} tag appearing somewhere in the line. So, all of that together, we... start with a bang whisper to the appropriate speaker include a {&simple} to make the message hit the chat output ...and we should have a command line that looks like: ! /w @(speaker.character_name[@(speaker.player_name)]) &{template:default} {{name=@{selected|token_name}}} {{@{selected|bar1} [Click Here To Learn More](@{selected|bar1|max})}} {&simple}