Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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