2017-08-30 2 views
0

Donc j'écris bot discord sur python, et je veux faire une tâche en arrière-plan qui permettrait de vérifier subreddit pour de nouvelles soumissions et le poster s'il y a un certain flair. Mais quand j'essaie de démarrer mon bot, qui fonctionnait parfaitement avant, il attend juste quelque chose et ne démarre pas. Que devrais-je faire?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) 

Répondre

0

je suis tombé sur ce problème et depuis subreddit.stream.submissions() bloque la boucle. Donc, je l'ai résolu en utilisant une boucle infinie et subreddit.stream.submissions(pause_after=0) de sorte qu'il renvoie None s'il n'y a pas de nouveaux messages puis attend 60 secondes avant de vérifier à nouveau.

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>