Okay, rough form. Currently whispers the result to the GM (but I can change it to make it public, or less ugly). Only reacts to inline rolls by players whose display name in game is in the playerNames array on line 4. So change the 'GMNAME' there to whatever your ingame display name is. var rollListener = rollListener || (function () {
'use strict';
const version = '0.2',
playerNames = ['NAME1','NAME2'],
dieSize = 20,
checkInstall = function () {
if(!_.has(state, 'RollListener')) {
state.RollListener = {
active : false,
whisper : '"GM"'
};
}
log('-=> RollListener v' + version + ' <=-');
},
extractRoll = function (roll, results) {
switch (roll.type) {
case 'R':
if (roll.sides === dieSize) {
_.each(roll.results, function (r) {
results.push(r.v);
});
}
break;
case 'V':
_.each(roll.rolls, _.partial(extractRoll, _, results));
break;
case 'G':
_.each(roll.rolls, function (r) {
_.each(r, _.partial(extractRoll, _, results));
});
}
},
handleInput = function (msg) {
let displayName = (getObj('player', msg.playerid) || { get: (a => 'API')}).get('_displayname');
if (state.RollListener.active && _.contains(playerNames, displayName) && _.has(msg, 'inlinerolls')) {
let results = [];
_.each(msg.inlinerolls, function (roll) {
extractRoll(roll.results, results);
});
if (results.length) {
let charName = (msg.content.match(/{{character_name=([A-za-z0-9\(\)]*)}}/) || ['',''])[1],
title = (msg.content.match(/{{title=((?:[A-za-z0-9\s\(\)]|\^{\w+})*)}}/) || ['',''])[1],
whisper = state.RollListener.whisper ? ('/w ' + state.RollListener.whisper + ' ') : '',
output = whisper + '&{template:5e-shaped} {{title=' + title + '}} {{freetext=' +
(charName ? charName + ' - ' : '') + 'D20 rolls: <b>' + results.join(', ') + '</b>.}}';
sendChat('Listener', output);
}
}
else if (msg.type === 'api' && (msg.content.search(/!roll-listener\b/) === 0)) {
switch(msg.content.split(' ')[1]) {
case 'toggle':
state.RollListener.active = !state.RollListener.active;
break;
case 'public':
state.RollListener.whisper = false;
break;
case 'whisper':
state.RollListener.whisper = msg.content.slice(23);
}
}
return;
},
registerEventHandlers = function () {
on('chat:message', handleInput);
};
return {
CheckInstall: checkInstall,
RegisterEventHandlers: registerEventHandlers
};
}());
on('ready', function () {
'use strict';
rollListener.CheckInstall();
rollListener.RegisterEventHandlers();
});