From 8ea805b8e9db49e28a55792d38740ebc4189e7ac Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 08:47:02 +0100 Subject: [PATCH 01/20] 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 02/20] 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 03/20] 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 04/20] 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 05/20] 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 06/20] 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 07/20] 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 08/20] 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 09/20] 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 10/20] 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`` From 3ec3b3cd992b58d44ca57b65d2436f7ac212012d Mon Sep 17 00:00:00 2001 From: Florian Kaiser <44125287+H4CK3R-01@users.noreply.github.com> Date: Wed, 16 Mar 2022 10:14:31 +0100 Subject: [PATCH 11/20] Update .drone.yml --- .drone.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.drone.yml b/.drone.yml index 2c4ae1d..dfc90d7 100644 --- a/.drone.yml +++ b/.drone.yml @@ -25,6 +25,9 @@ steps: repo: from_secret: repo_webservice dockerfile: webservice/Dockerfile + when: + branch: + - main - name: publish_bot image: plugins/docker @@ -38,6 +41,9 @@ steps: repo: from_secret: repo_bot dockerfile: telegram_bot/Dockerfile + when: + branch: + - main - name: deploy image: appleboy/drone-ssh @@ -58,3 +64,6 @@ steps: PLUGIN_PASSWORD: from_secret: ssh_password PLUGIN_SCRIPT: /opt/docker/TelegramAktienBot/deploy.sh + when: + branch: + - main From 1038a240937555922cb8895a14f0b74dd1185b54 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 10:39:29 +0100 Subject: [PATCH 12/20] Removed pandas --- telegram_bot/news/news_fetcher.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index 836b2fe..af07cb3 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -10,8 +10,6 @@ import sys import os import json -import pandas as pd - from newsapi import NewsApiClient from dotenv import load_dotenv From f197b7574493a17278a7ed76c354310932e169ed Mon Sep 17 00:00:00 2001 From: H4CK3R-01 Date: Wed, 16 Mar 2022 10:41:13 +0100 Subject: [PATCH 13/20] Use python:3.10-slim --- telegram_bot/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/telegram_bot/Dockerfile b/telegram_bot/Dockerfile index df6b0ce..dc51065 100644 --- a/telegram_bot/Dockerfile +++ b/telegram_bot/Dockerfile @@ -1,7 +1,6 @@ -FROM python:3.10-alpine +FROM python:3.10-slim WORKDIR /srv/flask_app -RUN apk add build-base jpeg-dev zlib-dev musl-dev linux-headers g++ COPY telegram_bot/requirements.txt /srv/flask_app/ From f7a09e063ca58a62e35f058829bef3670e77fb25 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 10:41:43 +0100 Subject: [PATCH 14/20] Changed requirements --- telegram_bot/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index d1a60c3..417310c 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -1,5 +1,5 @@ pyTelegramBotAPI~=4.4.0 -Markdown==3.3.6 -yfinance==0.1.70 -newsapi-python +Markdown~=3.3.6 +yfinance~=0.1.70 +newsapi-python~=0.2.6 python-dotenv~=0.19.2 From 7cdc6bc57d2327832a8898651c1c9b4c31fd5f1d Mon Sep 17 00:00:00 2001 From: Florian Kaiser <44125287+H4CK3R-01@users.noreply.github.com> Date: Wed, 16 Mar 2022 10:49:25 +0100 Subject: [PATCH 15/20] Update .drone.yml --- .drone.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index dfc90d7..b4ab91f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -27,7 +27,8 @@ steps: dockerfile: webservice/Dockerfile when: branch: - - main + include: + - main - name: publish_bot image: plugins/docker @@ -43,7 +44,8 @@ steps: dockerfile: telegram_bot/Dockerfile when: branch: - - main + include: + - main - name: deploy image: appleboy/drone-ssh @@ -66,4 +68,5 @@ steps: PLUGIN_SCRIPT: /opt/docker/TelegramAktienBot/deploy.sh when: branch: - - main + include: + - main From 35c3d57b31a3eed73f5a46de5552d5ccbc2daad2 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 11:17:43 +0100 Subject: [PATCH 16/20] small changes --- telegram_bot/news/news_fetcher.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index af07cb3..784961d 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -18,10 +18,6 @@ load_dotenv() # Init newsapi = NewsApiClient(api_key=os.getenv('NEWS_API_KEY')) - -# /v2/top-headlines/sources -sources = newsapi.get_sources() - def get_top_news_by_keyword(keyword): """get top news to keyword Args: From 3b675cf7fc414ec7d538120af015ae7b6b7c3872 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 12:58:58 +0100 Subject: [PATCH 17/20] updated reqs and news sources --- telegram_bot/news/news_fetcher.py | 2 +- telegram_bot/requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index 784961d..5f00fbc 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -26,7 +26,7 @@ def get_top_news_by_keyword(keyword): Returns: JSON/dict: dict containing articles """ - top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn', language='en') + top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn,buzzfeed,fox', language='en') return top_headlines def format_article(article): diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index 417310c..4dcfe5c 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -3,3 +3,4 @@ Markdown~=3.3.6 yfinance~=0.1.70 newsapi-python~=0.2.6 python-dotenv~=0.19.2 +requests~=2.27.1 From 536bdf3bd6f147bb366cd0ee3166b04d6793a830 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 13:32:26 +0100 Subject: [PATCH 18/20] added auto sources for news --- telegram_bot/bot.py | 2 +- telegram_bot/news/news_fetcher.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 4f1be7e..401894b 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -205,7 +205,7 @@ def send_news(message): :rtype: none """ - keyword = "business" + keyword = "bitcoin" user_id = int(message.from_user.id) #Get Information for user with this id diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index 5f00fbc..69c0807 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -9,6 +9,7 @@ __license__ = "None" import sys import os import json +import requests from newsapi import NewsApiClient from dotenv import load_dotenv @@ -16,7 +17,12 @@ from dotenv import load_dotenv load_dotenv() # Init -newsapi = NewsApiClient(api_key=os.getenv('NEWS_API_KEY')) +api_key = os.getenv('NEWS_API_KEY') +newsapi = NewsApiClient(api_key=api_key) +source_json = requests.get(f"https://newsapi.org/v2/top-headlines/sources?apiKey={api_key}&language=en").json() +sources = source_json["sources"] +str_sources = ",".join([source["id"] for source in sources]) + def get_top_news_by_keyword(keyword): """get top news to keyword @@ -26,7 +32,7 @@ def get_top_news_by_keyword(keyword): Returns: JSON/dict: dict containing articles """ - top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn,buzzfeed,fox', language='en') + top_headlines = newsapi.get_top_headlines(q=keyword, sources=str_sources, language='en') return top_headlines def format_article(article): @@ -49,6 +55,6 @@ if __name__ == '__main__': print("fetching top news by keyword business...") - articles = get_top_news_by_keyword("business") + articles = get_top_news_by_keyword("bitcoin") formatted_article = format_article(articles["articles"][0]) print(formatted_article) \ No newline at end of file From e4423a76b7ceab32990b95035f4d7ef79e26b326 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 17:42:46 +0100 Subject: [PATCH 19/20] update function now getting share data from json and updating on all shares --- telegram_bot/api_handler.py | 7 ++++ telegram_bot/bot.py | 32 ++++++++++---- telegram_bot/shares/share_fetcher.py | 55 ++++++------------------- telegram_bot/shares/shares_example.json | 16 +++++++ 4 files changed, 59 insertions(+), 51 deletions(-) create mode 100644 telegram_bot/api_handler.py create mode 100644 telegram_bot/shares/shares_example.json diff --git a/telegram_bot/api_handler.py b/telegram_bot/api_handler.py new file mode 100644 index 0000000..69c4974 --- /dev/null +++ b/telegram_bot/api_handler.py @@ -0,0 +1,7 @@ +""" +script for communicating with webservice to get data from database +""" +__author__ = "Florian Kellermann, Linus Eickhoff" +__date__ = "16.03.2022" +__version__ = "0.0.1" +__license__ = "None" \ No newline at end of file diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 401894b..5705326 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -20,6 +20,7 @@ import telebot import time import sys import logging +import json import news.news_fetcher as news import shares.share_fetcher as share_fetcher @@ -30,7 +31,7 @@ from dotenv import load_dotenv load_dotenv() -bot_version = "0.1.1" +bot_version = "0.2.1" user_list = [] class User: # Currently saving users in this class to test functionality -> later database @@ -161,15 +162,30 @@ def send_update(message): """ user_id = int(message.from_user.id) - share_fetcher = share_fetcher.Share_Handler() + #Can be deleted when getting from database + dirname = os.path.dirname(__file__) + json_path = os.path.join(dirname, 'shares/shares_example.json') - #Get Information for user with this id - #call Share_Handler - bot.send_message(chat_id=user_id, text='This is your update') + with open(json_path) as json_file: + json_share_data = json.load(json_file) + int_share_count = int(json_share_data['share_count']) + + for i in range(int_share_count): + + my_share = json_share_data['shares'][i] + my_share_symbol = str(my_share['symbol']) + my_share_amount = float(my_share['amount_bought']) + my_share_buy_price = float(my_share['price_bought']) + my_share_course = float(share_fetcher.get_share_price(my_share_symbol)) + + + my_update_message = f'Symbol: {my_share_symbol}\nPrice: {my_share_course}\nBought for: {my_share_buy_price}\n\ +Amount owned: {my_share_amount}\nWin/Lose: {(my_share_amount*my_share_course) - (my_share_amount*my_share_buy_price)}' + bot.send_message(chat_id=user_id, text=my_update_message) @bot.message_handler(commands=['share']) -def send_update(message): +def send_share_update(message): """ Send price of a specific share :type message: message object bot @@ -187,10 +203,8 @@ def send_update(message): 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)) + str_share_price = share_fetcher.get_share_price(str(message.text)) bot.reply_to(message, str_share_price) - @bot.message_handler(commands=['news']) diff --git a/telegram_bot/shares/share_fetcher.py b/telegram_bot/shares/share_fetcher.py index f107519..1aa3376 100644 --- a/telegram_bot/shares/share_fetcher.py +++ b/telegram_bot/shares/share_fetcher.py @@ -7,50 +7,21 @@ __version__ = "0.0.2" __license__ = "None" import yfinance +import json +def get_share_price(str_symbol): + + """ get current share price for a certain symbol + :type str_symbol: string + :param str_symbol: share symbol to get price for -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 - - + :raises: -if __name__ == '__main__': - - """ test object and get share price - :raises: none - - :rtype: none + :rtype: """ - new_handler = Share_Handler() - print(new_handler.get_share_price("TL0.DE")) \ No newline at end of file + 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"]}' + my_return_string = f'{my_share_data["regularMarketPrice"]}' + return my_return_string \ No newline at end of file diff --git a/telegram_bot/shares/shares_example.json b/telegram_bot/shares/shares_example.json new file mode 100644 index 0000000..79e3273 --- /dev/null +++ b/telegram_bot/shares/shares_example.json @@ -0,0 +1,16 @@ +{ + "user": "NormalParameter", + "share_count": 2, + "shares": [ + { + "symbol": "APC.DE", + "price_bought": "50.06", + "amount_bought": "5.1" + }, + { + "symbol": "TL0.DE", + "price_bought": "450.06", + "amount_bought": "5.13" + } + ] +} \ No newline at end of file From 2961bbb4294b603c694edd0bf0ec74661641b833 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 17:49:57 +0100 Subject: [PATCH 20/20] Welcome message for updates and change in json --- telegram_bot/bot.py | 3 +++ telegram_bot/shares/shares_example.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 5705326..e3e4f28 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -169,6 +169,9 @@ def send_update(message): with open(json_path) as json_file: json_share_data = json.load(json_file) int_share_count = int(json_share_data['share_count']) + str_username = str(json_share_data['user']) + bot.send_message(chat_id=user_id, text=f'Hello {str_username}. Here is the update on your currently owned shares:') + for i in range(int_share_count): diff --git a/telegram_bot/shares/shares_example.json b/telegram_bot/shares/shares_example.json index 79e3273..3b3b2fc 100644 --- a/telegram_bot/shares/shares_example.json +++ b/telegram_bot/shares/shares_example.json @@ -1,5 +1,5 @@ { - "user": "NormalParameter", + "user": "FloKell", "share_count": 2, "shares": [ {