Add !ready and !unready

This commit is contained in:
Juhani Krekelä 2019-05-06 11:32:11 +03:00
parent 57f8f60980
commit c09ddf4bda
1 changed files with 52 additions and 11 deletions

View File

@ -5,7 +5,7 @@ from collections import namedtuple
import cardcast_api
class events(enum.Enum):
quit, nick_change, status, start, kill, join, leave, players, deck_add, deck_add_random, deck_remove, deck_list, limit, card, cards = range(15)
quit, nick_change, status, start, ready, unready, kill, join, leave, players, deck_add, deck_add_random, deck_remove, deck_list, limit, card, cards = range(17)
class limit_types(enum.Enum):
points, rounds = range(2)
@ -41,9 +41,15 @@ def get_event():
old = input('old> ')
new = input('new> ')
return (events.nick_change, old, new)
if t == 'start':
elif t == 'start':
nick = input('nick> ')
return (events.start, nick)
elif t == 'ready':
nick = input('nick> ')
return (events.ready, nick)
elif t == 'unready':
nick = input('nick> ')
return (events.unready, nick)
elif t == 'status':
return (events.status,)
elif t == 'kill':
@ -265,12 +271,12 @@ def game():
limit_type = {limit_types.rounds: 'rounds', limit_types.points: 'points'}[limit.type]
send('Limit set to %i %s' % (limit.number, limit_type))
elif event == events.card:
# Ignore selecting cards if it's not available
elif event == events.card or event == events.cards:
# Ignore selecting and listing cards if it's not available
pass
elif event == events.cards:
# Ignore listing cards if it's not available
elif event == events.ready or event == events.unready:
# Ignore readiness commands by default
pass
else:
@ -309,7 +315,12 @@ def game():
def game_setup():
nonlocal players
players_ready = set()
while True:
players_unready = [i for i in players.values() if i not in players_ready]
if len(players_unready) == 0: break
if len(players) == 0:
send('Lost all players, quiting game setup')
return no_game
@ -317,18 +328,48 @@ def game():
event, *args = get_event()
if event == events.status:
send('Game setup')
if len(players_ready) == 0:
send('Game setup')
else:
send('Game setup, waiting for %s to be ready' % ', '.join(i.nick for i in players_unready))
elif event == events.start:
if len(players) < 2:
send('Not enough players')
else:
return setup_round
break
elif event == events.ready:
nick, = args
# Ignore if not in the game
if nick not in players:
continue
player = players[nick]
if player not in players_ready:
players_ready.add(player)
elif event == events.unready:
nick, = args
# Ignore if not in the game
if nick not in players:
continue
player = players[nick]
if player in players_ready:
players_ready.remove(player)
else:
r = common_handler(event, args)
if r is not None: return r
if len(players) < 2:
send('Not enough players')
return game_setup
else:
return setup_round
def total_calls():
nonlocal decks