2016-11-27 1 views
2

Ich erstelle ein Spiel auf Telegramm und derzeit habe ich ein Problem über die Arbeit mit mehreren Updates zur gleichen Zeit. Ich verwende node.jsTelegramm - Knoten. Js behandelt mehrere Updates

Zum Beispiel habe ich diesen Code

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 

} 

Irgendwelche Gedanken um dieses Problem zu lösen?

Vielen Dank, wird jede Hilfe

+0

So haben Sie einen Code geschrieben, die nicht richtig funktioniert? Warum zeigst du es nicht? – Tomalak

+0

@Tomalak, siehe oben meinen bearbeiteten Code, danke – Webster

+0

Sie müssen die "Existiert" -Kontrolle entfernen. Schreiben Sie eine Funktion, die einen Raum erstellt (oder ausfällt) und rufen Sie diese Funktion auf. Die Funktion sollte ein Raumobjekt bei Erfolg zurückgeben oder einen Fehler werfen. Auf diese Weise ist die erste eingehende Anforderung erfolgreich, die zweite fehlgeschlagen. – Tomalak

Antwort

1

Sie müssen erkannt werden, um den einzigartigen Chat/Benutzer-IDs auf Ihre Datenbank verknüpfen, solche Konflikte zu vermeiden. Sehen Sie den Code unten und kommentieren Sie, wie es geht.

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 
 
}

Verwandte Themen