diff --git a/bot/credentials.py b/bot/credentials.py index c790bb0..e389713 100644 --- a/bot/credentials.py +++ b/bot/credentials.py @@ -1,5 +1,5 @@ secrets = { - "TELEGRAM_TOKEN": "TELEGRAM BOT TOKEN HERE", + "TELEGRAM_TOKEN": "724630968:AAG3-J26jID34AK_SJg5nJCgr7atiVOZc6A", "TWITTER_CONSUMER_API": "CONSUMER_API", "TWITTER_CONSUMER_SECRET": "CONSUMER_SECRET", "TWITTER_ACCESS_TOKEN": "ACCESS_TOKEN", diff --git a/bot/stockBot.py b/bot/stockBot.py index 311e24e..7ae03a4 100644 --- a/bot/stockBot.py +++ b/bot/stockBot.py @@ -11,6 +11,7 @@ import credentials import tickerInfo TOKEN = credentials.secrets["TELEGRAM_TOKEN"] +TICKER_REGEX = "[$]([a-zA-Z]{1,4})" # Enable logging logging.basicConfig( @@ -41,17 +42,15 @@ def news(bot, update): try: # regex to find tickers in messages, looks for up to 4 word characters following a dollar sign and captures the 4 word characters - tickers = re.findall("[$](\w{1,4})", message) + tickers = re.findall(TICKER_REGEX, message) bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING) ## Checks if a ticker was passed in if tickers == []: message = "No Ticker, showing Market News:" news = tickerInfo.stockNews("market") - for i in range(3): - message = "{}\n\n[{}]({})".format( - message, news["title"][i], news["link"][i] - ) + for i in range(len(news["title"])): + message = f"{message}\n\n[{news['title'][i]}]({news['link'][i]})" update.message.reply_text( text=message, parse_mode=telegram.ParseMode.MARKDOWN ) @@ -65,36 +64,22 @@ def news(bot, update): price = tickerData[ticker + "Price"] change = tickerData[ticker + "Change"] - message = ( - "The current stock price of " - + name - + " is $**" - + str(price) - + "**" - ) + message = f"The current stock price of {name} is $**{price}**" if change > 0: - message = ( - message - + ", the stock is currently **up " - + str(change) - + "%**" - ) + message = f"{message}, the stock is currently **up {change}%**" elif change < 0: message = ( - message - + ", the stock is currently **down " - + str(change) - + "%**" + f"{message}, the stock is currently **down {change}%**" ) else: message = ( - message + ", the stock hasn't shown any movement today." + f"{message}, the stock hasn't shown any movement today." ) news = tickerInfo.stockNews(ticker) - for i in range(3): - message = "{}\n\n[{}]({})".format( - message, news["title"][i], news["link"][i] + for i in range(len(news["title"])): + message = ( + f"{message}\n\n[{news['title'][i]}]({news['link'][i]})" ) update.message.reply_text( @@ -112,10 +97,11 @@ def stockInfo(bot, update): try: # regex to find tickers in messages, looks for up to 4 word characters following a dollar sign and captures the 4 word characters - tickers = re.findall("[$](\w{1,4})", message) + tickers = re.findall(TICKER_REGEX, message) - tickerData = tickerInfo.tickerQuote(tickers) - bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING) + if len(tickers) > 0: + tickerData = tickerInfo.tickerQuote(tickers) + bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING) for ticker in tickers: ticker = ticker.upper() @@ -124,22 +110,13 @@ def stockInfo(bot, update): name = tickerData[ticker + "Name"] price = tickerData[ticker + "Price"] change = tickerData[ticker + "Change"] - message = ( - "The current stock price of " + name + " is $**" + str(price) + "**" - ) + message = f"The current stock price of {name} is $**{price}**" if change > 0: - message = ( - message + ", the stock is currently **up " + str(change) + "%**" - ) + message = f"{message}, the stock is currently **up {change}%**" elif change < 0: - message = ( - message - + ", the stock is currently **down " - + str(change) - + "%**" - ) + message = f"{message}, the stock is currently **down {change}%**" else: - message = message + ", the stock hasn't shown any movement today." + message = f"{message}, the stock hasn't shown any movement today." update.message.reply_text( text=message, parse_mode=telegram.ParseMode.MARKDOWN ) @@ -152,10 +129,9 @@ def stockInfo(bot, update): def dividend(bot, update): message = update.message.text chat_id = update.message.chat_id - print("div") try: # regex to find tickers in messages, looks for up to 4 word characters following a dollar sign and captures the 4 word characters - tickers = re.findall("[$](\w{1,4})", message) + tickers = re.findall(TICKER_REGEX, message) bot.send_chat_action(chat_id=chat_id, action=telegram.ChatAction.TYPING) for ticker in tickers: diff --git a/bot/tickerInfo.py b/bot/tickerInfo.py index e031cea..a3d13ca 100644 --- a/bot/tickerInfo.py +++ b/bot/tickerInfo.py @@ -38,13 +38,13 @@ def stockNews(ticker): """Makes a bunch of strings that are links to news websites for an input ticker""" print("Gather News on " + ticker) - newsLink = "https://api.iextrading.com/1.0/stock/{}/news/last/5".format(ticker) - + newsLink = f"https://api.iextrading.com/1.0/stock/{ticker}/news/last/5" + print(newsLink) with urllib.request.urlopen(newsLink) as url: data = json.loads(url.read().decode()) news = {"link": [], "title": []} - for i in range(3): + for i in range(len(data)): news["link"].append(data[i]["url"]) news["title"].append(data[i]["headline"]) return news @@ -52,12 +52,12 @@ def stockNews(ticker): def stockLogo(ticker): """returns a png of an input ticker""" - logoURL = "https://g.foolcdn.com/art/companylogos/mark/" + ticker + ".png" + logoURL = f"https://g.foolcdn.com/art/companylogos/mark/{ticker}.png" return logoURL def stockInfo(ticker): - infoURL = "https://api.iextrading.com/1.0/stock/{}/stats".format(ticker) + infoURL = f"https://api.iextrading.com/1.0/stock/{ticker}/stats" with urllib.request.urlopen(infoURL) as url: data = json.loads(url.read().decode()) @@ -99,9 +99,7 @@ def stockDividend(ticker): h, m = divmod(h, 3600) m, s = divmod(m, 60) - countdownMessage = "\n\nThe dividend is in: {:.0f} Days {:.0f} Hours {:.0f} Minutes {:.0f} Seconds.".format( - d, h, m, s - ) + countdownMessage = f"\n\nThe dividend is in: {d:.0f} Days {h:.0f} Hours {m:.0f} Minutes {s:.0f} Seconds." message = line1 + countdownMessage return message