2016-09-19 5 views
0

전보 로봇 용 API에 액세스하는 스크립트가 있지만 불행히도 한 번에 하나의 메시지 만 처리 할 수 ​​있습니다.파이썬 스레드 카운트 다운을 한 다음 동작을 수행하려면 어떻게해야합니까?

내 목표는 누군가가 게임을 시작할 때 타이머 스레드를 시작하고 특정 시간 후에 (아직 게임에서 승리하지 않은 경우) 그룹의 다른 사용자를 예방하지 않도록 게임을 다시 설정하는 것입니다 게임을 할 때 (혼란을 피하기 위해 한 번에 하나의 게임 만 사용하도록 설정했습니다.) 내가 시도 단어 챙기다 게임

: 그래서 예를 들면

import time 
import telepot 

def handle(msg): 
    message_text = msg['text'] 
    message_location_id = msg['chat']['id'] 
    global game_active 
    global word_to_unscramble 
    if message_text == '/newgame': 
     game_active = True 
     <game function, defines word_to_unscramble> 
     time.sleep(30) 
     if game_active: 
      game_active = False 
      word_to_unscramble = None 
      bot.sendMessage(message_location_id, 'Sorry the answer was ' + word_to_unscramble) 
    if message_text == 'word_to_unscramble': 
     game_active = False 
     bot.sendMessage(message_location_id, 'You win!') 

# I added this part in as an echo, just to see when it processed the message 
    if 'text' in msg: 
     bot.sendMessage(message_location_id, message_text) 

game_active = False 

word_to_unscramble = None 

bot = telepot.Bot('<my api token>') 

bot.message_loop(handle) 

이 코드로, 그러나, 다음 실패를 보내 30 초 정도 기다린 받아 첫 번째 메시지를 처리하는 것 코드를 작성한 다음 두 번째 코드를 처리하십시오.

너무 스레딩 프로세스에 익숙하지 않아 카운트 다운 타이머를 처리하기 위해 새 스레드를 시작하도록 설정할 수 있으므로 메시지를 계속 처리 할 수 ​​있습니다. ?

현재 텔레 그램 API에 액세스하는 방법을 사용하여 타이머를 설정하는 방법이 없다면 더 똑똑한 방법이 될 수 있을까요?

답변

0

아직 Python-Telegram-Bot으로 작업하지는 못했지만 파이썬에서 타이머 사용에 대해 알고있는 모든 것은 sched을 사용하여 파이썬 코드에 대한 타이머 기능을 활용할 수 있습니다. 앱에서 multithreading은 더 이해하기 쉽기 때문에 threading.Timer 클래스를 찾아 볼 수 있습니다.

+0

내가 정의한 메서드를 수행하기 위해 30 분의 대기 시간을 가진 threading.Timer()를 추가하려고 시도했지만 스크립트를 실행했을 때 30 초를 기다리지 않았습니다. 새로운 메소드로 곧바로 건너 뛰어 다음 메시지로 넘어갔습니다. 코드이었다 "t = threading.Timer의 (30.0, check_status) t.Start" 뭔가 내가 잘못하고 있었 있습니까? –

+0

코드는 30 초 동안 만 기다리고, 다른 횟수로 테스트합니다. 30 분 동안 기다리려면 1800 secx가됩니다. –