Depends on what you're doing. If it's literally just send the text to chat unprocessed, then a basic roll button will do or sending the query in the final startRoll call of a CRP function. If you need to do logic based on what the user enters, then you'll send it via startRoll. You can actually get text, you just have to be slightly tricksy by putting the query inside a roll label (and of course if the user enters a right square bracket, it'll kind of break). Here's what the extractQueryResult function from the K-scaffold looks like (with the scaffold specific syntax edited out): const extractQueryResult = async function(query){
const rollObj = {
query:`[[0[response=?{${query}}]]]`
};
const msg = `{{query=[[0[response=?{${query}}]]]}}`;
const roll = await startRoll(msg);
finishRoll(roll.rollId);
return roll.results.query.expression.replace(/^.+?response=|\]$/g,'');
}; Oosh is the one that originally figured this out.