Now compatible with inline rolls. Thoroughly tested but if you have any issues with this let me know: /* Delay Function / Command by Kastion the Scriptomancer Profile: <a href="https://app.roll20.net/users/3173313/kastion" rel="nofollow">https://app.roll20.net/users/3173313/kastion</a> Syntax: !delay [seconds] \\ [speaker] -- [command] */ function processInlinerolls(msg) { if(_.has(msg,'inlinerolls')){ return _.chain(msg.inlinerolls) .reduce(function(m,v,k){ var ti=_.reduce(v.results.rolls,function(m2,v2){ if(_.has(v2,'table')){ m2.push(_.reduce(v2.results,function(m3,v3){ m3.push(v3.tableItem.name); return m3; },[]).join(', ')); } return m2; },[]).join(', '); m['$[['+k+']]']= (ti.length && ti) || v.results.total || 0; return m; },{}) .reduce(function(m,v,k){ return m.replace(k,v); },msg.content) .value(); } else { return msg.content; } } function delayFunction(speaker, output, pid) { return function() { if (output.indexOf("!") !== -1) sendChat("player|" + pid.trim(), output.trim()); else sendChat(speaker.trim(), output.trim()); } } on("chat:message", function(msg) { if('api' !== msg.type ) { return; } var cmdName = "!delay"; var msgTxt = msg.content; if(msg.type == "api" && msgTxt.indexOf(cmdName) !== -1 && playerIsGM(msg.playerid)) { var inline_rolls = processInlinerolls(msg); var seconds = msg.content.split(' ')[1]; var speaking = msg.content.split('\\')[1]; var command = inline_rolls.substring(inline_rolls.indexOf('--')+2); var pid = msg.playerid; if (speaking) speaking = speaking.split('--')[0]; else speaking = ""; if (!isNaN(seconds) && command) var delay_length = seconds * 1000; else return; setTimeout(delayFunction(speaking, command, pid), delay_length); }; }); on('ready',function(){ log("-=> Delay command loaded (!delay) <=-"); }); To make certain scripts that use msg.playerid in them work with !delay, generally search for the following (Using token-mod as an example): if (msg.type !== "api") { return; } Add this right below the above code: if (!state.tokenmod_pid) state.tokenmod_pid = "API"; if (msg.playerid !== "API") state.tokenmod_pid = msg.playerid; else msg.playerid = state.tokenmod_pid; If you have any issues with the script let me know.