def handle_text_message(event):
text = event.message.text
sourceId = getSourceId(event.source)
matcher = re.match(r'^#(\d+) (.+)', text)
if text == '???':
poker_mutex = Mutex(redis, POKER_MUTEX_KEY_PREFIX+ sourceId)
poker_mutex.lock()
if poker_mutex.is_lock():
number = str(redis.incr(sourceId)).encode('utf-8')
line_bot_api.reply_message(
event.reply_token,
generate_planning_poker_message(number))
time.sleep(POKER_MUTEX_TIMEOUT)
if poker_mutex.is_lock():
poker_mutex.unlock()
elif matcher is not None:
number = matcher.group(1)
value = matcher.group(2)
current = redis.get(sourceId).encode('utf-8')
vote_key = sourceId + number
status = redis.hget(vote_key, 'status')
if status is None:
if number != current:
line_bot_api.reply_message(
event.reply_token,
TextMessage(text=MESSAGE_INVALID_VOTE.format(number)))
return
poker_mutex = Mutex(redis, POKER_MUTEX_KEY_PREFIX+ sourceId)
vote_mutex = Mutex(redis, VOTE_MUTEX_KEY_PREFIX + sourceId)
location = mapping.keys()[mapping.values().index(value)]
vote_mutex.lock()
if vote_mutex.is_lock():
time.sleep(VOTE_MUTEX_TIMEOUT)
redis.hincrby(vote_key, location)
line_bot_api.reply_message(
event.reply_token,
genenate_voting_result_message(vote_key)
)
redis.hset(vote_key, 'status', 'complete')
vote_mutex.unlock()
poker_mutex.release()
else:
redis.hincrby(vote_key, location)
else:
line_bot_api.reply_message(
event.reply_token,
TextMessage(text=MESSAGE_END_POKER.format(number)))
评论列表
文章目录