def incoming_message(self, slackmessage, slackclient): conferencerooms = google_utils.google_get_calendar_ids_by_regex(self.jeggings.googleservice_calendar, domain=self.jeggings.google_domain, regex="^[C|c]onf") now = datetime.datetime.now(pytz.timezone('US/Eastern')) searchtime, modmessage = jeggings_utils.extract_time_from_txt(slackmessage['text'], now) msg = "Looking for free rooms..." if searchtime.day != now.day and searchtime.month != now.month: msg = "Looking for rooms free on %s ..." % searchtime.strftime("%A %B the " + jeggings_utils.numberish(searchtime.day)) elif searchtime.day != now.day: msg = "Looking for rooms free on %s ..." % searchtime.strftime("%A the " + jeggings_utils.numberish(searchtime.day)) slackclient.send_text_on_slack_channel([slackmessage['channel']], msg) endofworkdayhour = 24 endof_resoftheday = searchtime + datetime.timedelta(hours=max(endofworkdayhour - now.hour, 0)) foundsomefreetime = False dateignore = searchtime for confroom in conferencerooms.keys(): commonfree, calendars = jeggings_utils.find_common_available_times(self.jeggings.googleservice_calendar, searchtime, endof_resoftheday, [confroom], logger=self.jeggings.logger) if len(commonfree) > 0: foundsomefreetime = True self.logger.debug("[{}] / {}".format(conferencerooms[confroom].lstrip(), commonfree)) replymsg = conferencerooms[confroom].lstrip() + " is free for" times = ", ".join(map( lambda cf: jeggings_utils.pretty_print_time_period(datetime.datetime.fromtimestamp(cf[0]), datetime.datetime.fromtimestamp(cf[-1]), dateignore), commonfree)) dateignore = searchtime slackclient.send_text_on_slack_channel([slackmessage['channel']], replymsg + " " + times) if not foundsomefreetime: slackclient.send_text_on_slack_channel(slackmessage['channel'], "There does not seem to be free room") return True, True
def incoming_message(self, slackmessage, slackclient): slackclient.send_text_on_slack_channel(slackmessage['channel'], slackmessage['channel'], "Looking...") conferencerooms = google_utils.google_get_calendar_ids_by_regex(self.jeggings.googleservice_calendar, domain=self.jeggings.google_domain, regex="^[C|c]onf") events = google_utils.google_find_conference_room_events_for_user( calendar_service=self.jeggings.googleservice_calendar, directory_service=self.jeggings.googleservice_directory, roomids=conferencerooms, user=slackmessage['user']['profile']['email']) response = "unknown" if len(events) == 0: response = "The coast is clear." elif len(events) >= 1: for event in events: conditional = "You're exepected" uemail = slackmessage['user']['profile']['email'] invite = filter(lambda a: a['email'].lower() == uemail.lower(), event['attendees']) if len(invite) < 1: self.logger.error("incoming_message could not find expected email [%s] among atendees [%s]" % (uemail, ",".join(event['attendees']))) elif len(invite) > 1: self.logger.info("incoming_message found multiple instances of email [%s] among atendees [%s]" % (uemail, ",".join(event['attendees']))) else: if invite[0].get('responseStatus') == 'needsAction': conditional = "You're invited to" elif invite[0].get('responseStatus') == 'accepted': conditional = "You're expected in" else: self.logger.info("incoming_message unknown responseStatus [%s]" % invite[0].get('responseStatus')) response = "%s %s for '%s'" % (conditional, event['location'], event['summary']) slackclient.send_text_on_slack_channel(slackmessage['channel'], response) return True, True