mirror of
https://gitlab.com/simple-stock-bots/simple-stock-bot.git
synced 2025-06-16 15:17:28 +00:00
Fix logging
This commit is contained in:
parent
bf4b3032f1
commit
45a590a4a9
@ -1,7 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
from logging import warning
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@ -10,6 +9,8 @@ import schedule
|
|||||||
|
|
||||||
from Symbol import Stock
|
from Symbol import Stock
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class MarketData:
|
class MarketData:
|
||||||
"""
|
"""
|
||||||
@ -35,7 +36,7 @@ class MarketData:
|
|||||||
self.MARKETDATA_TOKEN = ""
|
self.MARKETDATA_TOKEN = ""
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.MARKETDATA_TOKEN = ""
|
self.MARKETDATA_TOKEN = ""
|
||||||
warning("Starting without an MarketData.app Token will not allow you to get market data!")
|
log.warning("Starting without an MarketData.app Token will not allow you to get market data!")
|
||||||
|
|
||||||
if self.MARKETDATA_TOKEN != "":
|
if self.MARKETDATA_TOKEN != "":
|
||||||
schedule.every().day.do(self.clear_charts)
|
schedule.every().day.do(self.clear_charts)
|
||||||
@ -134,6 +135,14 @@ class MarketData:
|
|||||||
else:
|
else:
|
||||||
return f"Getting a quote for {symbol} encountered an error."
|
return f"Getting a quote for {symbol} encountered an error."
|
||||||
|
|
||||||
|
def spark_reply(self, symbol: Stock) -> str:
|
||||||
|
if quoteResp := self.get(f"stocks/quotes/{symbol}/"):
|
||||||
|
changePercent = round(quoteResp["changepct"][0], 2)
|
||||||
|
return f"`{symbol.tag}`: {changePercent}%"
|
||||||
|
else:
|
||||||
|
logging.warning(f"{symbol} did not have 'changepct' field.")
|
||||||
|
return f"`{symbol.tag}`"
|
||||||
|
|
||||||
def intra_reply(self, symbol: Stock) -> pd.DataFrame:
|
def intra_reply(self, symbol: Stock) -> pd.DataFrame:
|
||||||
"""Returns price data for a symbol of the past month up until the previous trading days close.
|
"""Returns price data for a symbol of the past month up until the previous trading days close.
|
||||||
Also caches multiple requests made in the same day.
|
Also caches multiple requests made in the same day.
|
||||||
|
@ -26,13 +26,8 @@ Simply calling a symbol in any message that the bot can see will also return the
|
|||||||
|
|
||||||
**Commands**
|
**Commands**
|
||||||
- `/donate [amount in USD]` to donate. 🎗️
|
- `/donate [amount in USD]` to donate. 🎗️
|
||||||
- `/dividend $[symbol]` Dividend information for the symbol. 📅
|
|
||||||
- `/intra $[symbol]` Plot of the stocks movement since the last market open. 📈
|
- `/intra $[symbol]` Plot of the stocks movement since the last market open. 📈
|
||||||
- `/chart $[symbol]` Plot of the stocks movement for the past 1 month. 📊
|
- `/chart $[symbol]` Plot of the stocks movement for the past 1 month. 📊
|
||||||
- `/news $[symbol]` News about the symbol. 📰
|
|
||||||
- `/info $[symbol]` General information about the symbol. ℹ️
|
|
||||||
- `/stat $[symbol]` Key statistics about the symbol. 🔢
|
|
||||||
- `/cap $[symbol]` Market Capitalization of symbol. 💰
|
|
||||||
- `/trending` Trending Stocks and Cryptos. 💬
|
- `/trending` Trending Stocks and Cryptos. 💬
|
||||||
- `/help` Get some help using the bot. 🆘
|
- `/help` Get some help using the bot. 🆘
|
||||||
|
|
||||||
|
34
bot.py
34
bot.py
@ -8,7 +8,6 @@ import os
|
|||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
import traceback
|
import traceback
|
||||||
import logging as log
|
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
import mplfinance as mpf
|
import mplfinance as mpf
|
||||||
@ -32,6 +31,10 @@ from telegram.ext import (
|
|||||||
from symbol_router import Router
|
from symbol_router import Router
|
||||||
from T_info import T_info
|
from T_info import T_info
|
||||||
|
|
||||||
|
# Enable logging
|
||||||
|
logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO)
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
TELEGRAM_TOKEN = os.environ["TELEGRAM"]
|
TELEGRAM_TOKEN = os.environ["TELEGRAM"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -43,10 +46,7 @@ except KeyError:
|
|||||||
s = Router()
|
s = Router()
|
||||||
t = T_info()
|
t = T_info()
|
||||||
|
|
||||||
# Enable logging
|
|
||||||
logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
log.info("Bot script started.")
|
log.info("Bot script started.")
|
||||||
|
|
||||||
|
|
||||||
@ -304,7 +304,6 @@ def trending(update: Update, context: CallbackContext):
|
|||||||
context.bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING)
|
context.bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING)
|
||||||
|
|
||||||
trending_list = s.trending()
|
trending_list = s.trending()
|
||||||
log.info(trending_list)
|
|
||||||
|
|
||||||
update.message.reply_text(
|
update.message.reply_text(
|
||||||
text=trending_list,
|
text=trending_list,
|
||||||
@ -380,22 +379,21 @@ def error(update: Update, context: CallbackContext):
|
|||||||
log.warning(f"Logging error: {err_code}")
|
log.warning(f"Logging error: {err_code}")
|
||||||
|
|
||||||
if update:
|
if update:
|
||||||
message = (
|
log.warning(
|
||||||
f"An exception was raised while handling an update\n"
|
f"An exception was raised while handling an update\n"
|
||||||
f"<pre>update = {html.escape(json.dumps(update.to_dict(), indent=2, ensure_ascii=False))}"
|
f"\tupdate = {html.escape(json.dumps(update.to_dict(), indent=2, ensure_ascii=False))}\n"
|
||||||
"</pre>\n\n"
|
f"\tcontext.chat_data = {str(context.chat_data)}\n"
|
||||||
f"<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>\n\n"
|
f"\tcontext.user_data = {str(context.user_data)}\n"
|
||||||
f"<pre>context.user_data = {html.escape(str(context.user_data))}</pre>\n\n"
|
f"\t{html.escape(tb_string)}"
|
||||||
f"<pre>{html.escape(tb_string)}</pre>"
|
|
||||||
)
|
)
|
||||||
log.warning(message)
|
|
||||||
else:
|
|
||||||
log.warning(tb_string)
|
|
||||||
|
|
||||||
update.message.reply_text(
|
update.message.reply_text(
|
||||||
text=f"An error has occured. Please inform @MisterBiggs if the error persists. Error Code: `{err_code}`",
|
text=f"An error has occured. Please inform @MisterBiggs if the error persists. Error Code: `{err_code}`",
|
||||||
parse_mode=telegram.ParseMode.MARKDOWN,
|
parse_mode=telegram.ParseMode.MARKDOWN,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
log.warning("No message to send to user.")
|
||||||
|
log.warning(tb_string)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import logging as log
|
import logging
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@ -8,6 +8,8 @@ from markdownify import markdownify
|
|||||||
|
|
||||||
from Symbol import Coin
|
from Symbol import Coin
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class cg_Crypto:
|
class cg_Crypto:
|
||||||
"""
|
"""
|
||||||
|
@ -4,3 +4,4 @@ flake8==5.0.4
|
|||||||
Flake8-pyproject==1.2.3
|
Flake8-pyproject==1.2.3
|
||||||
pylama==8.4.1
|
pylama==8.4.1
|
||||||
mypy==1.2.0
|
mypy==1.2.0
|
||||||
|
types-cachetools==5.3.0.5
|
@ -5,7 +5,6 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import logging as log
|
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import schedule
|
import schedule
|
||||||
@ -17,6 +16,8 @@ from Symbol import Coin, Stock, Symbol
|
|||||||
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Router:
|
class Router:
|
||||||
STOCK_REGEX = "(?:^|[^\\$])\\$([a-zA-Z.]{1,6})"
|
STOCK_REGEX = "(?:^|[^\\$])\\$([a-zA-Z.]{1,6})"
|
||||||
@ -77,9 +78,9 @@ class Router:
|
|||||||
else:
|
else:
|
||||||
symbols.append(Coin(sym))
|
symbols.append(Coin(sym))
|
||||||
if symbols:
|
if symbols:
|
||||||
log.info(symbols)
|
|
||||||
for symbol in symbols:
|
for symbol in symbols:
|
||||||
self.trending_count[symbol.tag] = self.trending_count.get(symbol.tag, 0) + trending_weight
|
self.trending_count[symbol.tag] = self.trending_count.get(symbol.tag, 0) + trending_weight
|
||||||
|
log.warning(self.trending_count)
|
||||||
|
|
||||||
return symbols
|
return symbols
|
||||||
|
|
||||||
@ -303,8 +304,7 @@ class Router:
|
|||||||
|
|
||||||
for symbol in symbols:
|
for symbol in symbols:
|
||||||
if isinstance(symbol, Stock):
|
if isinstance(symbol, Stock):
|
||||||
replies.append("Command not supported for stocks.")
|
replies.append(self.stock.spark_reply(symbol))
|
||||||
# replies.append(self.stock.spark_reply(symbol))
|
|
||||||
elif isinstance(symbol, Coin):
|
elif isinstance(symbol, Coin):
|
||||||
replies.append(self.crypto.spark_reply(symbol))
|
replies.append(self.crypto.spark_reply(symbol))
|
||||||
else:
|
else:
|
||||||
@ -322,26 +322,21 @@ class Router:
|
|||||||
List of preformatted strings to be sent to user.
|
List of preformatted strings to be sent to user.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
stocks = self.stock.trending()
|
# stocks = self.stock.trending()
|
||||||
coins = self.crypto.trending()
|
coins = self.crypto.trending()
|
||||||
|
|
||||||
reply = ""
|
reply = ""
|
||||||
|
|
||||||
|
log.warning(self.trending_count)
|
||||||
if self.trending_count:
|
if self.trending_count:
|
||||||
reply += "🔥Trending on the Stock Bot:\n`"
|
reply += "🔥Trending on the Stock Bot:\n`"
|
||||||
reply += "━" * len("Trending on the Stock Bot:") + "`\n"
|
reply += "━" * len("Trending on the Stock Bot:") + "`\n"
|
||||||
|
|
||||||
sorted_trending = [s[0] for s in sorted(self.trending_count.items(), key=lambda item: item[1])][::-1][0:5]
|
sorted_trending = [s[0] for s in sorted(self.trending_count.items(), key=lambda item: item[1])][::-1][0:5]
|
||||||
|
log.warning(sorted_trending)
|
||||||
for t in sorted_trending:
|
for t in sorted_trending:
|
||||||
reply += self.spark_reply(self.find_symbols(t))[0] + "\n"
|
reply += self.spark_reply(self.find_symbols(t))[0] + "\n"
|
||||||
|
|
||||||
if stocks:
|
|
||||||
reply += "\n\n💵Trending Stocks:\n`"
|
|
||||||
reply += "━" * len("Trending Stocks:") + "`\n"
|
|
||||||
for stock in stocks:
|
|
||||||
reply += stock + "\n"
|
|
||||||
|
|
||||||
if coins:
|
if coins:
|
||||||
reply += "\n\n🦎Trending Crypto:\n`"
|
reply += "\n\n🦎Trending Crypto:\n`"
|
||||||
reply += "━" * len("Trending Crypto:") + "`\n"
|
reply += "━" * len("Trending Crypto:") + "`\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user