2017-08-30 8 views
0

私はPython上でdiscord botを書いています。新しい投稿をサブレディットでチェックし、特定の才能があればポストするバックグラウンドタスクを作りたいと思います。しかし、私が前に完璧に働いていたボットを起動しようとしているとき、何かを待って起動しません。私は何をすべきか?discordpy、praw、blocking

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) 

答えて

0

私はsubreddit.stream.submissions()がループのためにブロックしていることからも、この問題に遭遇しました。だから私は無限ループとsubreddit.stream.submissions(pause_after=0)を使用してそれを解決したので、新しい投稿がない場合はNoneを返し、再度チェックする前に60秒待っています。

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>