Difference between revisions of "Script:IsGM Auth Module"
From Roll20 Wiki
(→Syntax) |
m (→Syntax) |
||
Line 10: | Line 10: | ||
{{API command|reset-isgm}} {{API parameter|name=password|optional=true}} | {{API command|reset-isgm}} {{API parameter|name=password|optional=true}} | ||
{{Formal API command| | {{Formal API command| | ||
− | {{token|S}} {{rarr}} | + | {{token|S}} {{rarr}} {{API command|reset-isgm}} {{token|password|-}} |
{{token|password}} {{rarr}} {{epsilon}} | {{token|password}} {{rarr}} {{epsilon}} | ||
{{token|password}} {{rarr}} {{string}} | {{token|password}} {{rarr}} {{string}} |
Revision as of 22:54, 25 July 2014
This script creates a function, isGM(id)
, which is accessible by other scripts to differentiate GM users from non-GM users. GM status is determined by comparing the msg.who
from non-API messages to the player._displayname
. Since non-API chat messages append " (GM)" to GMs in msg.who
, comparing the two will only be equal if a player is NOT a gm. (This works regardless of if the player adds '(GM)' to their name.)
Additionally, the command !reset-isgm
is provided, allowing the reset of the GM-status cache, for example if someone is promoted to GM status who had previously been identified as a player.
Contents |
Syntax
!reset-isgm [password]Formally:
S
→ !reset-isgmpassword
password
→ ε
password
→ string
Parameter | Values |
---|---|
password | Password to use when resetting the detected GM status of all players. This parameter is only necessary when calling !reset-isgm as a non-GM user.
|
Examples
If you have already been identified as a GM in the campaign, simply using !reset-isgm
is enough to reset everyone's GM status. Anyone who knows the password may supply the password as an argument to force the reset regardless of their GM status. For example:
!reset-isgm swordfish
The main feature of the script, however, is the isGm
function. This can be called from other scripts to validate users. For example:
if(isGM(msg.playerid)) { sendChat('','/w '+msg.who+' you are a GM!'); } else { sendChat('','/w '+msg.who+' you are NOT GM!'); }
Code
// GIST: https://gist.github.com/shdwjk/8d5bb062abab18463625 var IsGMModule = IsGMModule || { version: 0.6, active: true, reset_password: "swordfish", CheckInstall: function() { var players = findObjs({_type:"player"}); if( ! _.has(state,'IsGM') || ! _.has(state.IsGM,'version') || state.IsGM.version != IsGMModule.version ) { state.IsGM={ version: IsGMModule.version, gms: [], players: [], unknown: [] }; } state.IsGM.unknown=_.difference( _.pluck(players,'id'), state.IsGM.gms, state.IsGM.players ); IsGMModule.active = (state.IsGM.unknown.length>0); }, IsGM: function(id) { return _.contains(state.IsGM.gms,id); }, HandleMessages: function(msg) { if(msg.type != "api") { if(IsGMModule.active && msg.playerid != 'API') { if(_.contains(state.IsGM.unknown, msg.playerid)) { var player=getObj('player',msg.playerid); if("" == player.get('speakingas') || 'player|'+msg.playerid == player.get('speakingas')) { if(msg.who == player.get('_displayname')) { state.IsGM.players.push(msg.playerid); } else { state.IsGM.gms.push(msg.playerid); sendChat('IsGM','/w gm '+player.get('_displayname')+' is now flagged as a GM.') } state.IsGM.unknown=_.without(state.IsGM.unknown,msg.playerid); IsGMModule.active = (state.IsGM.unknown.length>0); } } } } else { var tokenized = msg.content.split(" "); var command = tokenized[0]; switch(command) { case '!reset-isgm': if(isGM(msg.playerid) || (tokenized.length>1 && tokenized[1] == isGMModule.reset_password)) { delete state.IsGM; IsGMModule.CheckInstall(); sendChat('IsGM','/w gm IsGM data reset.'); } else { var who=getObj('player',msg.playerid).get('_displayname').split(' ')[0]; sendChat('IsGM','/w '+who+' ('+who+')Only GMs may reset the isGM data.' +'If you are a GM you can reset by specifying the reset password from' +'the top of the IsGM script as an argument to !reset-isgm') } break; } } }, RegisterEventHandlers: function(){ on('chat:message',IsGMModule.HandleMessages); }, }; on('ready',function(){ IsGMModule.CheckInstall(); IsGMModule.RegisterEventHandlers(); }); var isGM = isGM || function(id) { return IsGMModule.IsGM(id); };
Configuration
reset_password
should be changed from the default. No further customization is required. Do note that the campaign's GM should remember to say something in the chat out of character after installing this script (or running the reset-isgm
command) and before making use of any scripts which make use of isGM
.