Advertisement
Guest User

async PRAW with aiogram issues

a guest
Sep 20th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.02 KB | None | 0 0
  1. import asyncpraw
  2. import datetime
  3. import logging
  4. from aiogram import Bot, Dispatcher, executor, types, exceptions
  5. import timeago
  6.  
  7.  
  8. API_TOKEN = 'Bot API token'
  9.  
  10.  
  11. logging.basicConfig(level=logging.DEBUG, format="%(asctime)s:%(levelname)s:%(message)s",
  12.                     handlers=[logging.StreamHandler()])
  13.  
  14. bot = Bot(token=API_TOKEN)
  15. dp = Dispatcher(bot)
  16. reddit = asyncpraw.Reddit(client_id=client_id, client_secret=client_secret, user_agent=user_agent)
  17.  
  18.  
  19. def time_ago(timestamp):
  20.     return timeago.format(datetime.datetime.fromtimestamp(timestamp), datetime.datetime.now())
  21.  
  22.  
  23. def flair_check(post, flair_name):
  24.     try:
  25.         post_flair = post.link_flair_text.lower()
  26.     except AttributeError:
  27.         post_flair = None
  28.     if post_flair == flair_name:
  29.         return True
  30.     else:
  31.         return False
  32.  
  33.  
  34. async def check_title(message, search_terms, post):
  35.     for search_term in search_terms:
  36.         if search_term in post.title.lower():
  37.             await message.reply(time_ago(post.created_utc) +
  38.                                 "\n" + post.title + "\n" +
  39.                                 "https://reddit.com" + post.permalink)
  40.  
  41.  
  42. async def reddit_func(message):
  43.     search_query = message.text.split(',')[1].strip().lower()
  44.     search_terms = search_query.split()
  45.     subred_name = message.text.split(',')[2].strip().lower()
  46.     try:
  47.         flair_name = message.text.split(',')[3].strip().lower()
  48.     except IndexError:
  49.         flair_name = ''
  50.     print(search_query, search_terms, subred_name, flair_name)
  51.     search_flair = None
  52.     if flair_name != '':
  53.         search_flair = flair_name
  54.     await message.reply('You have asked for the terms: ' + search_query + '\n' +
  55.                         'on the subreddit: ' + subred_name + '\n' +
  56.                         'with flair: ' + ('None' if flair_name == '' else flair_name))
  57.     subreddit = await reddit.subreddit(subred_name)
  58.     while True:
  59.         try:
  60.             async for post in subreddit.stream.submissions(skip_existing=False):
  61.                 if flair_name == '':
  62.                     await check_title(message, search_terms, post)
  63.                 else:
  64.                     if flair_check(post, flair_name):
  65.                         await check_title(message, search_terms, post)
  66.  
  67.         except exceptions as e:
  68.             await message.reply(str(e))
  69.             continue
  70.  
  71.  
  72. @dp.message_handler(commands=['start', 'help'])
  73. async def send_welcome(message: types.Message):
  74.     await message.reply('Hello, this will pr)ompt you in case new post matching search terms on a given subreddit.\n'
  75.                         'Send:\n'
  76.                         'Check<comma>search terms (space separated)<comma>subreddit name<comma>flair filter(optional)\n'
  77.                         '\nFor example:\ncheck, RAM,hardwareswap,selling')
  78.  
  79.  
  80. @dp.message_handler(text_startswith=['check', 'Check', 'CHECK'])
  81. async def check_msg(message: types.Message):
  82.     await reddit_func(message)
  83.  
  84.  
  85. if __name__ == '__main__':
  86.     executor.start_polling(dp, skip_updates=True)
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement