Add !redeal

This commit is contained in:
Juhani Krekelä 2019-05-11 20:55:40 +03:00
parent cf6e2fea93
commit 1ffb82ebc1
2 changed files with 52 additions and 7 deletions

View File

@ -296,6 +296,10 @@ def parse_command(message, nick, irc):
if args(0) is not None:
send_event((events.origins, nick))
elif c == '!redeal':
if args(0) is not None:
send_event((events.redeal, nick))
elif c == '!help':
arg = args([0, 1, 2])
if arg is not None:
@ -304,10 +308,10 @@ def parse_command(message, nick, irc):
arg[0] = arg[0][1:]
if len(arg) == 0:
send('!status !start !ready !unready !kill !join !leave !players !kick !deck !limit !card !cards !origins')
send('!status !start !ready !unready !kill !join !leave !players !kick !deck !limit !card !cards !origins !redeal')
elif len(arg) == 1:
if arg[0] in ('status', 'ready', 'unready', 'kill', 'join', 'leave', 'players', 'cards', 'origins'):
if arg[0] in ('status', 'ready', 'unready', 'kill', 'join', 'leave', 'players', 'cards', 'origins', 'redeal'):
send('Usage: !%s' % (arg[0]))
elif arg[0] == 'start':
send('Usage: !start [<preset>]')

View File

@ -2,8 +2,6 @@ import enum
import random
from collections import namedtuple
# TODO: !redeal
import cardcast_api
class events(enum.Enum):
@ -13,7 +11,7 @@ class events(enum.Enum):
deck_add, deck_add_random, deck_remove, deck_list,
bot_add_rando, bot_remove,
limit,
card, cards, origins) = range(21)
card, cards, origins, redeal) = range(22)
class limit_types(enum.Enum):
points, rounds = range(2)
@ -351,8 +349,8 @@ def game(send, notice, voice, devoice, get_event):
if origins != '':
notice(nick, origins)
elif event == events.card or event == events.cards:
# Ignore selecting and listing cards if it's not available
elif event == events.card or event == events.cards or event == events.redeal:
# Ignore card commands if no cards are available yet
pass
elif event == events.ready or event == events.unready:
@ -783,6 +781,26 @@ def game(send, notice, voice, devoice, get_event):
else:
notice(nick, 'call: %s, %s' % (round_call_card.deck.code, get_hand_origins(players[nick])))
elif event == events.redeal:
nick, = args
if nick not in players:
# Ignore those not in the game
continue
player = players[nick]
for index in range(len(player.hand)):
player.hand[index] = None
if player in choosers or player in card_choices:
send('Dealing out a new hand to %s, restarting round' % nick)
return setup_round
else:
notice(nick, 'New hand will be dealt next round')
elif event == events.deck_remove:
common_handler(event, args)
@ -906,6 +924,26 @@ def game(send, notice, voice, devoice, get_event):
notice(nick, 'call: %s; %s' % (round_call_card.deck.code, '; '.join(answers_origins)))
elif event == events.redeal:
nick, = args
if nick not in players:
# Ignore those not in the game
continue
player = players[nick]
for index in range(len(player.hand)):
player.hand[index] = None
if player in card_choices:
send('Lost a card played this round, restarting round')
return setup_round
else:
notice(nick, 'New hand will be dealt next round')
elif event == events.deck_remove:
common_handler(event, args)
@ -1079,6 +1117,9 @@ if __name__ == '__main__':
elif t == 'origins':
nick = input('nick> ')
return (events.origins, nick)
elif t == 'redeal':
nick = input('nick> ')
return (events.redeal, nick)
else:
print('?')