added comments in bot
This commit is contained in:
parent
eab129fce8
commit
6fae531c1c
@ -179,7 +179,7 @@ def send_id(message):
|
||||
bot.reply_to(message, answer)
|
||||
|
||||
|
||||
#function that sends telegram status(running or offline) as message from telegram bot to user
|
||||
#function that can be used to ensure that the bot is online and running
|
||||
@bot.message_handler(commands=['status', 'Status'])
|
||||
def send_status(message):
|
||||
|
||||
@ -276,28 +276,26 @@ def send_all_news(message):
|
||||
"""
|
||||
|
||||
user_id = int(message.from_user.id)
|
||||
keywords = api_handler.get_user_keywords(user_id)
|
||||
keywords = api_handler.get_user_keywords(user_id) # get keywords of user
|
||||
|
||||
if keywords == None:
|
||||
if keywords == None: # true if user is not registered
|
||||
bot.send_message(chat_id=user_id, text='This didn\'t work. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info')
|
||||
return
|
||||
|
||||
if not keywords:
|
||||
if not keywords: # true if user is registered but does not have any keywords
|
||||
bot.send_message(chat_id=user_id, text='You have no keywords. Please add some keywords with /news')
|
||||
return
|
||||
|
||||
keywords_search = ' OR '.join(keywords)
|
||||
print(keywords_search)
|
||||
now = dt.datetime.now().date()
|
||||
from_date = now - dt.timedelta(days=7)
|
||||
keywords_search = ' OR '.join(keywords) # concat all keywords with OR -> NewsAPI can understand OR, AND, NOT etc.
|
||||
now = dt.datetime.now().date() # get current date
|
||||
from_date = now - dt.timedelta(days=7) # get date 7 days ago -> limit age of news to 7 days old max
|
||||
from_date_formatted = dt.datetime.strftime(from_date, '%Y-%m-%d')
|
||||
print(from_date_formatted)
|
||||
news_list = news.get_all_news_by_keyword(keywords_search, from_date_formatted)["articles"]
|
||||
news_list = news.get_all_news_by_keyword(keywords_search, from_date_formatted)["articles"] # array of JSON article objects
|
||||
|
||||
if news_list:
|
||||
if news_list: # true if news_list is not empty
|
||||
for article in news_list:
|
||||
formatted_article = news.format_article(article)
|
||||
bot.send_message(chat_id=user_id, text=formatted_article, parse_mode="MARKDOWN")
|
||||
bot.send_message(chat_id=user_id, text=formatted_article, parse_mode="MARKDOWN") # Markdown allows to write bold text with * etc.
|
||||
else:
|
||||
bot.send_message(chat_id=user_id, text='No news found for your keywords.')
|
||||
|
||||
@ -314,27 +312,27 @@ def send_news(message):
|
||||
:rtype: none
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
keywords = api_handler.get_user_keywords(user_id)
|
||||
keywords = api_handler.get_user_keywords(user_id) # get keywords of user
|
||||
|
||||
if keywords == None:
|
||||
if keywords == None: # true if user is not registered
|
||||
bot.send_message(chat_id=user_id, text='This didn\'t work. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info')
|
||||
return
|
||||
|
||||
if not keywords:
|
||||
if not keywords: # true if user is registered but does not have any keywords
|
||||
bot.send_message(chat_id=user_id, text='You have no keywords. Please add some keywords with /addkeyword')
|
||||
return
|
||||
|
||||
if keywords:
|
||||
for keyword in keywords:
|
||||
top_news = news.get_top_news_by_keyword(keyword)["articles"]
|
||||
if top_news == None:
|
||||
if top_news == None: # true if request to NewsAPI failed
|
||||
bot.send_message(chat_id=user_id, text='News Server did not respond correctly. Try again later.')
|
||||
return
|
||||
if not top_news:
|
||||
if not top_news: # true if no news found for keyword (empty list)
|
||||
bot.send_message(chat_id=user_id, text=f'No news found for keyword: *{keyword}*', parse_mode="MARKDOWN")
|
||||
return
|
||||
|
||||
formatted_article = news.format_article(top_news[0])
|
||||
formatted_article = news.format_article(top_news[0]) # only format and send most popular news
|
||||
bot.send_message(chat_id=user_id, text=f"_keyword: {keyword}_\n\n" + formatted_article, parse_mode="MARKDOWN")
|
||||
|
||||
|
||||
@ -350,15 +348,14 @@ def add_keyword(message):
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
bot.send_message(chat_id=user_id, text='Type keyword to add:')
|
||||
bot.register_next_step_handler(message, store_keyword)
|
||||
bot.register_next_step_handler(message, store_keyword) # wait for user to send keyword, then call store_keyword function
|
||||
|
||||
def store_keyword(message):
|
||||
user_id = int(message.from_user.id)
|
||||
print(str(user_id))
|
||||
keyword = str(message.text).lower()
|
||||
status = api_handler.set_keyword(user_id, keyword)
|
||||
if status == 200:
|
||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" added.')
|
||||
keyword = str(message.text).lower() # lower to ensure Bitcoin and bitcoin is not stored as individual keywords
|
||||
status = api_handler.set_keyword(user_id, keyword) # set keyword in database
|
||||
if status == 200: # statuscode 200 means keyword was added successfully without errors
|
||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" added.') # duplicate keywords are denied by Database, so no need to check for that here
|
||||
else:
|
||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" could not be stored. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info (statuscode {status})')
|
||||
|
||||
@ -375,14 +372,14 @@ def remove_keyword(message):
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
bot.send_message(chat_id=user_id, text='Type keyword to remove:')
|
||||
bot.register_next_step_handler(message, remove_keyword_step)
|
||||
bot.register_next_step_handler(message, remove_keyword_step) # wait for user to send keyword to remove, then call remove_keyword_step function
|
||||
|
||||
def remove_keyword_step(message):
|
||||
user_id = int(message.from_user.id)
|
||||
keyword = str(message.text).lower()
|
||||
status = api_handler.delete_keyword(user_id, keyword)
|
||||
if status == 200:
|
||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" removed.')
|
||||
if status == 200: # statuscode 200 means keyword was removed successfully without errors
|
||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" removed.') # checking if keyword to remove is in database are handled in database, not here
|
||||
else:
|
||||
bot.send_message(chat_id=user_id, text=f'Failed deleting keyword "{keyword}". (statuscode {status})')
|
||||
|
||||
@ -398,19 +395,19 @@ def send_keywords(message):
|
||||
:rtype: none
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
keywords = api_handler.get_user_keywords(user_id)
|
||||
if keywords == None:
|
||||
keywords = api_handler.get_user_keywords(user_id) # get keywords of user
|
||||
if keywords == None: # true if user is not registered
|
||||
bot.send_message(chat_id=user_id, text='This didn\'t work. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info')
|
||||
return
|
||||
if not keywords:
|
||||
if not keywords: # true if user is registered but does not have any keywords
|
||||
bot.send_message(chat_id=user_id, text='No keywords set for this account. Add keywords by using /addkeyword')
|
||||
return
|
||||
else:
|
||||
else: # send keyword list
|
||||
keywords_str = ', '.join(keywords)
|
||||
bot.send_message(chat_id=user_id, text=f'Your keywords are: _{keywords_str}_', parse_mode="MARKDOWN")
|
||||
|
||||
|
||||
@bot.message_handler(commands=['portfolio', 'Portfolio']) #tbd
|
||||
@bot.message_handler(commands=['portfolio', 'Portfolio'])
|
||||
def send_portfolio(message):
|
||||
""" Send portfolio of user
|
||||
:type message: message object bot
|
||||
@ -421,23 +418,23 @@ def send_portfolio(message):
|
||||
:rtype: none
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
portfolio = api_handler.get_user_portfolio(user_id)
|
||||
if portfolio == None:
|
||||
portfolio = api_handler.get_user_portfolio(user_id) # get portfolio of user as json
|
||||
if portfolio == None: # true if user is not registered
|
||||
bot.send_message(chat_id=user_id, text='This didn\'t work. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info')
|
||||
return
|
||||
if not portfolio:
|
||||
if not portfolio: # true if user is registered but does not have any stocks in portfolio
|
||||
bot.send_message(chat_id=user_id, text='You do not have any stocks in your portfolio.')
|
||||
return
|
||||
else:
|
||||
else: # send portfolio
|
||||
for stock in portfolio:
|
||||
comment = str(stock["comment"])
|
||||
count = "{:.2f}".format(float(stock["count"]))
|
||||
comment = str(stock["comment"]) # comment may be written name of stock, comment is made by user when adding an stock to portfolio
|
||||
count = "{:.2f}".format(float(stock["count"])) # round count to 2 decimal places
|
||||
isin = str(stock["isin"])
|
||||
worth = "{:.2f}".format(float(stock["current_price"]) * float(stock["count"]))
|
||||
bot.send_message(chat_id=user_id, text=f'*{comment}*\n_{isin}_\namount: {count}\nworth: ${worth}', parse_mode="MARKDOWN")
|
||||
worth = "{:.2f}".format(float(stock["current_price"]) * float(stock["count"])) # round current_price to 2 decimal places
|
||||
bot.send_message(chat_id=user_id, text=f'*{comment}*\n_{isin}_\namount: {count}\nworth: ${worth}', parse_mode="MARKDOWN") # formatted message in markdown
|
||||
|
||||
|
||||
@bot.message_handler(commands=['newtransaction', 'Newtransaction']) #tbd not working rn
|
||||
@bot.message_handler(commands=['newtransaction', 'Newtransaction']) #tbd not working rn may be deleted in future
|
||||
def set_new_transaction(message):
|
||||
""" Set new transaction for user
|
||||
:type message: message object bot
|
||||
@ -474,7 +471,7 @@ def set_new_transaction_step(message):
|
||||
bot.send_message(chat_id=user_id, text=f'Failed adding transaction. (statuscode {status})')
|
||||
|
||||
|
||||
@bot.message_handler(commands=['interval', 'Interval']) #tbd
|
||||
@bot.message_handler(commands=['interval', 'Interval'])
|
||||
def send_interval(message):
|
||||
""" send interval for user
|
||||
:type message: message object bot
|
||||
@ -485,20 +482,20 @@ def send_interval(message):
|
||||
:rtype: none
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
user_data = api_handler.get_user(user_id)
|
||||
if user_data == None:
|
||||
user_data = api_handler.get_user(user_id) # get cron interval of user (stored in user data)
|
||||
if user_data == None: # true if user is not registered in DB
|
||||
bot.send_message(chat_id=user_id, text='This didn\'t work. Make sure to connect your telegram id (/id) on https://gruppe1.testsites.info and set an interval with /setinterval')
|
||||
return
|
||||
else:
|
||||
interval = str(user_data['cron'])
|
||||
if interval == 'None':
|
||||
else: # send interval
|
||||
interval = str(user_data['cron']) # get cron from user data
|
||||
if interval == 'None': # true if user has no cron set
|
||||
bot.send_message(chat_id=user_id, text='You do not have an interval set. Set one with /setinterval')
|
||||
return
|
||||
formatted_interval = str(interval).replace(' ', '_')
|
||||
formatted_interval = str(interval).replace(' ', '_') # replace spaces with underscores to add to url of crontab.guru
|
||||
bot.send_message(chat_id=user_id, text=f'Your update interval: {interval} (https://crontab.guru/#{formatted_interval})')
|
||||
|
||||
|
||||
@bot.message_handler(commands=['setinterval', 'Setinterval']) #tbd
|
||||
@bot.message_handler(commands=['setinterval', 'Setinterval'])
|
||||
def set_new_interval(message):
|
||||
""" Set new interval for user
|
||||
:type message: message object bot
|
||||
@ -510,19 +507,19 @@ def set_new_interval(message):
|
||||
"""
|
||||
user_id = int(message.from_user.id)
|
||||
bot.send_message(chat_id=user_id, text='Type interval in cron format:\n(https://crontab.guru/)')
|
||||
bot.register_next_step_handler(message, set_new_interval_step)
|
||||
bot.register_next_step_handler(message, set_new_interval_step) # executes function when user sends message
|
||||
|
||||
def set_new_interval_step(message):
|
||||
|
||||
user_id = int(message.from_user.id)
|
||||
interval = str(message.text)
|
||||
status = api_handler.set_cron_interval(user_id, interval)
|
||||
status = api_handler.set_cron_interval(user_id, interval) # send cron to db
|
||||
|
||||
if status == 200:
|
||||
bot.send_message(chat_id=user_id, text='Interval succesfully set.')
|
||||
return
|
||||
|
||||
if status == -1: # only -1 when interval is invalid
|
||||
if status == -1: # only -1 when interval is invalid, not a real statuscode, but used from api_handler.set_cron_interval to tell the crontab has the wrong format
|
||||
bot.send_message(chat_id=user_id, text='Invalid interval format. Try again with\n /setinterval.')
|
||||
return
|
||||
else:
|
||||
|
Loading…
Reference in New Issue
Block a user