Example #1
0
    def __init__(self, reddit: praw.Reddit, subreddit: str) -> None:
        """initialize"""

        def register_signals() -> None:
            """registers signals"""
            signal.signal(signal.SIGTERM, self.exit)

        self.logger: logging.Logger = slack_logger.initialize(
            app_name = "user_pinger",
            stream_loglevel = "INFO",
            slack_loglevel = "CRITICAL",
        )
        self.logger.setLevel("INFO")
        self.logger.debug("Initializing")
        self.reddit: praw.Reddit = reddit
        self.primary_subreddit: praw.models.Subreddit = self.reddit.subreddit(
            subreddit.split("+")[0]
        )
        self.subreddits: praw.models.Subreddit = self.reddit.subreddit(
            subreddit
        )
        self.config: ConfigParser = self._get_wiki_page(["config"])
        self.parsed: Deque[str] = self.load()
        self.start_time: float = time()
        register_signals()
        self.logger.info("Successfully initialized")
Example #2
0
    def __init__(self, reddit: praw.Reddit, subreddit: str) -> None:
        """initialize rentseeker"""
        def start_time() -> int:
            """returns start time of function"""
            from calendar import timegm
            from datetime import datetime
            return int(timegm(datetime.utcnow().utctimetuple()))

        def register_signals() -> None:
            """registers signals for systemd"""
            signal.signal(signal.SIGTERM, self.exit)

        self.logger: logging.Logger = slack_logger.initialize(
            app_name="rent_seeker",
            stream_loglevel="INFO",
            slack_loglevel="CRITICAL",
        )
        self.reddit: praw.Reddit = reddit
        self.subreddit: praw.models.Subreddit = self.reddit.subreddit(
            subreddit)
        self.tracked: Deque[Holder] = self.load()
        self.init_time: int = start_time()
        register_signals()
        self.logger.debug("Start time is \"%s\"", self.init_time)
        self.logger.info("Successfully initialized")
Example #3
0
    def __init__(self, reddit: praw.Reddit, subreddits: List[str]) -> None:
        self.logger = slack_logger.initialize("goolsbee-bot")
        self.logger.debug("Intializing")

        self.logger.debug("Logging into reddit")
        self.reddit: praw.Reddit = reddit
        self.logger.debug("Logged into reddit")

        self.logger.debug("Validating subreddits")
        self.subreddits: List[praw.models.Subreddit] = []
        for subreddit in subreddits:
            try:
                self.subreddits.append(self.reddit.subreddit(subreddit))
            except praw.exceptions.APIException:
                self.logger.warning("\"%s\" is an invalid subreddit, skipping",
                                    subreddit)
        self.logger.debug("Validated subreddits")

        with open("replied_comments.txt") as replied:
            self.commented: List[str] = replied.read().split()

        self.logger.debug("Opening responses")
        import pkg_resources
        data: bytes = pkg_resources.resource_string(__name__,
                                                    "data/responses.json")
        res_list: List[Dict[str, Any]] = json.loads(data)
        self.responses: List[Response] = [
            Response(item["triggers"], item["table"]) for item in res_list
        ]
        self.logger.debug("Opened responses")
        self.logger.info("Intialized successfully")
        return
Example #4
0
 def __init__(self, reddit, subreddit):
     self.reddit = reddit
     self.subreddit = reddit.subreddit(subreddit)
     self.logger = slack_logger.initialize(
         app_name='backup_bot',
         stream_loglevel='INFO',
         slack_loglevel='CRITICAL',
     )
     self.logger.info('Backup bot is online')
Example #5
0
 def __init__(self, reddit: praw.Reddit, subreddit: str) -> None:
     """Initial setup"""
     self.logger: logging.Logger = slack_logger.initialize(
         app_name="flairbot",
         stream_loglevel="INFO",
         slack_loglevel="CRITICAL",
     )
     self.reddit: praw.Reddit = reddit
     self.subreddit: praw.models.Subreddit = self.reddit.subreddit(
         subreddit)
     self.config: ConfigParser = self.get_wiki_page()
     self.logger.info("Initalized successfully")
     return
Example #6
0
    def __init__(self, reddit: praw.Reddit) -> None:
        """initialize"""

        def register_signals() -> None:
            """registers signals"""
            signal.signal(signal.SIGTERM, self.exit)

        self.logger: logging.Logger = slack_logger.initialize("ideology_bot")
        self.logger.debug("Initializing")
        self.reddit: praw.Reddit = reddit
        self.ideologies: Dict[str, Ideology] = self._read_ideologies()
        register_signals()
        self.logger.info("Successfully initialized")
Example #7
0
    def __init__(self, reddit: praw.Reddit, subreddit: str) -> None:
        """initialize"""
        def register_signals() -> None:
            """registers signals"""
            signal.signal(signal.SIGTERM, self.exit)

        self.logger: logging.Logger = slack_logger.initialize("user_pinger")
        self.logger.debug("Initializing")
        self.reddit: praw.Reddit = reddit
        self.subreddit: praw.models.Subreddit = self.reddit.subreddit(
            subreddit)
        self.config: ConfigParser = self._get_wiki_page(["config"])
        self.parsed: Deque[str] = self.load()
        register_signals()
        self.logger.info("Successfully initialized")
    def __init__(self, reddit, subreddit, amf_url, dt_title, dt_author):
        """initialize DonationSticky"""
        self.reddit = reddit
        self.subreddit = self.reddit.subreddit(subreddit)
        self.amf_url = amf_url
        self.logger = slack_logger.initialize(
            app_name = "donation_sticky",
            slack_loglevel = "CRITICAL",
            stream_loglevel = "INFO"
        )
        self.tracked = self.load()
        self.dt_title = dt_title
        self.dt_author = dt_author

        signal.signal(signal.SIGTERM, self.exit) # for systemd
        self.logger.info("Successfully initialized")
    def __init__(self, reddit: praw.Reddit, subreddit: str) -> None:
        def get_config() -> ConfigParser:
            """grabs config"""
            parser: ConfigParser = ConfigParser(allow_no_value=True,
                                                delimiters=('='))
            self.logger.debug("Grabbing config")
            while True:
                try:
                    config_string = self.subreddit.wiki["dt/config"].content_md
                    break
                except:
                    self.logger.error(
                        "Unable to retrieve config, wait 1 minute & retry")
                    from time import sleep
                    sleep(60)
            if config_string:
                self.logger.debug("Config grabbed")
                parser.read_string(config_string)
            else:
                self.logger.error("No config found")
            return parser

        def latest() -> Optional[praw.models.Submission]:
            """return latest discussion thread"""
            self.logger.debug("Fetching latest discussion thread")
            for submission in self.subreddit.search(self.config.get(
                    "config", "title", fallback="Discussion Thread"),
                                                    sort="new"):
                if submission.author == self.reddit.user.me():
                    self.logger.debug("Latest discussion thread returned")
                    return submission
            self.logger.warning(
                "Could not find latest discussion thread. Returning None")
            return None

        def make_scheduler() -> Scheduler:
            """makes scheduler object"""
            self.logger.debug("Making scheduler")
            scheduler: Scheduler = Scheduler()
            times: List[str] = []

            try:
                times = self.config.options("times")
            except NoSectionError:
                self.logger.warning(
                    "No times specified in the config, setting to 1:00")
                times = ["1:00"]

            try:
                days: List[str] = self.config.options("days")
            except NoSectionError:
                self.logger.warning(
                    "No days are specified in the config, setting to all days")
                for time in times:
                    try:
                        scheduler.every().day.at(time).do(self.post)
                    except ValueError:
                        self.logger.debug(
                            "\"%s\" is not a valid time, skipping")
            else:
                for day in days:
                    self.logger.debug("Adding day \"%s\" to scheduler", day)
                    for time in times:
                        try:
                            getattr(scheduler.every(),
                                    day).at(time).do(self.post)
                        except AttributeError:
                            self.logger.error(
                                "\"%s\" is not an valid day, skipping", day)
                        except ValueError:
                            self.logger.warning(
                                "\"%s\" is not a valid time, skipping", time)

            self.logger.debug("Scheduler made")
            return scheduler

        self.logger: logging.Logger = slack_logger.initialize(
            app_name="discussion_thread",
            stream_loglevel="INFO",
            slack_loglevel="CRITICAL",
        )
        self.reddit: praw.Reddit = reddit
        self.subreddit: praw.models.Subreddit = self.reddit.subreddit(
            subreddit)

        self.config: ConfigParser = get_config()
        self.submission: Optional[praw.reddit.models.Submission] = latest()
        self.schedule: Scheduler = make_scheduler()
        self.logger.info("discussion-thread intialized successfully")
        return