2016-11-27 11 views
2

私はテレグラムでゲームを作成していますが、現在は複数のアップデートを同時に扱うことに問題があります。私は私がこのコードにこの問題に取り組むためにテレグラム - ノード。 Jsが複数のアップデートを処理する

var TelegramBot = require('node-telegram-bot-api'),  
    bot = new TelegramBot("MY_TOKEN", {polling: true}); 

bot.onText(/^\/createroom/, function (res, match) { 

//Here i have some logic, to check whether if the room already created or not 
service.checkIfRoomExist(res) // this service here, will always return false, because of the simultaneously chat 
.then (function(isExist) { 
if (isExist === false) { 
    service.createRoom(res) 
    .then (function() { 

    }); 
} 
}); 



//it works fine, if player type "/createroom" not simultaneously 

//but if more than 1 player type "/createroom" simultaneously, my logic here doesn't work, it will create multiple room 

} 

任意の考えを持っている。例えば

のNode.js使用していますか?

どうもありがとう、任意のヘルプは

+0

だから、あなたは正しく動作しないいくつかのコードを書かれていますか?なぜあなたはそれを見せないのですか? – Tomalak

+0

@Tomalak、上の私の編集したコードを参照してください、 – Webster

+0

あなたは "存在"チェックを削除する必要があります。部屋を作成(または失敗)して呼び出す関数を記述します。この関数は、成功したときにルームオブジェクトを返すか、エラーをスローする必要があります。このようにして、最初の着信要求は成功し、2番目の要求は失敗します。 – Tomalak

答えて

1

を理解されるであろうあなたは、このような競合を防ぐために、データベースにユニークなチャット/ユーザIDをリンクする必要があります。以下のコードとそれを行う方法についてのコメントを参照してください。

var TelegramBot = require('node-telegram-bot-api'), 
 
    bot = new TelegramBot("MY_TOKEN", { 
 
     polling: true 
 
    }); 
 

 
bot.onText(/^\/createroom/, function (res, match) { 
 
    //use res.chat.id for groups and res.user.id for individuals 
 
    service.checkIfRoomExist(res.chat.id).then(function (isExist) { 
 
     if (isExist === false) { 
 
      service.createRoom(res.chat.id).then(function() { 
 
       bot.sendMessage(res.chat.id, 'Initializing game!') 
 
        // send game content here 
 
      }); 
 
     } 
 
     bot.sendMessage(res.chat.id, 'A game has already started in this group!') 
 
    }) 
 
}); 
 

 
function checkIfRoomExist(id) { 
 
    // Your logic here that checks in database if game has been created 
 
}

関連する問題