function hasVoice(nick){
	return getUser(nick).flags.voice;
}
listen(/^:([^!]+).*JOIN :([^ ]+)$/i,function(match,data,replyTo,connection){
	var user = match[1].trim();
	if(!hasVoice(user)){
		connection.send('MODE '+match[2].trim()+' +v '+user);
	}
});
listen(rCommand('voice-ignore',true),function(match,data,replyTo,connection){
	var user = match[2].trim();
	connection.reply(replyTo,"ignoring "+user);
	saveUser(user,{
		flags:{
			voice: false
		}
	});
});
listen(rCommand('voice-unignore',true),function(match,data,replyTo,connection){
	var user = match[2].trim();
	connection.reply(replyTo,"automatically voicing "+user);
	saveUser(user,{
		flags: {
			voice: true
		}
	});
});
listen(rCommand('voice-status',true),function(match,data,replyTo,connection){
	var user = match[2].trim();
	connection.reply(replyTo,"Status of user "+user+" is: "+(hasVoice(user)?'voiced':'mute'));
});
hook('unload',function(){
	delete hasVoice;
});
regHelp('voice-ignore','Do not automatically voice this user');
regHelp('voice-unignore','Automatically voice this user');
regHelp('voice-status','Displays the status of the user');
@@ -1,66 +1,4 @@
-function hasVoice(nick)%7B%0A%09return getUser(nick).flags.voice;%0A%7D%0A
 list
@@ -107,23 +107,33 @@
 %09if(
-!hasVoice(user)
+getUser(user).flags.voice
 )%7B%0A%09
@@ -794,22 +794,33 @@
  %22+(
-hasVoice(user)
+getUser(user).flags.voice
 ?'vo

Fix voice ignore/unignore