전보 로봇 용 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에 액세스하는 방법을 사용하여 타이머를 설정하는 방법이 없다면 더 똑똑한 방법이 될 수 있을까요?
내가 정의한 메서드를 수행하기 위해 30 분의 대기 시간을 가진 threading.Timer()를 추가하려고 시도했지만 스크립트를 실행했을 때 30 초를 기다리지 않았습니다. 새로운 메소드로 곧바로 건너 뛰어 다음 메시지로 넘어갔습니다. 코드이었다 "t = threading.Timer의 (30.0, check_status) t.Start" 뭔가 내가 잘못하고 있었 있습니까? –
코드는 30 초 동안 만 기다리고, 다른 횟수로 테스트합니다. 30 분 동안 기다리려면 1800 secx가됩니다. –