コード例 #1
0
ファイル: automoderator.py プロジェクト: j4gold/reddit
    def perform_actions(self, item, data):
        """Execute all the rule's actions against the item."""
        for key, target in self.targets.iteritems():
            target_item = self.get_target_item(item, data, key)
            target.perform_actions(target_item, data)

        if self.comment:
            comment = self.build_message(self.comment, item, data, disclaimer=True)

            # TODO: shouldn't have to do all this manually
            if isinstance(item, Comment):
                link = data["link"]
                parent_comment = item
            else:
                link = item
                parent_comment = None
            new_comment, inbox_rel = Comment._new(
                ACCOUNT, link, parent_comment, comment, None)
            new_comment.distinguished = "yes"
            new_comment._commit()
            queries.queue_vote(ACCOUNT, new_comment, True, None)
            queries.new_comment(new_comment, inbox_rel)

            g.stats.simple_event("automoderator.comment")

        if self.modmail:
            message = self.build_message(self.modmail, item, data, permalink=True)
            subject = replace_placeholders(
                self.modmail_subject, data, self.matches)
            subject = subject[:100]

            new_message, inbox_rel = Message._new(ACCOUNT, data["subreddit"],
                subject, message, None)
            new_message.distinguished = "yes"
            new_message._commit()
            queries.new_message(new_message, inbox_rel)

            g.stats.simple_event("automoderator.modmail")

        if self.message and not data["author"]._deleted:
            message = self.build_message(self.message, item, data,
                disclaimer=True, permalink=True)
            subject = replace_placeholders(
                self.message_subject, data, self.matches)
            subject = subject[:100]

            new_message, inbox_rel = Message._new(ACCOUNT, data["author"],
                subject, message, None)
            queries.new_message(new_message, inbox_rel)

            g.stats.simple_event("automoderator.message")

        PerformedRulesByThing.mark_performed(item, self)
コード例 #2
0
ファイル: automoderator.py プロジェクト: nickdevereaux/reddit
    def apply_to_item(self, item):
        # fetch supplemental data to use throughout
        data = {}
        data["item"] = item
        data["subreddit"] = item.subreddit_slow

        author = item.author_slow
        if not author._deleted:
            data["author"] = author
        else:
            data["author"] = DeletedUser()

        if isinstance(item, Comment):
            data["link"] = Link._byID(item.link_id, data=True)
            link_author = data["link"].author_slow
            if not link_author._deleted:
                data["link_author"] = link_author
            else:
                data["link_author"] = DeletedUser()
            data["is_submitter"] = author == link_author

        # get the list of rule IDs that have already been performed
        already_performed = PerformedRulesByThing.get_already_performed(item)

        # stop checking removal rules as soon as one triggers
        for rule in self.removal_rules:
            if rule.is_unrepeatable and rule.unique_id in already_performed:
                continue

            if rule.check_item(item, data):
                rule.perform_actions(item, data)
                break

        # check all other rules, regardless of how many trigger
        for rule in self.nonremoval_rules:
            if rule.is_unrepeatable and rule.unique_id in already_performed:
                continue

            if rule.check_item(item, data):
                rule.perform_actions(item, data)