From e7b22999dfcdc86db836b440c7078b95445a3bdd Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Tue, 15 Mar 2022 10:17:55 +0100 Subject: [PATCH 01/33] Started share fetcher and inserted yfianance in requirements --- telegram_bot/requirements.txt | 3 ++- telegram_bot/share_fetcher.py | 49 ++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index df70088..cd51daa 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -1,4 +1,5 @@ pyTelegramBotAPI~=4.4.0 beautifulsoup4==4.10.0 Markdown==3.3.6 -Pillow==9.0.1 \ No newline at end of file +Pillow==9.0.1 +yfinance==0.1.70 \ No newline at end of file diff --git a/telegram_bot/share_fetcher.py b/telegram_bot/share_fetcher.py index fdf3eae..2cb20c8 100644 --- a/telegram_bot/share_fetcher.py +++ b/telegram_bot/share_fetcher.py @@ -4,4 +4,51 @@ script for share fetching (by symbols (e.g. AAPL, TSLA etc.)) __author__ = "Florian Kellermann, Linus Eickhoff" __date__ = "15.03.2022" __version__ = "0.0.1" -__license__ = "None" \ No newline at end of file +__license__ = "None" + +import yfinance + +class Share_Handler: + def __init__(self): + return + + def all_share_prices_for_user(self, int_user_id): + + """ Get all share prices for a certain user with his id + :type int_user_id: integer + :param int_user_id: user_id to get all share prices for + + :raises: none + + :rtype: ###tbd### (maybe dictonary) + """ + return + + + def get_share_price(self, str_symbol): + + """ get current share price for a certain symbol + :type str_symbol: string + :param str_symbol: share symbol to get price for + + :raises: + + :rtype: + """ + + my_share_info = yfinance.Ticker(str_symbol) + my_share_data = my_share_info.info + my_return_string = f'{my_share_data["regularMarketPrice"]} {my_share_data["currency"]}' + return my_return_string + + +if __name__ == '__main__': + + """ test object and get share price + :raises: none + + :rtype: none + """ + + new_handler = Share_Handler() + print(new_handler.get_share_price("TSLA")) \ No newline at end of file From 1033b54154e8d36265fa42401662abc0cee4c375 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Tue, 15 Mar 2022 10:18:26 +0100 Subject: [PATCH 02/33] version update --- telegram_bot/share_fetcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_bot/share_fetcher.py b/telegram_bot/share_fetcher.py index 2cb20c8..6bcedf6 100644 --- a/telegram_bot/share_fetcher.py +++ b/telegram_bot/share_fetcher.py @@ -3,7 +3,7 @@ script for share fetching (by symbols (e.g. AAPL, TSLA etc.)) """ __author__ = "Florian Kellermann, Linus Eickhoff" __date__ = "15.03.2022" -__version__ = "0.0.1" +__version__ = "0.0.2" __license__ = "None" import yfinance From 6e710e702e6d7d41f8dd22d6ed9d5eb3af00b94a Mon Sep 17 00:00:00 2001 From: Rripped Date: Tue, 15 Mar 2022 10:39:29 +0100 Subject: [PATCH 03/33] small changes --- telegram_bot/news_fetcher.py | 11 ++++++++++- telegram_bot/requirements.txt | 4 ---- 2 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 telegram_bot/requirements.txt diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index 019372d..e14b9f1 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -4,4 +4,13 @@ script for news fetching (by keywords) __author__ = "Florian Kellermann, Linus Eickhoff" __date__ = "15.03.2022" __version__ = "0.0.1" -__license__ = "None" \ No newline at end of file +__license__ = "None" + +import sys +from newsapi import NewsApiClient +newsapi = NewsApiClient(api_key=api_key) +from pandas.io.json import json_normalize +import pandas as pd + +if __name__ == '__main__': + sys.exit(-1) \ No newline at end of file diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt deleted file mode 100644 index df70088..0000000 --- a/telegram_bot/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -pyTelegramBotAPI~=4.4.0 -beautifulsoup4==4.10.0 -Markdown==3.3.6 -Pillow==9.0.1 \ No newline at end of file From ab650541d46b610b9c02ffeb31e608afdba7d15f Mon Sep 17 00:00:00 2001 From: Rripped Date: Tue, 15 Mar 2022 10:48:36 +0100 Subject: [PATCH 04/33] added libs --- telegram_bot/requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index cd51daa..78ca72e 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -2,4 +2,6 @@ pyTelegramBotAPI~=4.4.0 beautifulsoup4==4.10.0 Markdown==3.3.6 Pillow==9.0.1 -yfinance==0.1.70 \ No newline at end of file +yfinance==0.1.70 +newsapi-python +pandas From 81ed181e426e850fa80400e5d9c9146e82207237 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Tue, 15 Mar 2022 11:10:12 +0100 Subject: [PATCH 05/33] Hallo --- telegram_bot/share_fetcher.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/telegram_bot/share_fetcher.py b/telegram_bot/share_fetcher.py index 6bcedf6..3fc7c9d 100644 --- a/telegram_bot/share_fetcher.py +++ b/telegram_bot/share_fetcher.py @@ -8,6 +8,8 @@ __license__ = "None" import yfinance +# S3W03GQH43I8O6IG + class Share_Handler: def __init__(self): return @@ -51,4 +53,4 @@ if __name__ == '__main__': """ new_handler = Share_Handler() - print(new_handler.get_share_price("TSLA")) \ No newline at end of file + print(new_handler.get_share_price("TL0.DE")) \ No newline at end of file From 3342e6081688d692e79122c78ad0edb7b6a04e17 Mon Sep 17 00:00:00 2001 From: Rripped Date: Tue, 15 Mar 2022 11:27:54 +0100 Subject: [PATCH 06/33] tested news api --- debugbot.py | 5 +++++ telegram_bot/bot.py | 1 - telegram_bot/news_fetcher.py | 16 ++++++++++++++-- telegram_bot/requirements.txt | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/debugbot.py b/debugbot.py index 79ed4ab..16a8fe0 100644 --- a/debugbot.py +++ b/debugbot.py @@ -8,6 +8,7 @@ import time import sys import logging from telebot import types +import telegram_bot.news_fetcher as news user_list = [] @@ -37,6 +38,10 @@ def send_start(message): def send_version(message): bot.reply_to(message, version) +@bot.message_handler(commands=['news']) +def send_news(message): + user_id = int(message.from_user.id) + bot.send_message(chat_id = user_id, text="news will be displayed here") @bot.message_handler(commands=['help']) # /help -> sending all functions def send_welcome(message): diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 14d806b..5351566 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -50,7 +50,6 @@ def send_start(message): def send_version(message): bot.reply_to(message, bot_version) - @bot.message_handler(commands=['help']) # /help -> sending all functions def send_welcome(message): bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. For further details see aktienbot.flokaiser.com") diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index e14b9f1..31357bd 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -8,9 +8,21 @@ __license__ = "None" import sys from newsapi import NewsApiClient -newsapi = NewsApiClient(api_key=api_key) from pandas.io.json import json_normalize import pandas as pd +# Init +newsapi = NewsApiClient(api_key='4261069558d64489a104ca40df8d2edc') + +# /v2/top-headlines +top_headlines = newsapi.get_top_headlines(q='bitcoin', sources='bbc-news,the-verge', language='en') + +# /v2/everything +all_articles = newsapi.get_everything(q='bitcoin', sources='bbc-news,the-verge', domains='bbc.co.uk,techcrunch.com', from_param='2022-03-14', to='2022-03-15', language='en', sort_by='relevancy', page=2) + +# /v2/top-headlines/sources +sources = newsapi.get_sources() + if __name__ == '__main__': - sys.exit(-1) \ No newline at end of file + print(top_headlines) + print(all_articles) \ No newline at end of file diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index 78ca72e..cfb433f 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -4,4 +4,4 @@ Markdown==3.3.6 Pillow==9.0.1 yfinance==0.1.70 newsapi-python -pandas +pandas~=1.4.1 From 50a4df4e71f773d9790ac9b1a99960bf0223679b Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:53:39 +0100 Subject: [PATCH 07/33] made debugbot.py obsolete --- telegram_bot/bot.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 5351566..7449da9 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -9,7 +9,7 @@ __license__ = "None" # side-dependencies: none # Work in Progress -# Api-Key: 5228016873:AAGFrh0P6brag7oD3gxXjCh5gnLLE8JMvMs +# Api-Key: 5228016873:AAGFrh0P6brag7oD3gxXjCh5gnLLE8JMvMs /debugAPI Key: 5108535940:AAF5FpPHNV96WxGCDt8aMrGGKke1VILYib4 (https://t.me/mynewdebugbot) # text bot at t.me/projektaktienbot # API Documentation https://core.telegram.org/bots/api # Code examples https://github.com/eternnoir/pyTelegramBotAPI#getting-started @@ -21,7 +21,12 @@ import time import sys import logging +import news_fetcher + from telebot import types +from dotenv import load_dotenv + +load_dotenv() bot_version = "0.0.1" user_list = [] @@ -32,6 +37,7 @@ class User: # Currently saving users in this class to test functionality -> late self.chat_id = int(p_chat_id) self.user_name = str(p_user_name) +print(os.getenv('BOT_API_KEY')) bot = telebot.TeleBot(os.getenv('BOT_API_KEY')) @bot.message_handler(commands=['start']) # /start -> saving as new user and sending welcome @@ -45,15 +51,18 @@ def send_start(message): user_list.append(new_user) bot.reply_to(message, "Welcome to this share bot project. Type /help to get information on what this bot can do") - + + @bot.message_handler(commands=['version']) def send_version(message): bot.reply_to(message, bot_version) + @bot.message_handler(commands=['help']) # /help -> sending all functions def send_welcome(message): bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. For further details see aktienbot.flokaiser.com") - + + @bot.message_handler(commands=['users']) def send_all_users(message): print('Debug: users command') @@ -78,6 +87,15 @@ def send_update(message): bot.send_message(chat_id=user_id, text='This is your update') +@bot.message_handler(commands=['news']) # /news -> send news by keyword +def send_news(message): + user_id = int(message.from_user.id) + #Get Information for user with this id + articles = news_fetcher.get_top_news_by_keyword("bitcoin") #tbd: get keyword from db + formatted_article = news_fetcher.format_article(articles["articles"][0]) + bot.send_message(chat_id=user_id, text=formatted_article) + + @bot.message_handler(func=lambda message: True) # Returning that command is unkown for any other statement def echo_all(message): answer = 'Do not know this command or text: ' + message.text From 46dd6c0332f52fff04fe0c5bea0159b14ef55c15 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:54:08 +0100 Subject: [PATCH 08/33] added formatting and fetching by keywords --- telegram_bot/news_fetcher.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index 31357bd..77626fc 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -9,6 +9,7 @@ __license__ = "None" import sys from newsapi import NewsApiClient from pandas.io.json import json_normalize +import json import pandas as pd # Init @@ -23,6 +24,20 @@ all_articles = newsapi.get_everything(q='bitcoin', sources='bbc-news,the-verge', # /v2/top-headlines/sources sources = newsapi.get_sources() +def get_top_news_by_keyword(keyword): + top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn', language='en') + out_file = open("top_headline.json", "w") + json.dump(top_headlines, out_file) + return top_headlines + +def format_article(article): + sourcename = article["source"]["name"] + headline = article["title"] + url = article["url"] + formatted_article = f"{sourcename}\n{headline}\n\ntext" + + return formatted_article + if __name__ == '__main__': - print(top_headlines) - print(all_articles) \ No newline at end of file + articles = get_top_news_by_keyword("business") + formatted_article = format_article(articles["articles"][0]) \ No newline at end of file From e92e49d457346471931fbf67f2d5fee2b570f321 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:54:29 +0100 Subject: [PATCH 09/33] added new reqs --- telegram_bot/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index cfb433f..e81b367 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -5,3 +5,4 @@ Pillow==9.0.1 yfinance==0.1.70 newsapi-python pandas~=1.4.1 +python-dotenv~=0.19.2 From bbe294393265c09b9795d2f5ac97412a80839e00 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:54:57 +0100 Subject: [PATCH 10/33] added new ignores --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f5f8f89..5094fd8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/* -.env \ No newline at end of file +.env +env +__pycache__/* \ No newline at end of file From 4fc04fe87d00da321f23dd4f2dcaa8f83cc48dc3 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:55:38 +0100 Subject: [PATCH 11/33] added new ignores --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5094fd8..c9f2884 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea/* .env env -__pycache__/* \ No newline at end of file +__pycache__/* +telegram_bot/__pycache__/* \ No newline at end of file From a81d39f156d4bda23ef352df618034f325d3f89c Mon Sep 17 00:00:00 2001 From: Rripped <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:58:02 +0100 Subject: [PATCH 12/33] Update .env.example --- .env.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 176746a..921ca00 100644 --- a/.env.example +++ b/.env.example @@ -6,8 +6,8 @@ MYSQL_USER= MYSQL_PASSWORD= # Telegram bot api key -BOT_API_KEY= - +BOT_API_KEY="" +NEWS_API_KEY="" # Flask secret key SECRET_KEY= From edcb226c921a95b83809d0a53591fbfd52983880 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:01:33 +0100 Subject: [PATCH 13/33] small changes --- .env.example | 13 ------------- telegram_bot/news_fetcher.py | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index 176746a..0000000 --- a/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -# MYSQL Database -MYSQL_HOST= -MYSQL_PORT= -MYSQL_DATABASE= -MYSQL_USER= -MYSQL_PASSWORD= - -# Telegram bot api key -BOT_API_KEY= - - -# Flask secret key -SECRET_KEY= diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index 77626fc..dbebe34 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -7,13 +7,18 @@ __version__ = "0.0.1" __license__ = "None" import sys -from newsapi import NewsApiClient -from pandas.io.json import json_normalize +import os import json + import pandas as pd +from newsapi import NewsApiClient +from dotenv import load_dotenv + +load_dotenv() + # Init -newsapi = NewsApiClient(api_key='4261069558d64489a104ca40df8d2edc') +newsapi = NewsApiClient(api_key=os.getenv('NEWS_API_KEY')) # /v2/top-headlines top_headlines = newsapi.get_top_headlines(q='bitcoin', sources='bbc-news,the-verge', language='en') @@ -39,5 +44,9 @@ def format_article(article): return formatted_article if __name__ == '__main__': + + print("fetching top news by keyword business...") + articles = get_top_news_by_keyword("business") - formatted_article = format_article(articles["articles"][0]) \ No newline at end of file + formatted_article = format_article(articles["articles"][0]) + print(formatted_article) \ No newline at end of file From 05d2b374822bb26e5bd092308526ad15d1bd04c7 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:24:11 +0100 Subject: [PATCH 14/33] fixed errors --- telegram_bot/bot.py | 11 ++++++++--- telegram_bot/news_fetcher.py | 6 ++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 7449da9..bc8558a 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -37,7 +37,6 @@ class User: # Currently saving users in this class to test functionality -> late self.chat_id = int(p_chat_id) self.user_name = str(p_user_name) -print(os.getenv('BOT_API_KEY')) bot = telebot.TeleBot(os.getenv('BOT_API_KEY')) @bot.message_handler(commands=['start']) # /start -> saving as new user and sending welcome @@ -89,10 +88,16 @@ def send_update(message): @bot.message_handler(commands=['news']) # /news -> send news by keyword def send_news(message): + keyword = "business" user_id = int(message.from_user.id) #Get Information for user with this id - articles = news_fetcher.get_top_news_by_keyword("bitcoin") #tbd: get keyword from db - formatted_article = news_fetcher.format_article(articles["articles"][0]) + + articles = news_fetcher.get_top_news_by_keyword(keyword) #tbd: get keyword from db + try: + formatted_article = news_fetcher.format_article(articles["articles"][0]) + except IndexError: + bot.send_message(chat_id=user_id, text=f"no news currently available for keyword: {keyword}") + return bot.send_message(chat_id=user_id, text=formatted_article) diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index dbebe34..65af5b5 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -31,20 +31,18 @@ sources = newsapi.get_sources() def get_top_news_by_keyword(keyword): top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn', language='en') - out_file = open("top_headline.json", "w") - json.dump(top_headlines, out_file) return top_headlines def format_article(article): sourcename = article["source"]["name"] headline = article["title"] url = article["url"] - formatted_article = f"{sourcename}\n{headline}\n\ntext" + formatted_article = f"_{sourcename}_\n*{headline}*\n\n{url}" return formatted_article if __name__ == '__main__': - + print("fetching top news by keyword business...") articles = get_top_news_by_keyword("business") From c0d2b8a679d3d099aafda13c8fac5583358668ce Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:36:04 +0100 Subject: [PATCH 15/33] deleted debugbot --- debugbot.py | 104 -------------------------------------------- telegram_bot/bot.py | 2 +- 2 files changed, 1 insertion(+), 105 deletions(-) delete mode 100644 debugbot.py diff --git a/debugbot.py b/debugbot.py deleted file mode 100644 index 16a8fe0..0000000 --- a/debugbot.py +++ /dev/null @@ -1,104 +0,0 @@ -# 5108535940:AAF5FpPHNV96WxGCDt8aMrGGKke1VILYib4 -# https://t.me/mynewdebugbot - -import os - -import telebot -import time -import sys -import logging -from telebot import types -import telegram_bot.news_fetcher as news - -user_list = [] - -version = "1.5" - -class User: # Currently saving users in this class to test functionality -> later database - def __init__(self, p_user_id, p_user_name, p_chat_id): - self.user_id = int(p_user_id) - self.chat_id = int(p_chat_id) - self.user_name = str(p_user_name) - -bot = telebot.TeleBot('5108535940:AAF5FpPHNV96WxGCDt8aMrGGKke1VILYib4') - -@bot.message_handler(commands=['start']) # /start -> saving as new user and sending welcome -def send_start(message): - new_user = User(int(message.from_user.id), message.from_user.first_name, int(message.chat.id)) - existing_already = False - for known_user in user_list: - if known_user.user_id == new_user.user_id: - existing_already = True - if existing_already == False: - user_list.append(new_user) - - bot.reply_to(message, "Welcome to this share bot project. Type /help to get information on what this bot can do") - -@bot.message_handler(commands=['version']) -def send_version(message): - bot.reply_to(message, version) - -@bot.message_handler(commands=['news']) -def send_news(message): - user_id = int(message.from_user.id) - bot.send_message(chat_id = user_id, text="news will be displayed here") - -@bot.message_handler(commands=['help']) # /help -> sending all functions -def send_welcome(message): - bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. For further details see aktienbot.flokaiser.com") - -@bot.message_handler(commands=['users']) -def send_all_users(message): - print('Debug: users command') - user_id = int(message.from_user.id) - answer = 'Current number of users: ' + str(len(user_list)) - bot.send_message(chat_id = user_id, text=answer) - for known_user in user_list: - answer = str(known_user.user_id) + ' : ' + known_user.user_name - bot.send_message(chat_id=user_id, text=answer) - - -@bot.message_handler(commands=['id', 'auth']) # /auth or /id -> Authentication with user_id over web tool -def send_id(message): - answer = 'Your ID/Authentication Code is: [' + str(message.from_user.id) + ']. Enter this code in the settings on aktienbot.flokaiser.com to get updates on your shares.' - bot.reply_to(message, answer) - - -@bot.message_handler(commands=['update']) # /update -> send static update via user_id to this user, later fetch from database -def send_update(message): - user_id = int(message.from_user.id) - #Get Information for user with this id - bot.send_message(chat_id=user_id, text='This is your update') - - -@bot.message_handler(func=lambda message: True) # Returning that command is unkown for any other statement -def echo_all(message): - answer = 'Do not know this command or text: ' + message.text - bot.reply_to(message, answer) - - -telebot.logger.setLevel(logging.DEBUG) - - -@bot.inline_handler(lambda query: query.query == 'text') # inline prints for debugging -def query_text(inline_query): - try: - r = types.InlineQueryResultArticle('1', 'Result1', types.InputTextMessageContent('hi')) - r2 = types.InlineQueryResultArticle('2', 'Result2', types.InputTextMessageContent('hi')) - bot.answer_inline_query(inline_query.id, [r, r2]) - except Exception as e: - print(e) - - -def main_loop(): - bot.infinity_polling() - while 1: - time.sleep(3) - - -if __name__ == '__main__': - try: - main_loop() - except KeyboardInterrupt: - print('\nExiting by user request.\n') - sys.exit(0) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index bc8558a..f04c2e5 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -98,7 +98,7 @@ def send_news(message): except IndexError: bot.send_message(chat_id=user_id, text=f"no news currently available for keyword: {keyword}") return - bot.send_message(chat_id=user_id, text=formatted_article) + bot.send_message(chat_id=user_id, text=f"_keyword: {keyword}_\n\n" + formatted_article, parse_mode="MARKDOWN") @bot.message_handler(func=lambda message: True) # Returning that command is unkown for any other statement From 87ce7191a8b8aa9023b554cd837b0f9f19c337c2 Mon Sep 17 00:00:00 2001 From: NormalParameter Date: Tue, 15 Mar 2022 14:37:49 +0100 Subject: [PATCH 16/33] Version update --- telegram_bot/bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index f04c2e5..7b2bf8c 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -28,7 +28,7 @@ from dotenv import load_dotenv load_dotenv() -bot_version = "0.0.1" +bot_version = "0.1.1" user_list = [] class User: # Currently saving users in this class to test functionality -> later database From 416667adfb4a3a49ce4c3f2155b1d220d3d8158b Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:43:05 +0100 Subject: [PATCH 17/33] added function descriptions --- telegram_bot/news_fetcher.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news_fetcher.py index 65af5b5..836b2fe 100644 --- a/telegram_bot/news_fetcher.py +++ b/telegram_bot/news_fetcher.py @@ -20,20 +20,30 @@ load_dotenv() # Init newsapi = NewsApiClient(api_key=os.getenv('NEWS_API_KEY')) -# /v2/top-headlines -top_headlines = newsapi.get_top_headlines(q='bitcoin', sources='bbc-news,the-verge', language='en') - -# /v2/everything -all_articles = newsapi.get_everything(q='bitcoin', sources='bbc-news,the-verge', domains='bbc.co.uk,techcrunch.com', from_param='2022-03-14', to='2022-03-15', language='en', sort_by='relevancy', page=2) # /v2/top-headlines/sources sources = newsapi.get_sources() def get_top_news_by_keyword(keyword): + """get top news to keyword + Args: + keyword (String): keyword for search + + Returns: + JSON/dict: dict containing articles + """ top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn', language='en') return top_headlines def format_article(article): + """format article for messaging (using markdown syntax) + + Args: + article (dict): article to format for messaging + + Returns: + String: formatted article + """ sourcename = article["source"]["name"] headline = article["title"] url = article["url"] From af01a7e18303eb1516a4a8ea321b6d5a6c861465 Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:49:36 +0100 Subject: [PATCH 18/33] moved news_fetcher to new dir --- .gitignore | 3 ++- telegram_bot/bot.py | 6 +++--- telegram_bot/{ => news}/news_fetcher.py | 0 3 files changed, 5 insertions(+), 4 deletions(-) rename telegram_bot/{ => news}/news_fetcher.py (100%) diff --git a/.gitignore b/.gitignore index c9f2884..6df9f3c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .env env __pycache__/* -telegram_bot/__pycache__/* \ No newline at end of file +telegram_bot/__pycache__/* +telegram_bot/news/__pycache__/* \ No newline at end of file diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 7b2bf8c..f1e321a 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -21,7 +21,7 @@ import time import sys import logging -import news_fetcher +import news.news_fetcher as news from telebot import types from dotenv import load_dotenv @@ -92,9 +92,9 @@ def send_news(message): user_id = int(message.from_user.id) #Get Information for user with this id - articles = news_fetcher.get_top_news_by_keyword(keyword) #tbd: get keyword from db + articles = news.get_top_news_by_keyword(keyword) #tbd: get keyword from db try: - formatted_article = news_fetcher.format_article(articles["articles"][0]) + formatted_article = news.format_article(articles["articles"][0]) except IndexError: bot.send_message(chat_id=user_id, text=f"no news currently available for keyword: {keyword}") return diff --git a/telegram_bot/news_fetcher.py b/telegram_bot/news/news_fetcher.py similarity index 100% rename from telegram_bot/news_fetcher.py rename to telegram_bot/news/news_fetcher.py From 725f9806b7109b68219cc273edc616c1059ee4bb Mon Sep 17 00:00:00 2001 From: Linus E <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 14:54:17 +0100 Subject: [PATCH 19/33] added news example --- telegram_bot/news/article_example.json | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 telegram_bot/news/article_example.json diff --git a/telegram_bot/news/article_example.json b/telegram_bot/news/article_example.json new file mode 100644 index 0000000..368fbf4 --- /dev/null +++ b/telegram_bot/news/article_example.json @@ -0,0 +1,32 @@ +{ + "status": "ok", + "totalResults": 1, + "articles": [ + { + "source": { + "id": "the-verge", + "name": "The Verge" + }, + "author": "Justine Calma", + "title": "EU Parliament backs off plans to phase out energy-hungry cryptocurrencies", + "description": "EU Parliament abandoned a measure in its proposed legislative framework for regulating cryptocurrencies that would have amounted to a de facto ban on energy-hungry networks like Bitcoin.", + "url": "https://www.theverge.com/2022/3/14/22977132/bitcoin-european-union-parliament-ban-proof-of-work-cryptocurrencies", + "urlToImage": "https://cdn.vox-cdn.com/thumbor/8bE-uBwwu-eXg-CcB6cOqcAGVDw=/0x286:4000x2380/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/23315944/834392892.jpg", + "publishedAt": "2022-03-14T23:40:25Z", + "content": "But Bitcoin is still under scrutiny \r\nPower cords for bitcoin mining machines are plugged into electrical outlets at a mining facility operated by Bitmain Technologies Ltd. in Ordos, Inner Mongolia, \u2026 [+5797 chars]" + }, + { + "source": { + "id": "the-verge", + "name": "The Verge" + }, + "author": "Justine Calma", + "title": "EU Parliament backs off plans to phase out energy-hungry cryptocurrencies", + "description": "EU Parliament abandoned a measure in its proposed legislative framework for regulating cryptocurrencies that would have amounted to a de facto ban on energy-hungry networks like Bitcoin.", + "url": "https://www.theverge.com/2022/3/14/22977132/bitcoin-european-union-parliament-ban-proof-of-work-cryptocurrencies", + "urlToImage": "https://cdn.vox-cdn.com/thumbor/8bE-uBwwu-eXg-CcB6cOqcAGVDw=/0x286:4000x2380/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/23315944/834392892.jpg", + "publishedAt": "2022-03-14T23:40:25Z", + "content": "But Bitcoin is still under scrutiny \r\nPower cords for bitcoin mining machines are plugged into electrical outlets at a mining facility operated by Bitmain Technologies Ltd. in Ordos, Inner Mongolia, \u2026 [+5797 chars]" + } + ] +} \ No newline at end of file From d12916abef9fad5041c9c0746e9afb7080c1e386 Mon Sep 17 00:00:00 2001 From: NormalParameter Date: Tue, 15 Mar 2022 15:02:01 +0100 Subject: [PATCH 20/33] Inserting correct comments --- telegram_bot/bot.py | 124 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 4 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 7b2bf8c..d73a7d4 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -4,7 +4,7 @@ script for telegram bot and its functions """ __author__ = "Florian Kellermann, Linus Eickhoff" __date__ = "11.03.2022" -__version__ = "0.0.3" +__version__ = "0.0.4" __license__ = "None" # side-dependencies: none @@ -22,9 +22,11 @@ import sys import logging import news_fetcher +import share_fetcher from telebot import types from dotenv import load_dotenv +from telegram_bot.share_fetcher import Share_Handler load_dotenv() @@ -33,6 +35,25 @@ user_list = [] class User: # Currently saving users in this class to test functionality -> later database def __init__(self, p_user_id, p_user_name, p_chat_id): + + """ Initialize a new user + :type self: + :param self: for class + + :type p_user_id: int + :param p_user_id: telegram user id + + :type p_user_name: str + :param p_user_name: first name of user + + :type p_chat_id: int + :param p_chat_id: telegram chat id + + :raises: + + :rtype: + """ + self.user_id = int(p_user_id) self.chat_id = int(p_chat_id) self.user_name = str(p_user_name) @@ -41,6 +62,15 @@ bot = telebot.TeleBot(os.getenv('BOT_API_KEY')) @bot.message_handler(commands=['start']) # /start -> saving as new user and sending welcome def send_start(message): + + """ Description + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/start' + + :raises: none + + :rtype: none + """ new_user = User(int(message.from_user.id), message.from_user.first_name, int(message.chat.id)) existing_already = False for known_user in user_list: @@ -54,18 +84,48 @@ def send_start(message): @bot.message_handler(commands=['version']) def send_version(message): + + """ Sending programm version + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/version' + + :raises: none + + :rtype:none + """ bot.reply_to(message, bot_version) @bot.message_handler(commands=['help']) # /help -> sending all functions def send_welcome(message): - bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. For further details see aktienbot.flokaiser.com") + + """ Send all functions + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/help' + + :raises: none + + :rtype: none + """ + bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. /news to get current use for your keywords. For further details see aktienbot.flokaiser.com") @bot.message_handler(commands=['users']) def send_all_users(message): + + """ Send all users, only possible for admins + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/users' + + :raises: none + + :rtype: none + """ print('Debug: users command') - user_id = int(message.from_user.id) + user_id = int(message.from_user.id) + + # tbd check if user is admin + answer = 'Current number of users: ' + str(len(user_list)) bot.send_message(chat_id = user_id, text=answer) for known_user in user_list: @@ -75,19 +135,51 @@ def send_all_users(message): @bot.message_handler(commands=['id', 'auth']) # /auth or /id -> Authentication with user_id over web tool def send_id(message): + + """ Send user id for authentication with browser + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/id' or '/auth' + + :raises: none + + :rtype: none + """ answer = 'Your ID/Authentication Code is: [' + str(message.from_user.id) + ']. Enter this code in the settings on aktienbot.flokaiser.com to get updates on your shares.' bot.reply_to(message, answer) @bot.message_handler(commands=['update']) # /update -> send static update via user_id to this user, later fetch from database def send_update(message): + + """ Send update on shares + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/help' + + :raises: none + + :rtype: none + """ user_id = int(message.from_user.id) + + share_fetcher = Share_Handler() + #Get Information for user with this id + #call Share_Handler bot.send_message(chat_id=user_id, text='This is your update') -@bot.message_handler(commands=['news']) # /news -> send news by keyword +@bot.message_handler(commands=['news']) def send_news(message): + + """ Get news for keywords of user + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/news' + + :raises: none + + :rtype: none + """ + keyword = "business" user_id = int(message.from_user.id) #Get Information for user with this id @@ -103,6 +195,15 @@ def send_news(message): @bot.message_handler(func=lambda message: True) # Returning that command is unkown for any other statement def echo_all(message): + + """ Tell that command is not known if it is no known command + :type message: message object bot + :param message: message that was reacted to, if no other command handler gets called + + :raises: none + + :rtype: none + """ answer = 'Do not know this command or text: ' + message.text bot.reply_to(message, answer) @@ -112,6 +213,15 @@ telebot.logger.setLevel(logging.DEBUG) @bot.inline_handler(lambda query: query.query == 'text') # inline prints for debugging def query_text(inline_query): + + """ Output in the console about current user actions and status of bot + :type inline_query: + :param inline_query: + + :raises: none + + :rtype: none + """ try: r = types.InlineQueryResultArticle('1', 'Result1', types.InputTextMessageContent('hi')) r2 = types.InlineQueryResultArticle('2', 'Result2', types.InputTextMessageContent('hi')) @@ -121,6 +231,12 @@ def query_text(inline_query): def main_loop(): + + """ Get Information about bot status every 3 seconds + :raises: none + + :rtype: none + """ bot.infinity_polling() while 1: time.sleep(3) From d91b98c47bb65c8a5b42887cc009deaade69a82e Mon Sep 17 00:00:00 2001 From: NormalParameter Date: Tue, 15 Mar 2022 15:04:08 +0100 Subject: [PATCH 21/33] Update --- telegram_bot/bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 4120f45..1480837 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -26,6 +26,7 @@ import news_fetcher import share_fetcher ======= import news.news_fetcher as news +import share_fetcher >>>>>>> 725f9806b7109b68219cc273edc616c1059ee4bb from telebot import types From 3759dadb05450a24511e8ae4e350979009201d32 Mon Sep 17 00:00:00 2001 From: Rripped <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 15:04:32 +0100 Subject: [PATCH 22/33] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 1dbcb5d..0c0f26f 100644 --- a/README.md +++ b/README.md @@ -17,3 +17,8 @@ WebEngineering2 Projekt: Aktien und News Bot für Telegram ## Dokumentation - Postman-API -> docs/postman.json - Datenbank -> database/* + +## Local setup for telegram bot +1. create .env and set API keys etc. (use .env.example for this) +2. install required libs via ``pip install -r ./telegram_bot/requirements.txt`` +3. run bot.py via ``python ./telegram_bot/bot.py`` From 7c40f1270365303069a2ffdac19f1e808297dda4 Mon Sep 17 00:00:00 2001 From: Rripped <75929322+Rripped@users.noreply.github.com> Date: Tue, 15 Mar 2022 15:05:35 +0100 Subject: [PATCH 23/33] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c0f26f..75ba1f9 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,6 @@ WebEngineering2 Projekt: Aktien und News Bot für Telegram - Datenbank -> database/* ## Local setup for telegram bot -1. create .env and set API keys etc. (use .env.example for this) +1. create .env and set API keys etc. (use .env.example as a layout) 2. install required libs via ``pip install -r ./telegram_bot/requirements.txt`` 3. run bot.py via ``python ./telegram_bot/bot.py`` From 8ea805b8e9db49e28a55792d38740ebc4189e7ac Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 08:47:02 +0100 Subject: [PATCH 24/33] NEw commit --- telegram_bot/bot.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 1480837..26ff3e4 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -21,13 +21,8 @@ import time import sys import logging -<<<<<<< HEAD -import news_fetcher -import share_fetcher -======= import news.news_fetcher as news import share_fetcher ->>>>>>> 725f9806b7109b68219cc273edc616c1059ee4bb from telebot import types from dotenv import load_dotenv From 72e1b4bc50d4f842ec80c150327f08462cdd0833 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 08:54:46 +0100 Subject: [PATCH 25/33] Working again --- .env.example | 13 ------------- telegram_bot/bot.py | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index 921ca00..0000000 --- a/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -# MYSQL Database -MYSQL_HOST= -MYSQL_PORT= -MYSQL_DATABASE= -MYSQL_USER= -MYSQL_PASSWORD= - -# Telegram bot api key -BOT_API_KEY="" -NEWS_API_KEY="" - -# Flask secret key -SECRET_KEY= diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 26ff3e4..aee9c0e 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -26,7 +26,7 @@ import share_fetcher from telebot import types from dotenv import load_dotenv -from telegram_bot.share_fetcher import Share_Handler +from share_fetcher import Share_Handler load_dotenv() From d1fcff063408fc4d36712b98f5a355013a82f713 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 09:02:24 +0100 Subject: [PATCH 26/33] added del .env.example --- .env.example | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..921ca00 --- /dev/null +++ b/.env.example @@ -0,0 +1,13 @@ +# MYSQL Database +MYSQL_HOST= +MYSQL_PORT= +MYSQL_DATABASE= +MYSQL_USER= +MYSQL_PASSWORD= + +# Telegram bot api key +BOT_API_KEY="" +NEWS_API_KEY="" + +# Flask secret key +SECRET_KEY= From 4d67d0cdd0fdb7dbfc28618b5b076b26cc50e3f6 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 09:03:00 +0100 Subject: [PATCH 27/33] updated gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6df9f3c..cea3711 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ .idea/* .env +.env.example env +Lib +Include __pycache__/* telegram_bot/__pycache__/* telegram_bot/news/__pycache__/* \ No newline at end of file From eaeb0d4ed5a6f6cf9c6d9bd9981210509545405d Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 09:14:45 +0100 Subject: [PATCH 28/33] small change --- .gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index cea3711..1a8385e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,5 @@ env Lib Include -__pycache__/* -telegram_bot/__pycache__/* -telegram_bot/news/__pycache__/* \ No newline at end of file +*/*/__pycache__/* +*/__pycache__/* \ No newline at end of file From 267a7db04b5947637bdd4299cfc76c1180d2ddaf Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 09:30:33 +0100 Subject: [PATCH 29/33] hoffentlich geht es bei dir --- telegram_bot/bot.py | 29 +++++++++++++++++++--- telegram_bot/{ => shares}/share_fetcher.py | 2 ++ telegram_bot/shares/wait_for_share.py | 24 ++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) rename telegram_bot/{ => shares}/share_fetcher.py (98%) create mode 100644 telegram_bot/shares/wait_for_share.py diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index aee9c0e..1ceac06 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -22,12 +22,14 @@ import sys import logging import news.news_fetcher as news -import share_fetcher +import shares.share_fetcher as share_fetcher +import shares.wait_for_share from telebot import types from dotenv import load_dotenv from share_fetcher import Share_Handler + load_dotenv() bot_version = "0.1.1" @@ -107,7 +109,7 @@ def send_welcome(message): :rtype: none """ - bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. /news to get current use for your keywords. For further details see aktienbot.flokaiser.com") + bot.reply_to(message, "/id or /auth for authentication. /update to get updates on your shares. /users to see all users. /news to get current use for your keywords. /share to get price of specific share. For further details see aktienbot.flokaiser.com") @bot.message_handler(commands=['users']) @@ -148,7 +150,7 @@ def send_id(message): bot.reply_to(message, answer) -@bot.message_handler(commands=['update']) # /update -> send static update via user_id to this user, later fetch from database +@bot.message_handler(commands=['update']) def send_update(message): """ Send update on shares @@ -166,6 +168,27 @@ def send_update(message): #Get Information for user with this id #call Share_Handler bot.send_message(chat_id=user_id, text='This is your update') + + +@bot.message_handler(commands=['share']) +def send_update(message): + + """ Send price of a specific share + :type message: message object bot + :param message: message that was reacted to, in this case always containing '/share' + + :raises: none + + :rtype: none + """ + user_id = int(message.from_user.id) + + #Get Information for user with this id + bot.send_message(chat_id=user_id, text='Send symbol of share:') + str_share_price = shares.wait_for_share.main_loop(bot) + + + @bot.message_handler(commands=['news']) diff --git a/telegram_bot/share_fetcher.py b/telegram_bot/shares/share_fetcher.py similarity index 98% rename from telegram_bot/share_fetcher.py rename to telegram_bot/shares/share_fetcher.py index 3fc7c9d..6322650 100644 --- a/telegram_bot/share_fetcher.py +++ b/telegram_bot/shares/share_fetcher.py @@ -7,6 +7,7 @@ __version__ = "0.0.2" __license__ = "None" import yfinance +import telebot # S3W03GQH43I8O6IG @@ -42,6 +43,7 @@ class Share_Handler: my_share_data = my_share_info.info my_return_string = f'{my_share_data["regularMarketPrice"]} {my_share_data["currency"]}' return my_return_string + if __name__ == '__main__': diff --git a/telegram_bot/shares/wait_for_share.py b/telegram_bot/shares/wait_for_share.py new file mode 100644 index 0000000..73be6f9 --- /dev/null +++ b/telegram_bot/shares/wait_for_share.py @@ -0,0 +1,24 @@ +import time +import telebot +import share_fetcher + +bot = 0 + +@bot.message_handler(func=lambda message: True) +def send_share_price(message): + fetcher = share_fetcher.Share_Handler() + str_price = fetcher.get_share_price(str(message.text)) + return str_price + + +def main_loop(p_bot): + + """ Get Information about bot status every 3 seconds + :raises: none + + :rtype: none + """ + bot = p_bot + bot.infinity_polling() + while 1: + time.sleep(3) \ No newline at end of file From f28c0e69efa3194792121560782c985324306ee6 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 09:47:50 +0100 Subject: [PATCH 30/33] test --- telegram_bot/bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 1ceac06..b38f044 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -27,7 +27,8 @@ import shares.wait_for_share from telebot import types from dotenv import load_dotenv -from share_fetcher import Share_Handler +import shares.wait_for_share +from shares.share_fetcher import Share_Handler load_dotenv() From 270667c6b5a4cc511039a03d2aeb4569aa7a2a51 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 10:02:28 +0100 Subject: [PATCH 31/33] C:/Program Files/Git/share inserted and working --- telegram_bot/bot.py | 13 +++++++------ telegram_bot/shares/share_fetcher.py | 2 -- telegram_bot/shares/wait_for_share.py | 24 ------------------------ 3 files changed, 7 insertions(+), 32 deletions(-) delete mode 100644 telegram_bot/shares/wait_for_share.py diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index b38f044..4f1be7e 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -23,12 +23,9 @@ import logging import news.news_fetcher as news import shares.share_fetcher as share_fetcher -import shares.wait_for_share from telebot import types from dotenv import load_dotenv -import shares.wait_for_share -from shares.share_fetcher import Share_Handler load_dotenv() @@ -164,7 +161,7 @@ def send_update(message): """ user_id = int(message.from_user.id) - share_fetcher = Share_Handler() + share_fetcher = share_fetcher.Share_Handler() #Get Information for user with this id #call Share_Handler @@ -186,9 +183,13 @@ def send_update(message): #Get Information for user with this id bot.send_message(chat_id=user_id, text='Send symbol of share:') - str_share_price = shares.wait_for_share.main_loop(bot) - + #str_share_price = shares.wait_for_share.main_loop(bot) + bot.register_next_step_handler(message, send_share_price) +def send_share_price(message): + share_fetcher_obj = share_fetcher.Share_Handler() + str_share_price = share_fetcher_obj.get_share_price(str(message.text)) + bot.reply_to(message, str_share_price) diff --git a/telegram_bot/shares/share_fetcher.py b/telegram_bot/shares/share_fetcher.py index 6322650..f107519 100644 --- a/telegram_bot/shares/share_fetcher.py +++ b/telegram_bot/shares/share_fetcher.py @@ -7,9 +7,7 @@ __version__ = "0.0.2" __license__ = "None" import yfinance -import telebot -# S3W03GQH43I8O6IG class Share_Handler: def __init__(self): diff --git a/telegram_bot/shares/wait_for_share.py b/telegram_bot/shares/wait_for_share.py deleted file mode 100644 index 73be6f9..0000000 --- a/telegram_bot/shares/wait_for_share.py +++ /dev/null @@ -1,24 +0,0 @@ -import time -import telebot -import share_fetcher - -bot = 0 - -@bot.message_handler(func=lambda message: True) -def send_share_price(message): - fetcher = share_fetcher.Share_Handler() - str_price = fetcher.get_share_price(str(message.text)) - return str_price - - -def main_loop(p_bot): - - """ Get Information about bot status every 3 seconds - :raises: none - - :rtype: none - """ - bot = p_bot - bot.infinity_polling() - while 1: - time.sleep(3) \ No newline at end of file From df418fd93c871d4eef43f5e588eb10487e3376a6 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 10:02:32 +0100 Subject: [PATCH 32/33] edit reqs --- telegram_bot/requirements.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index e81b367..d1a60c3 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -1,8 +1,5 @@ pyTelegramBotAPI~=4.4.0 -beautifulsoup4==4.10.0 Markdown==3.3.6 -Pillow==9.0.1 yfinance==0.1.70 newsapi-python -pandas~=1.4.1 python-dotenv~=0.19.2 From 9e2cdc00b5ed44d20322ddc7ac0cf8e6e9bdd2d4 Mon Sep 17 00:00:00 2001 From: Rripped <75929322+Rripped@users.noreply.github.com> Date: Wed, 16 Mar 2022 10:08:14 +0100 Subject: [PATCH 33/33] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 75ba1f9..96a70d7 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ WebEngineering2 Projekt: Aktien und News Bot für Telegram - Datenbank -> database/* ## Local setup for telegram bot -1. create .env and set API keys etc. (use .env.example as a layout) -2. install required libs via ``pip install -r ./telegram_bot/requirements.txt`` -3. run bot.py via ``python ./telegram_bot/bot.py`` +0. optional: build virtual env by ``python -m venv venv`` + ``env/Scripts/activate`` +2. create .env and set API keys etc. (use .env.example as a layout) +3. install required libs via ``pip install -r ./telegram_bot/requirements.txt`` +4. run bot.py via ``python ./telegram_bot/bot.py``