2017-08-30 3 views
0

Also ich schreibe Dissonanz Bot auf Python, und ich möchte Hintergrund-Aufgabe, die subreddit für neue Beiträge überprüfen würde und posten, wenn es bestimmte Flair ist. Aber wenn ich versuche, meinen Bot zu starten, der vorher perfekt funktioniert hat, warte ich einfach auf etwas und starte nicht. Was soll ich machen?Discordpy, praw, Blockierung

async def reddit_task(): 
     await bot.wait_until_ready() 
     start_time = time.time() 
     reddit = praw.Reddit(different keys) 
     subreddit = reddit.subreddit('certain subreddit') 
     for submission in subreddit.stream.submissions(): 
      if submission.created_utc > start_time: 
       if submission.link_flair_text == 'certain flair': 
        em = discord.Embed(title=submission.title+'\n'+submission.shortlink) 
        if len(submission.preview) > 1: 
          em.set_image(url=submission.preview['images'][0]['source']['url']) 
        await bot.send_message(discord.Object(id='my channel id'), embed=em) 

      else: 
       pass 

if __name__ == "__main__": 
    for extension in startup_extensions: 
     try: 
      bot.load_extension(extension) 
     except Exception as e: 
      exc = '{}: {}'.format(type(e).__name__, e) 
      print('Failed to load extension {}\n{}'.format(extension, exc)) 
    bot.loop.create_task(reddit_task()) 
    bot.run(config.bot_beta_token) 

Antwort

0

ich in dieses Problem lief so gut, da subreddit.stream.submissions() ist die for-Schleife zu blockieren. Also löste ich es mit einer Endlosschleife und subreddit.stream.submissions(pause_after=0), so dass es None zurückgibt, wenn es keine neuen Posts gibt, dann wartet 60 Sekunden, bevor es erneut überprüft.

async def reddit_task(): 
    await client.wait_until_ready() 
    start_time = time.time() 

    reddit = praw.Reddit("<client_stuff>") 
    subreddit = reddit.subreddit("<some_subreddit>") 
    submissions = subreddit.stream.submissions(pause_after=0) 

    while not client.is_closed: 
     submission = next(submissions) 

     if submission is None: 
      # Wait 60 seconds for a new submission 
      await asyncio.sleep(60) 

     elif submission.created_utc > start_time: 
      <do_stuff_with_submission>