Small problem with next step handler. Changed db with todays_product bool

This commit is contained in:
Kellermann 2022-05-28 11:44:23 +02:00
parent 9bdd4a9b71
commit 1da29dab81
4 changed files with 144 additions and 13 deletions

View File

@ -26,6 +26,7 @@ import pandas
from db import User, session, Product, Score
from fetcher import *
import helper_functions as hf
load_dotenv(dotenv_path='.env') # load environment variables
@ -486,12 +487,22 @@ def time_in_range(start, end, current):
"""Returns whether current is in the range [start, end]""" # docstring is missing!!!!!
return start <= current <= end
def find_todays_product_from_db():
"""Find todays product from db based on todays_product
"""
product = None
for element in session.query(Product).all():
if element.todays_product:
product = element
break
return product
@bot.message_handler(commands=['daily', 'Daily'])
def daily_message(message):
"""change user name
"""send daily challenge
Args:
message (Message): Message from telegram user, here /changename
message (Message): Message from telegram user, here /daily
Returns:
None: None
@ -528,6 +539,35 @@ def daily_message(message):
iteration-=1
time.sleep(1)
product_for_today=find_todays_product_from_db()
bot.send_message(chat_id=user_id, text=str(hf.make_markdown_proof(product_for_today.image_link)), parse_mode="MARKDOWNV2")
start_time = time.time()
bot.register_next_step_handler((message,start_time), get_user_guess)
def get_time_difference(start_time, end_time):
"""Get time difference
"""
return end_time - start_time
def get_user_guess(message, start_time):
"""Get users guess after typing /daily
Args:
message (Message): Message element to react to. In this case next step after /daily
start_time (time.time): Time the user got the image
"""
end_time = time.time()
user_id = int(message.from_user.id)
user_guess = str(message.text)
if get_time_difference(start_time, end_time) > 35:
bot.send_message(chat_id=user_id, text="You took too long to guess.\n"
"No more tries today.")
return
else:
message_text=f"You guessed {user_guess}"
bot.send_message(chat_id=user_id, text = message_text)
@bot.message_handler(commands=['addproduct', 'Addproduct'])

View File

@ -9,14 +9,14 @@ __license__ = "None"
import time
import sys
from apscheduler.schedulers.background import BackgroundScheduler
import pandas
import random
from apscheduler.schedulers.background import BackgroundScheduler
from bot import bot
from db import User, session, Product
CHALLENGE_READY = "0 8 * * *"
CHALLENGE_OVER = "0 22 * * *"
GET_NEW_PRODUCT = "0 0 * * *"
@ -52,7 +52,7 @@ def start_challenges():
,args = ("over", ))
# Get new product
my_scheduler.add_job(get_todays_product, 'cron'\
my_scheduler.add_job(set_todays_product, 'cron'\
,day_of_week = new_product_split[4] \
, hour= new_product_split[1] \
, minute = new_product_split[0]\
@ -65,20 +65,42 @@ def start_challenges():
my_scheduler.shutdown()
start_challenges()
def get_todays_product():
def set_todays_product():
"""Get a random product from the database
Returns:
Product: random product
"""
# Find old product and set todays_product false
products = []
for element in session.query(Product).all():
products.append(element)
if element.todays_product:
element.todays_product = False
session.commit()
products.append(element)
else:
products.append(element)
# choose random product
random_product = products[int(len(products) * random.random())]
return random_product
# find product_id in db and delete element
session.query(Product).filter(Product.product_id == random_product.product_id).delete()
# insert with todays_product True
product=Product(
product_id=random_product.product_id,
price=random_product.price,
image_link=random_product.image_link,
title=random_product.title,
todays_product=True
)
session.add(product)
session.commit()
def send_current_event(str_event):
@ -102,9 +124,7 @@ def send_current_event(str_event):
if __name__ == "__main__":
send_current_event("start")
time.sleep(10)
set_todays_product()
try:
start_challenges()
sys.exit(-1)

View File

@ -49,10 +49,11 @@ class Product(Base):
title = Column(String(5000))
description = Column(String(5000))
date = Column(DateTime)
todays_product = Column(Boolean)
def __repr__(self):
return "<Product(product_id='%s', price='%s', image_link='%s', title='%s', description='%s', date='%s')>" % (
self.product_id, self.price, self.image_link, self.title, self.description, self.date)
return "<Product(product_id='%s', price='%s', image_link='%s', title='%s', description='%s', date='%s', todays_product='%s')>" % (
self.product_id, self.price, self.image_link, self.title, self.description, self.date, self.todays_product)
# Create all tables by issuing CREATE TABLE commands to the DB.

View File

@ -0,0 +1,70 @@
"""
script for helper functions for bot related stuff
"""
__author__ = "Florian Kellermann, Linus Eickhoff, Florian Kaiser"
__date__ = "28.05.2022"
__version__ = "1.0.0"
__license__ = "None"
def contains_markdownv1_symbols(text):
""" checks if text contains markdown symbols
:type text: string
:param text: text to check
:return: true if text contains markdown symbols
:rtype: bool
"""
if text.find("_") != -1 or text.find("*") != -1 or text.find("`") != -1: # check if text contains relevant markdown symbols
return True
return False
def make_markdown_proof(text): # used to avoid errors related to markdown parsemode for telegram messaging
""" makes text markdown proof
:type text: string
:param text: text to make markdown proof
:return: markdown proof text
:rtype: string
"""
text = str(text)
text = text.replace("_", "\\_") # replace _ with \_ because \ is used as escape character in markdown, double escape is needed because \ is also a escape character in strings
text = text.replace("*", "\\*")
text = text.replace("`", "\\`")
text = text.replace("[", "\\[")
text = text.replace("]", "\\]")
text = text.replace("(", "\\(")
text = text.replace(")", "\\)")
text = text.replace("#", "\\#")
text = text.replace("+", "\\+")
text = text.replace("-", "\\-")
text = text.replace("!", "\\!")
text = text.replace(".", "\\.")
text = text.replace("?", "\\?")
text = text.replace("/", "\\/")
text = text.replace("~", "\\~")
text = text.replace("|", "\\|")
text = text.replace("<", "\\<")
text = text.replace(">", "\\>")
text = text.replace("&", "\\&")
text = text.replace("^", "\\^")
text = text.replace("$", "\\$")
text = text.replace("%", "\\%")
text = text.replace("=", "\\=")
text = text.replace("@", "\\@")
return text
if __name__ == '__main__':
print("this is a module for helper functions for the bot and should not be run directly")
print(make_markdown_proof("_test_"))
text = make_markdown_proof("_test_")
print(f"{text}")