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)
|
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'])
|
@bot.message_handler(commands=['status', 'Status'])
|
||||||
def send_status(message):
|
def send_status(message):
|
||||||
|
|
||||||
@ -276,28 +276,26 @@ def send_all_news(message):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
user_id = int(message.from_user.id)
|
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')
|
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
|
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')
|
bot.send_message(chat_id=user_id, text='You have no keywords. Please add some keywords with /news')
|
||||||
return
|
return
|
||||||
|
|
||||||
keywords_search = ' OR '.join(keywords)
|
keywords_search = ' OR '.join(keywords) # concat all keywords with OR -> NewsAPI can understand OR, AND, NOT etc.
|
||||||
print(keywords_search)
|
now = dt.datetime.now().date() # get current date
|
||||||
now = dt.datetime.now().date()
|
from_date = now - dt.timedelta(days=7) # get date 7 days ago -> limit age of news to 7 days old max
|
||||||
from_date = now - dt.timedelta(days=7)
|
|
||||||
from_date_formatted = dt.datetime.strftime(from_date, '%Y-%m-%d')
|
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"] # array of JSON article objects
|
||||||
news_list = news.get_all_news_by_keyword(keywords_search, from_date_formatted)["articles"]
|
|
||||||
|
|
||||||
if news_list:
|
if news_list: # true if news_list is not empty
|
||||||
for article in news_list:
|
for article in news_list:
|
||||||
formatted_article = news.format_article(article)
|
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:
|
else:
|
||||||
bot.send_message(chat_id=user_id, text='No news found for your keywords.')
|
bot.send_message(chat_id=user_id, text='No news found for your keywords.')
|
||||||
|
|
||||||
@ -314,27 +312,27 @@ def send_news(message):
|
|||||||
:rtype: none
|
:rtype: none
|
||||||
"""
|
"""
|
||||||
user_id = int(message.from_user.id)
|
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')
|
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
|
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')
|
bot.send_message(chat_id=user_id, text='You have no keywords. Please add some keywords with /addkeyword')
|
||||||
return
|
return
|
||||||
|
|
||||||
if keywords:
|
if keywords:
|
||||||
for keyword in keywords:
|
for keyword in keywords:
|
||||||
top_news = news.get_top_news_by_keyword(keyword)["articles"]
|
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.')
|
bot.send_message(chat_id=user_id, text='News Server did not respond correctly. Try again later.')
|
||||||
return
|
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")
|
bot.send_message(chat_id=user_id, text=f'No news found for keyword: *{keyword}*', parse_mode="MARKDOWN")
|
||||||
return
|
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")
|
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)
|
user_id = int(message.from_user.id)
|
||||||
bot.send_message(chat_id=user_id, text='Type keyword to add:')
|
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):
|
def store_keyword(message):
|
||||||
user_id = int(message.from_user.id)
|
user_id = int(message.from_user.id)
|
||||||
print(str(user_id))
|
keyword = str(message.text).lower() # lower to ensure Bitcoin and bitcoin is not stored as individual keywords
|
||||||
keyword = str(message.text).lower()
|
status = api_handler.set_keyword(user_id, keyword) # set keyword in database
|
||||||
status = api_handler.set_keyword(user_id, keyword)
|
if status == 200: # statuscode 200 means keyword was added successfully without errors
|
||||||
if status == 200:
|
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
|
||||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" added.')
|
|
||||||
else:
|
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})')
|
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)
|
user_id = int(message.from_user.id)
|
||||||
bot.send_message(chat_id=user_id, text='Type keyword to remove:')
|
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):
|
def remove_keyword_step(message):
|
||||||
user_id = int(message.from_user.id)
|
user_id = int(message.from_user.id)
|
||||||
keyword = str(message.text).lower()
|
keyword = str(message.text).lower()
|
||||||
status = api_handler.delete_keyword(user_id, keyword)
|
status = api_handler.delete_keyword(user_id, keyword)
|
||||||
if status == 200:
|
if status == 200: # statuscode 200 means keyword was removed successfully without errors
|
||||||
bot.send_message(chat_id=user_id, text=f'Keyword "{keyword}" removed.')
|
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:
|
else:
|
||||||
bot.send_message(chat_id=user_id, text=f'Failed deleting keyword "{keyword}". (statuscode {status})')
|
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
|
:rtype: none
|
||||||
"""
|
"""
|
||||||
user_id = int(message.from_user.id)
|
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')
|
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
|
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')
|
bot.send_message(chat_id=user_id, text='No keywords set for this account. Add keywords by using /addkeyword')
|
||||||
return
|
return
|
||||||
else:
|
else: # send keyword list
|
||||||
keywords_str = ', '.join(keywords)
|
keywords_str = ', '.join(keywords)
|
||||||
bot.send_message(chat_id=user_id, text=f'Your keywords are: _{keywords_str}_', parse_mode="MARKDOWN")
|
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):
|
def send_portfolio(message):
|
||||||
""" Send portfolio of user
|
""" Send portfolio of user
|
||||||
:type message: message object bot
|
:type message: message object bot
|
||||||
@ -421,23 +418,23 @@ def send_portfolio(message):
|
|||||||
:rtype: none
|
:rtype: none
|
||||||
"""
|
"""
|
||||||
user_id = int(message.from_user.id)
|
user_id = int(message.from_user.id)
|
||||||
portfolio = api_handler.get_user_portfolio(user_id)
|
portfolio = api_handler.get_user_portfolio(user_id) # get portfolio of user as json
|
||||||
if portfolio == None:
|
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')
|
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
|
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.')
|
bot.send_message(chat_id=user_id, text='You do not have any stocks in your portfolio.')
|
||||||
return
|
return
|
||||||
else:
|
else: # send portfolio
|
||||||
for stock in portfolio:
|
for stock in portfolio:
|
||||||
comment = str(stock["comment"])
|
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"]))
|
count = "{:.2f}".format(float(stock["count"])) # round count to 2 decimal places
|
||||||
isin = str(stock["isin"])
|
isin = str(stock["isin"])
|
||||||
worth = "{:.2f}".format(float(stock["current_price"]) * float(stock["count"]))
|
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")
|
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):
|
def set_new_transaction(message):
|
||||||
""" Set new transaction for user
|
""" Set new transaction for user
|
||||||
:type message: message object bot
|
: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.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):
|
def send_interval(message):
|
||||||
""" send interval for user
|
""" send interval for user
|
||||||
:type message: message object bot
|
:type message: message object bot
|
||||||
@ -485,20 +482,20 @@ def send_interval(message):
|
|||||||
:rtype: none
|
:rtype: none
|
||||||
"""
|
"""
|
||||||
user_id = int(message.from_user.id)
|
user_id = int(message.from_user.id)
|
||||||
user_data = api_handler.get_user(user_id)
|
user_data = api_handler.get_user(user_id) # get cron interval of user (stored in user data)
|
||||||
if user_data == None:
|
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')
|
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
|
return
|
||||||
else:
|
else: # send interval
|
||||||
interval = str(user_data['cron'])
|
interval = str(user_data['cron']) # get cron from user data
|
||||||
if interval == 'None':
|
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')
|
bot.send_message(chat_id=user_id, text='You do not have an interval set. Set one with /setinterval')
|
||||||
return
|
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.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):
|
def set_new_interval(message):
|
||||||
""" Set new interval for user
|
""" Set new interval for user
|
||||||
:type message: message object bot
|
:type message: message object bot
|
||||||
@ -510,19 +507,19 @@ def set_new_interval(message):
|
|||||||
"""
|
"""
|
||||||
user_id = int(message.from_user.id)
|
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.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):
|
def set_new_interval_step(message):
|
||||||
|
|
||||||
user_id = int(message.from_user.id)
|
user_id = int(message.from_user.id)
|
||||||
interval = str(message.text)
|
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:
|
if status == 200:
|
||||||
bot.send_message(chat_id=user_id, text='Interval succesfully set.')
|
bot.send_message(chat_id=user_id, text='Interval succesfully set.')
|
||||||
return
|
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.')
|
bot.send_message(chat_id=user_id, text='Invalid interval format. Try again with\n /setinterval.')
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user