async def _do_execute(self, cmd): # Parse the inputs as a datetime try: suggested_time_utc = dateparse.parse_datetime(cmd.arg_string, pytz.utc) except necrobot.exception.ParseException as e: await cmd.channel.send( 'Failed to parse your input as a time ({0}).'.format(e)) return match = self.bot_channel.match # Suggest the time and confirm match.suggest_time(suggested_time_utc) # Output what we did for racer in match.racers: if racer.member is not None: if racer.timezone is not None: await cmd.channel.send( '{0}: This match is suggested to be scheduled for {1}. Please confirm with ' '`.confirm`.'.format( racer.member.mention, timestr.str_full_12h(racer.timezone.normalize(suggested_time_utc)) ) ) else: await cmd.channel.send( '{0}: A match time has been suggested; please confirm with `.confirm`. I also suggest ' 'you register a timezone (use `.timezone`), so I can convert to your local time.'.format( racer.member.mention ) ) await self.bot_channel.update()
async def _do_execute(self, cmd): match = self.bot_channel.match if not match.has_suggested_time: await cmd.channel.send( 'Error: A scheduled time for this match has not been suggested. Use `.suggest` to suggest a time.') return author_as_necrouser = await userlib.get_user(discord_id=int(cmd.author.id)) if author_as_necrouser is None: await cmd.channel.send( 'Error: {0} is not registered. Please register with `.register` in the main channel. ' 'If the problem persists, contact CoNDOR Staff.'.format(cmd.author.mention)) return if match.is_confirmed_by(author_as_necrouser): await cmd.channel.send( '{0}: You\'ve already confirmed this time.'.format(cmd.author.mention)) return match.confirm_time(author_as_necrouser) await cmd.channel.send( '{0}: Confirmed acceptance of match time {1}.'.format( cmd.author.mention, timestr.str_full_12h(match.suggested_time.astimezone(author_as_necrouser.timezone)))) if match.is_scheduled: await NEDispatch().publish('schedule_match', match=match) await cmd.channel.send( 'The match has been officially scheduled.') await self.bot_channel.update()
async def _do_execute(self, cmd): match = self.bot_channel.match if not match.has_suggested_time: await cmd.channel.send( 'Error: A scheduled time for this match has not been suggested. ' 'One of the racers should use `.suggest` to suggest a time.') return match.force_confirm() await NEDispatch().publish('schedule_match', match=match) await cmd.channel.send( 'Forced confirmation of match time: {0}.'.format( timestr.str_full_12h(match.suggested_time))) await self.bot_channel.update()
async def _do_execute(self, cmd): match = self.bot_channel.match # Check for match already being confirmed if match.is_scheduled: await self.client.send_message( cmd.channel, 'The scheduled time for this match has already been confirmed by both racers. To reschedule, ' 'both racers should first call `.unconfirm`; you will then be able to `.suggest` a new time.') return # Get the command's author as a NecroUser object author_as_necrouser = await userlib.get_user(discord_id=cmd.author.id) if not author_as_necrouser: await self.client.send_message( cmd.channel, 'Error: {0} is not registered. Please register with `.stream` in the main channel. ' 'If the problem persists, contact CoNDOR Staff.'.format(cmd.author.mention)) return # Check that both racers in the match are registered if not match.racer_1 or not match.racer_2 \ or not match.racer_1.discord_id or not match.racer_2.discord_id: await self.client.send_message( cmd.channel, 'Error: At least one of the racers in this match is not registered, and needs to call ' '`.register` in the main channel. (To check if you are registered, you can call `.userinfo ' '<discord name>`. Use quotes around your discord name if it contains a space.)') return # Check that the command author is racing in the match if not match.racing_in_match(author_as_necrouser): await self.client.send_message( cmd.channel, 'Error: {0} does not appear to be one of the racers in this match. ' 'If this is in error, contact CoNDOR Staff.'.format(cmd.author.mention)) return # Get the racer's timezone if author_as_necrouser.timezone is None: await self.client.send_message( cmd.channel, '{0}: Please register a timezone with `.timezone`.'.format(cmd.author.mention)) return # Parse the inputs as a datetime try: suggested_time_utc = dateparse.parse_datetime(cmd.arg_string, author_as_necrouser.timezone) except necrobot.exception.ParseException as e: await self.client.send_message( cmd.channel, 'Failed to parse your input as a time ({0}).'.format(e)) return # Check if the scheduled time is in the past utcnow = pytz.utc.localize(datetime.datetime.utcnow()) time_until = suggested_time_utc - utcnow if not time_until.total_seconds() >= 0: await self.client.send_message( cmd.channel, '{0}: Error: The time you are suggesting for the match appears to be in the past.'.format( cmd.author.mention)) return # Check for deadlines on suggested times. league = LeagueMgr().league if league is not None: deadline_str = league.deadline if deadline_str is not None: deadline = dateparse.parse_datetime(deadline_str) if suggested_time_utc - deadline > datetime.timedelta(seconds=0): await self.client.send_message( cmd.channel, 'Matches must be scheduled before {deadline:%b %d (%A) at %I:%M %p} UTC' .format(deadline=deadline) ) return # Suggest the time and confirm match.suggest_time(suggested_time_utc) match.confirm_time(author_as_necrouser) # Output what we did for racer in match.racers: if racer.member is not None: if racer.timezone is not None: if racer == author_as_necrouser: await self.client.send_message( cmd.channel, '{0}: You\'ve suggested the match be scheduled for {1}. Waiting for the other ' 'racer to `.confirm`.'.format( racer.member.mention, timestr.str_full_12h(racer.timezone.normalize(suggested_time_utc)))) else: await self.client.send_message( cmd.channel, '{0}: This match is suggested to be scheduled for {1}. Please confirm with ' '`.confirm`.'.format( racer.member.mention, timestr.str_full_12h(racer.timezone.normalize(suggested_time_utc)))) else: await self.client.send_message( cmd.channel, '{0}: A match time has been suggested; please confirm with `.confirm`. I also suggest ' 'you register a timezone (use `.timezone`), so I can convert to your local time.'.format( racer.member.mention)) await self.bot_channel.update()