コード例 #1
0
ファイル: title.py プロジェクト: Abdur-rahmaanJ/bitbot
    def channel_message(self, event):
        """
        :command: title
        :pattern-url: 1
        """
        if event["target"].get_setting("auto-title", False):
            event.eat()
            url = event["match"].group(0)
            title = self._get_title(event["target"], event["match"].group(0))

            if title:
                message = title
                if event["target"].get_setting("auto-title-first", False):
                    setting = "url-last-%s" % self._url_hash(url)
                    first_details = event["target"].get_setting(setting, None)

                    if first_details:
                        first_nickname, first_timestamp, _ = first_details
                        timestamp_parsed = utils.iso8601_parse(first_timestamp)
                        timestamp_human = utils.datetime_human(
                            timestamp_parsed)
                        message = "%s (first posted by %s at %s)" % (
                            title, first_nickname, timestamp_human)
                    else:
                        event["target"].set_setting(setting, [
                            event["user"].nickname,
                            utils.iso8601_format_now(), url
                        ])
                event["stdout"].write(message)
コード例 #2
0
ファイル: title.py プロジェクト: adammcclure/bitbot
    def channel_message(self, event):
        if event["target"].get_setting("auto-title", False):
            event.eat()
            url = utils.http.url_sanitise(event["match"].group(0))
            code, title = self._get_title(event["server"], event["target"], url)

            if code == 200 and title:
                message = title
                if event["target"].get_setting("auto-title-first", False):
                    setting = "url-last-%s" % self._url_hash(url)
                    first_details = event["target"].get_setting(setting, None)

                    if first_details:
                        first_nickname, first_timestamp, _ = first_details
                        timestamp_parsed = utils.iso8601_parse(first_timestamp)
                        timestamp_human = utils.datetime_human(timestamp_parsed)
                        message = "%s (first posted by %s at %s)" % (title,
                            first_nickname, timestamp_human)
                    else:
                        event["target"].set_setting(setting,
                            [event["user"].nickname, utils.iso8601_format_now(),
                            url])
                event["stdout"].write(message)
            if code == -2:
                self.log.debug("Not showing title for %s, too similar", [url])
コード例 #3
0
    def time(self, event):
        """
        :help: Get the time for you or someone else
        :usage: [nickname]
        """
        target_user = event["user"]
        if event["args"]:
            target_user = event["server"].get_user(event["args_split"][0])

        location = target_user.get_setting("location", None)

        if not location == None:
            page = utils.http.request(API % location["timezone"], json=True)

            if page and page.data and not page.data.get("error", None):
                dt = utils.iso8601_parse(page.data["datetime"],
                    microseconds=True)
                human = utils.datetime_human(dt)
                event["stdout"].write("Time for %s: %s" % (target_user.nickname,
                    human))
            else:
                raise utils.EventsResultsError()
        else:
            event["stderr"].write("%s doesn't have a location set" %
                target_user.nickname)
コード例 #4
0
ファイル: title.py プロジェクト: jesopo/bitbot
    def channel_message(self, event):
        match = re.search(utils.http.REGEX_URL, event["message"])
        if match and event["channel"].get_setting("auto-title", False):
            is_ignored_f = short_url = self.exports.get_one("is-ignored",
                lambda _1, _2: False)
            if is_ignored_f(event["user"], "title"):
                return

            url = match.group(0)
            title = self._get_title(event["channel"], match.group(0))

            if title:
                message = title
                if event["channel"].get_setting("auto-title-first", False):
                    setting = "url-last-%s" % self._url_hash(url)
                    first_details = event["channel"].get_setting(setting, None)

                    if first_details:
                        first_nickname, first_timestamp, _ = first_details
                        timestamp_parsed = utils.iso8601_parse(first_timestamp)
                        timestamp_human = utils.datetime_human(timestamp_parsed)
                        message = "%s (first posted by %s at %s)" % (title,
                            first_nickname, timestamp_human)
                    else:
                        event["channel"].set_setting(setting,
                            [event["user"].nickname, utils.iso8601_format_now(),
                            url])


                self.events.on("send.stdout").call(target=event["channel"],
                    message=message, module_name="Title",
                    server=event["server"])
コード例 #5
0
ファイル: title.py プロジェクト: pnappa/bitbot
    def channel_message(self, event):
        match = re.search(utils.http.REGEX_URL, event["message"])
        if match and event["channel"].get_setting("auto-title", False):
            is_ignored_f = short_url = self.exports.get_one(
                "is-ignored", lambda _1, _2: False)
            if is_ignored_f(event["user"], "title"):
                return

            url = match.group(0)
            title = self._get_title(event["channel"], match.group(0))

            if title:
                message = title
                if event["channel"].get_setting("auto-title-first", False):
                    setting = "url-last-%s" % self._url_hash(url)
                    first_details = event["channel"].get_setting(setting, None)

                    if first_details:
                        first_nickname, first_timestamp, _ = first_details
                        timestamp_parsed = utils.iso8601_parse(first_timestamp)
                        timestamp_human = utils.datetime_human(
                            timestamp_parsed)
                        message = "%s (first posted by %s at %s)" % (
                            title, first_nickname, timestamp_human)
                    else:
                        event["channel"].set_setting(setting, [
                            event["user"].nickname,
                            utils.iso8601_format_now(), url
                        ])

                self.events.on("send.stdout").call(target=event["channel"],
                                                   message=message,
                                                   module_name="Title",
                                                   server=event["server"])
コード例 #6
0
ファイル: to.py プロジェクト: jesopo/bitbot
 def channel_message(self, event):
     messages = event["channel"].get_user_setting(event["user"].get_id(),
         "to", [])
     for nickname, message, timestamp in messages:
         timestamp_parsed = utils.iso8601_parse(timestamp)
         timestamp_human = utils.datetime_human(timestamp_parsed)
         event["channel"].send_message("%s: <%s> %s (at %s UTC)" % (
             event["user"].nickname, nickname, message, timestamp_human))
     if messages:
         event["channel"].del_user_setting(event["user"].get_id(), "to")
コード例 #7
0
 def channel_message(self, event):
     messages = event["channel"].get_user_setting(event["user"].get_id(),
         "to", [])
     for nickname, message, timestamp in messages:
         timestamp_parsed = utils.iso8601_parse(timestamp)
         timestamp_human = utils.datetime_human(timestamp_parsed)
         event["channel"].send_message("%s: <%s> %s (at %s UTC)" % (
             event["user"].nickname, nickname, message, timestamp_human))
     if messages:
         event["channel"].del_user_setting(event["user"].get_id(), "to")
コード例 #8
0
    def available(self):
        now = utils.datetime_utcnow()
        if os.path.exists(self._filename):
            with open(self._filename, "r") as lock_file:
                timestamp_str = lock_file.read().strip().split(" ", 1)[0]

            timestamp = utils.iso8601_parse(timestamp_str)

            if (now - timestamp).total_seconds() < EXPIRATION:
                return False

        return True
コード例 #9
0
ファイル: user_time.py プロジェクト: Mikaela/bitbot
    def time(self, event):
        target_user, location = self._find_setting(event)
        if not location == None:
            page = utils.http.request(API % location["timezone"], json=True)

            if page and page.data and not page.data.get("error", None):
                dt = utils.iso8601_parse(page.data["datetime"],
                                         microseconds=True)
                human = utils.datetime_human(dt)
                event["stdout"].write("Time for %s: %s" %
                                      (target_user.nickname, human))
            else:
                raise utils.EventsResultsError()
        else:
            event["stderr"].write(NOLOCATION % target_user.nickname)
コード例 #10
0
    def badges(self, event):
        """
        :help: Show all badges for you or a given user
        """
        user = event["user"]
        if event["args"]:
            user = event["server"].get_user(event["args_split"][0])

        now = self._round_up_day(self._now())
        badges = []
        for badge, date in self._get_badges(user).items():
            days_since = self._days_since(now, utils.iso8601_parse(date))
            badges.append("%s on day %s" % (badge, days_since))

        event["stdout"].write("Badges for %s: %s" %
                              (user.nickname, ", ".join(badges)))
コード例 #11
0
ファイル: badges.py プロジェクト: jesopo/bitbot
    def badges(self, event):
        """
        :help: Show all badges for you or a given user
        """
        user = event["user"]
        if event["args"]:
            user = event["server"].get_user(event["args_split"][0])

        now = self._round_up_day(self._now())
        badges = []
        for badge, date in self._get_badges(user).items():
            days_since = self._days_since(now, utils.iso8601_parse(date))
            badges.append("%s on day %s" % (
                badge, days_since))

        event["stdout"].write("Badges for %s: %s" % (
            user.nickname, ", ".join(badges)))
コード例 #12
0
    def badge(self, event):
        """
        :help: Show a badge
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        now = self._round_up_day(self._now())

        found_badge = self._find_badge(badges, badge)

        if found_badge:
            dt = utils.iso8601_parse(badges[found_badge])
            days_since = self._days_since(now, dt)
            event["stdout"].write("(%s) %s on day %s (%s)" %
                                  (event["user"].nickname, found_badge,
                                   days_since, self._date_str(dt)))
        else:
            event["stderr"].write("You have no '%s' badge" % badge)
コード例 #13
0
ファイル: badges.py プロジェクト: jesopo/bitbot
    def badge(self, event):
        """
        :help: Show a badge
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        now = self._round_up_day(self._now())

        found_badge = self._find_badge(badges, badge)

        if found_badge:
            dt = utils.iso8601_parse(badges[found_badge])
            days_since = self._days_since(now, dt)
            event["stdout"].write("(%s) %s on day %s (%s)" % (
                event["user"].nickname, found_badge, days_since,
                self._date_str(dt)))
        else:
            event["stderr"].write("You have no '%s' badge" % badge)
コード例 #14
0
    def video_details(self, video_id):
        snippet = self.get_video_page(video_id, "snippet")
        if snippet.data["items"]:
            snippet = snippet.data["items"][0]["snippet"]
            statistics = self.get_video_page(
                video_id, "statistics").data["items"][0]["statistics"]
            content = self.get_video_page(
                video_id, "contentDetails").data["items"][0]["contentDetails"]

            video_uploaded_at = utils.iso8601_parse(snippet["publishedAt"],
                                                    microseconds=True)
            video_uploaded_at = utils.date_human(video_uploaded_at)
            video_uploader = snippet["channelTitle"]
            video_title = utils.irc.bold(snippet["title"])
            video_views = self._number(statistics["viewCount"])
            video_likes = self._number(statistics.get("likeCount"))
            video_dislikes = self._number(statistics.get("dislikeCount"))
            video_duration = content["duration"]
            video_opinions = ""
            if video_likes and video_dislikes:
                likes = utils.irc.color("%s%s" % (video_likes, ARROW_UP),
                                        utils.consts.GREEN)
                dislikes = utils.irc.color(
                    "%s%s" % (ARROW_DOWN, video_dislikes), utils.consts.RED)
                video_opinions = " (%s%s)" % (likes, dislikes)

            match = re.match(REGEX_ISO8601, video_duration)
            video_duration = ""
            video_duration += "%s:" % match.group(1)[:-1].zfill(
                2) if match.group(1) else ""
            video_duration += "%s:" % match.group(2)[:-1].zfill(
                2) if match.group(2) else "00:"
            video_duration += "%s" % match.group(3)[:-1].zfill(
                2) if match.group(3) else "00"
            url = URL_YOUTUBESHORT % video_id
            return "%s (%s) uploaded by %s on %s, %s views%s" % (
                video_title, video_duration, video_uploader, video_uploaded_at,
                video_views, video_opinions), url
        return None