From 2f33f431e236898107b7073d68c71a5507cb5e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Mon, 6 May 2019 14:29:34 +0300 Subject: [PATCH] Add presets --- botcmd.py | 12 ++++++++--- gameloop.py | 60 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/botcmd.py b/botcmd.py index 7df6153..9685380 100644 --- a/botcmd.py +++ b/botcmd.py @@ -129,8 +129,12 @@ def parse_command(message, nick, irc): send_event((events.status,)) elif c == '!start': - if args(0) is not None: - send_event((events.start, nick)) + arg = args([0, 1]) + if arg is not None: + if len(arg) == 0: + send_event((events.start, nick)) + else: + send_event((events.start, nick, arg[0])) elif c == '!ready': if args(0) is not None: @@ -239,8 +243,10 @@ def parse_command(message, nick, irc): send('!status !start !ready !unready !kill !join !leave !players !deck !limit !card !cards') elif len(arg) == 1: - if arg[0] in ('status', 'start', 'ready', 'unready', 'kill', 'join', 'leave', 'players', 'cards'): + if arg[0] in ('status', 'ready', 'unready', 'kill', 'join', 'leave', 'players', 'cards'): send('Usage: !%s' % (arg[0])) + elif arg[0] == 'start': + send('Usage: !start [preset]') elif arg[0] == 'card': send('Usage: [!card] ...') elif arg[0] == 'deck': diff --git a/gameloop.py b/gameloop.py index ad5a428..078477c 100644 --- a/gameloop.py +++ b/gameloop.py @@ -201,6 +201,25 @@ def game(send, notice, get_event): responses )) + def deck_add_handler(code): + nonlocal decks + + if code not in decks: + errwrapper('Failure adding deck: %s (%%s)' % code, add_deck, code) + else: + send('Deck already added') + + def deck_add_random_handler(): + nonlocal decks + + # Let's hope this never bites us in the butt + while True: + code = errwrapper('Failure getting random code for a deck. (%s)', get_random_deck_code) + if code is Error: return + if code not in decks: break + send('That was weird, got %s randomly but it was already added' % code) + errwrapper('Failure adding deck: %s (%%s)' % code, add_deck, code) + def common_handler(event, args): nonlocal players, decks, limit @@ -237,19 +256,10 @@ def game(send, notice, get_event): elif event == events.deck_add: code, = args - if code not in decks: - errwrapper('Failure adding deck: %s (%%s)' % code, add_deck, code) - else: - send('Deck already added') + deck_add_handler(code) elif event == events.deck_add_random: - # Let's hope this never bites us in the butt - while True: - code = errwrapper('Failure getting random code for a deck. (%s)', get_random_deck_code) - if code is Error: return - if code not in decks: break - send('That was weird, got %s randomly but it was already added' % code) - errwrapper('Failure adding deck: %s (%%s)' % code, add_deck, code) + deck_add_random_handler() elif event == events.deck_remove: code, = args @@ -300,11 +310,37 @@ def game(send, notice, get_event): send('Idle') elif event == events.start: - nick, = args + nick, *rest = args + add_player(nick) send('%s started a game, !join to join!' % nick) + expert = False + if len(rest) == 0 or rest[0] == 'default': + send('Adding the default CAH deck (A5DCM)') + + deck_add_handler('A5DCM') + + elif rest[0] == 'offtopia': + send('Adding the default CAH deck (A5DCM), offtopia injoke deck (PXWKC), and three random decks') + + deck_add_handler('A5DCM') + deck_add_handler('PXWKC') + + deck_add_random_handler() + deck_add_random_handler() + deck_add_random_handler() + + elif rest[0] == 'expert': + expert = True + + else: + send('Unknown preset %s' % rest[0]) + + if not expert: + send('Once you are ready to start the game, everyone send !ready') + return game_setup elif event == events.quit: