예제 #1
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])
예제 #2
0
    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)
예제 #3
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"])
예제 #4
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"])
예제 #5
0
    def add_badge(self, event):
        """
        :help: Add a badge with today's date
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        for badge_name in badges.keys():
            if badge_name.lower() == badge_lower:
                raise utils.EventError("You already have a '%s' badge" % badge)

        badges[badge] = utils.iso8601_format_now()
        self._set_badges(event["user"], badges)
        event["stdout"].write("Added '%s' badge" % badge)
예제 #6
0
파일: badges.py 프로젝트: jesopo/bitbot
    def add_badge(self, event):
        """
        :help: Add a badge with today's date
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        for badge_name in badges.keys():
            if badge_name.lower() == badge_lower:
                raise utils.EventError("You already have a '%s' badge" % badge)

        badges[badge] = utils.iso8601_format_now()
        self._set_badges(event["user"], badges)
        event["stdout"].write("Added '%s' badge" % badge)
예제 #7
0
    def reset_badge(self, event):
        """
        :help: Reset a badge to today's date
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        found_badge = self._find_badge(badges, badge)

        if found_badge:
            badges[found_badge] = utils.iso8601_format_now()
            self._set_badges(event["user"], badges)
            event["stdout"].write("Reset badge '%s'" % found_badge)
        else:
            event["stderr"].write("You have no '%s' badge" % badge)
예제 #8
0
파일: badges.py 프로젝트: jesopo/bitbot
    def reset_badge(self, event):
        """
        :help: Reset a badge to today's date
        :usage: <badge>
        """
        badge = event["args"]
        badge_lower = badge.lower()
        badges = self._get_badges(event["user"])

        found_badge = self._find_badge(badges, badge)

        if found_badge:
            badges[found_badge] = utils.iso8601_format_now()
            self._set_badges(event["user"], badges)
            event["stdout"].write("Reset badge '%s'" % found_badge)
        else:
            event["stderr"].write("You have no '%s' badge" % badge)
예제 #9
0
파일: to.py 프로젝트: jesopo/bitbot
    def to(self, event):
        """
        :help: Relay a message to a user the next time they talk in this
            channel
        :usage: <nickname> <message>
        """
        target_user = event["server"].get_user(event["args_split"][0])
        messages = event["target"].get_user_setting(target_user.get_id(),
            "to", [])

        if len(messages) == 5:
            raise utils.EventError("Users can only have 5 messages stored")

        messages.append([event["user"].nickname,
            " ".join(event["args_split"][1:]),
            utils.iso8601_format_now()])
        event["target"].set_user_setting(target_user.get_id(),
            "to", messages)
        event["stdout"].write("Message saved")
예제 #10
0
파일: to.py 프로젝트: notagoat/bitbot
    def to(self, event):
        """
        :help: Relay a message to a user the next time they talk in this
            channel
        :usage: <nickname> <message>
        """
        target_user = event["server"].get_user(event["args_split"][0])
        messages = event["target"].get_user_setting(target_user.get_id(), "to",
                                                    [])

        if len(messages) == 5:
            raise utils.EventError("Users can only have 5 messages stored")

        messages.append([
            event["user"].nickname, " ".join(event["args_split"][1:]),
            utils.iso8601_format_now()
        ])
        event["target"].set_user_setting(target_user.get_id(), "to", messages)
        event["stdout"].write("Message saved")
예제 #11
0
 def _make_activity(self, content):
     timestamp = utils.iso8601_format_now()
     activity_id = self._random_id()
     self.bot.set_setting("ap-activity-%s" % activity_id,
                          [content, timestamp])
     return activity_id