self._cache.append((msg_tag, msg))
msg = self._get_msg()
msg_tag = self._msg_tag(msg['Subject'])
- if verbose == True:
+ if self.verbose == True:
print >> sys.stderr, msg
return msg
def _msg_tag(self, subject):
else:
body.append(' %s' % c)
self._send_mail(world, log, 'Drawing cards', '\n'.join(body))
- def select_territory(self, world, log):
+ def __select_territory(self, world, log, error=None):
"""Return the selected territory's name.
"""
body = [
for t in world.territories():
if t.player == None:
body.append(' %s' % t)
+ if error != None:
+ body.insert(0, '')
+ body.insert(0, str(error))
tag = self._send_mail(world, log, 'Select territory', '\n'.join(body))
body = self._get_mail(tag)
name = body.splitlines()[0].strip()
return name
- def play_cards(self, world, log, play_required=True):
+ def play_cards(self, world, log, error=None,
+ play_required=True):
"""Decide whether or not to turn in a set of cards.
Return a list of cards to turn in or None. If play_required
'blank to pass). Available sets are:']
for i,h in enumerate(possibles):
body.append(' %d: %s' % (i, h))
+ if error != None:
+ body.insert(0, '')
+ body.insert(0, str(error))
tag = self._send_mail(world, log, subject, '\n'.join(body))
body = self._get_mail(tag)
text = body.splitlines()[0].strip()
if text == '':
return None
return possibles[int(text)]
- def place_armies(self, world, log, remaining=1, this_round=1):
+ def place_armies(self, world, log, error=None,
+ remaining=1, this_round=1):
"""Both during setup and before each turn.
Return {territory_name: num_armies, ...}
'Your current disposition is:']
for t in self.territories(world):
body.append(' %d : %s' % (t.armies, t))
+ if error != None:
+ body.insert(0, '')
+ body.insert(0, str(error))
tag = self._send_mail(world, log, subject, '\n'.join(body))
body = self._get_mail(tag)
placements = {}
line = line.strip()
if len(line) == 0:
break
+ if line.count(':') != 1:
+ raise PlayerError('Invalid syntax "%s"' % line)
armies,terr_name = [x.strip() for x in line.split(':')]
placements[terr_name] = int(armies)
return placements
- def attack_and_fortify(self, world, log, mode='attack'):
+ def attack_and_fortify(self, world, log, error=None,
+ mode='attack'):
"""Return list of (source, target, armies) tuples. Place None
in the list to end this phase.
"""
' ',
'or',
' Pass']
+ if error != None:
+ body.insert(0, '')
+ body.insert(0, str(error))
tag = self._send_mail(world, log, subject, '\n'.join(body))
body = self._get_mail(tag)
if mode == 'fortify':
elif line.lower() == 'pass' \
or (mode == 'fortify' and len(line) == 0):
return None
- def support_attack(self, world, log, source, target):
+ def support_attack(self, world, log, error,
+ source, target):
"""Follow up on a conquest by moving additional armies.
"""
subject = 'Support conquest of %s by %s' % (target, source)
'Reply with first line(s) of the body of your email set',
'to "<number_of_armies>", or leave the first line blank',
'to pass.']
+ if error != None:
+ body.insert(0, '')
+ body.insert(0, str(error))
tag = self._send_mail(world, log, subject, '\n'.join(body))
body = self._get_mail(tag)
text = body.splitlines()[0].strip()