次のコードがあり、node.js を使用してターンテーブル ボットを作成しようとしています。このコードは、ユーザーが「q+」と入力したときに、それがまだキューにないこと、まだ DJ していないことを確認する必要があり、これら 2 つの要件を満たしている場合はそれらをキューに追加することを示しています。上記の最初の 2 つの基準のいずれかを満たさない場合は、ユーザーに伝え、キューに触れないでください。
私の問題は「isCurrentDJ(userId)」です。その関数を介して userId を渡すと、関数は正しい答えを返します。ただし、答えが「true」であり、 isCurrentDJ(userId) 関数内の console.log() 関数がそのことを証明している場合でも、関数は常に「false」を返します。
私は最も js に精通しているわけではないので、これは可変スコープの問題である可能性があります。しかし、私は本当に確信が持てず、何時間も苦労してきました! どんな助けでも大歓迎です。ありがとう!
// When someone speaks, listen to see if it is one of the q commands
bot.on('speak', function (data) {
var name = data.name;
var text = data.text;
var userId = data.userid;
// q+ :: Add to Queue
if (text.match(/^q\+$/)) {
//Index is the position in the queue that this person's name is found.
//If its not found, -1 is returned.
var index = queue.indexOf(name);
//Function to determine if the user is currently a DJ
function isCurrentDJ(user_id, callback){
bot.roomInfo(false, function (data) {
var djList = data.room.metadata.djs;
for (i = 0; i < djList.length; i++){
if (djList[i] == user_id){
console.log('recognized as a DJ'); //Consistently printed!
callback(true);
}
}
callback(false);
});
}
isCurrentDJ(userId, function(isDJ) {
//If the user is already in the queue
if(index > -1){
//Tell them they are already in there
bot.speak('You are already on the list');
} else if(isDJ){
//Otherwise if they are already a DJ tell them that
bot.speak('You are already a DJ, '+name);
}else{
//Otherise if they are not in the queue add user to end of queue
queue.push(name);
//Tell them about it and the updated q
bot.speak(name+' has been added to queue.');
}
});
}