diff --git a/TelegrammBotProject/Procfile b/TelegrammBotProject/Procfile new file mode 100644 index 0000000..a8b8266 --- /dev/null +++ b/TelegrammBotProject/Procfile @@ -0,0 +1 @@ +bot: python3 telegabot.py \ No newline at end of file diff --git a/TelegrammBotProject/categories.json b/TelegrammBotProject/categories.json new file mode 100644 index 0000000..b21d023 --- /dev/null +++ b/TelegrammBotProject/categories.json @@ -0,0 +1,19 @@ +{"categories":[ + { + "id": "1", + "name": "Первые блюда" +}, +{ + "id": "2", + "name": "Салаты" +}, +{ + "id": "3", + "name": "Основные блюда" +}, +{ + "id": "4", + "name": "Дессерты" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProject/check_function.py b/TelegrammBotProject/check_function.py new file mode 100644 index 0000000..2f7af76 --- /dev/null +++ b/TelegrammBotProject/check_function.py @@ -0,0 +1,170 @@ +from database_connection import engine +from db_classes import Categories, Dishes, Clients, Marks,Base +from sqlalchemy.sql import select, update, join +from sqlalchemy import and_, or_, between, asc, desc,update +from sqlalchemy.orm import sessionmaker +from sqlalchemy.sql import func +import plotly.express as px +import plotly.graph_objects as go + + + +# Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +# функция для добавления нового пользователя +def check_user_exist(username): + + try: + # q = session.query(Clients).filter_by(Clients.id == '1') + + if bool(session.query(Clients.id).filter_by(id = '1').first()) is False: + + row = Clients(id = '1',client_username = username) + session.add(row) + session.commit() + search_query = (session.query(Clients).filter_by(id = '1').one()).client_username + print('Hello,', search_query) + + else: + + if bool(session.query(Clients.client_username).filter_by(client_username = username).first()) is True: + print('User already exist') + + else: + id_value = session.query(Clients.id).count() + row = Clients(id = id_value+1, client_username = username) + session.add(row) + session.commit() + print('We successfully added you to our database') + + except: + print('This user already exsist') + +# функция для проверки значения оценки +def check_mark_value(id,mark,values,id_client,dish_id,text): + if mark > 5: + print('Max value is 5') + else: + row = Marks(id=id, mark_value=values,client_id = id_client,dish_id = dish_id,text_reviw = text) + session.add(row) + session.commit() +# bool(User.query.filter_by(name='John Smith').first()) + +# функция для проверки существования блюда +def check_is_dish_exist(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + + else: + return True +# +def if_not_exist_dish(): + + result = session.query(Dishes.dish_name).all() + return 'Такого блюда не существует в нашей базе данных, посмотрите блюда, которые доступны',result + +def result_of_search(dish_name): + + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()) + return result.ingridients, result.text_recipe + + # функция для получения видео рецепта +def get_video_recipe(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + else: + return True + +def get_exsist_video_recipe(dish_name): + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).video_recept + return result +# функция для добавления оценки пользователя +def add_user_mark(mark,client_username,dish_name): + + if bool(session.query(Marks.id).filter_by(id='1').first()) is False: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).first()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).first()).id + + + row = Marks(id= '1', mark_value = mark, client_id = id_found, dish_id = dish_id,user_name = client_username) + session.add(row) + session.commit() + return 'Вы наш первый пользователь.Мы успешно добавили вашу первую оценку' + + elif bool(session.query(Marks).filter(Marks.user_name == client_username).first()) is True: + session.query(Marks).filter(Marks.user_name == client_username).update({Marks.mark_value: mark},synchronize_session=False) + session.commit() + return 'Мы успешно обновили вашу оценку' + else: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).one()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + id_value = session.query(Marks.id).count() + row = Marks(id=id_value + 1, mark_value = mark, client_id = id_found, dish_id = dish_id, user_name = client_username) + session.add(row) + session.commit() + return 'Мы успешно добавили вашу оценку' +# функция для проверки принадлежности блюда к категории +def check_dish_category(dish_name): + id_dish = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + dish_category = (session.query(Categories).filter(Categories.id == id_dish).one()).category_name + return dish_category +# функция добавления комментария пользователя в бд +def add_comments(message,username): + + session.query(Marks).filter(Marks.user_name == username).update({Marks.text_reviw: message},synchronize_session = False) + session.commit() + return 'Мы успешно добавили ваш комментарий' +# функции для просмотре блюд и коментариев +def see_users_comments(): + return session.query(Marks.user_name,Marks.text_reviw).all() + +def see_all_soups(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 1).all()) + +def see_all_main_dishes(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 3).all()) + +def see_all_salads(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 2).all()) + +def see_all_desserts(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 4).all()) + +# график распределения оценок пользователей +def statistic_of_marks(): + result = [] + for i in range(1,6): + result.append(session.query(Marks).filter(Marks.mark_value== i).count()) + + return result +def avarage_of_mark(): + + result = session.query(func.avg(Marks.mark_value).label('average')).all() + # + # sum_of_marks = session.query(Marks.mark_value).all() + return round((result[0][0]),1) + # num_of_marks = len(sum_of_marks) + # result = sum(sum_of_marks)/num_of_marks + # print(result) + + + + + + + + + + + + + + + + + + diff --git a/TelegrammBotProject/clients.json b/TelegrammBotProject/clients.json new file mode 100644 index 0000000..e79d902 --- /dev/null +++ b/TelegrammBotProject/clients.json @@ -0,0 +1,11 @@ +{"clients":[ + { + "id": "2", + "name": "dima" +}, +{ + "id": "3", + "name": "olya" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProject/database_connection.py b/TelegrammBotProject/database_connection.py new file mode 100644 index 0000000..75bd0a8 --- /dev/null +++ b/TelegrammBotProject/database_connection.py @@ -0,0 +1,7 @@ +from sqlalchemy.engine import create_engine + +# для создания таблиц Вам неободимо прописать путь к своей базе данніх oracle +DATABASE_URI = 'postgres+psycopg2://postgres:msn1973msn@localhost:5432/bot' + +engine = create_engine(DATABASE_URI) + diff --git a/TelegrammBotProject/db_classes.py b/TelegrammBotProject/db_classes.py new file mode 100644 index 0000000..d8ab9cf --- /dev/null +++ b/TelegrammBotProject/db_classes.py @@ -0,0 +1,144 @@ +from sqlalchemy import Column, Integer, String, ForeignKey,Text +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import json + +Base = declarative_base() + +from sqlalchemy.orm import relationship, sessionmaker +# создание таблиц +class Categories(Base): + + __tablename__ = 'dish_categories' + + id = Column(Integer, primary_key=True) + category_name = Column(Text) + + styles = relationship('Dishes', backref='dish_categories', lazy=True) + +class Dishes(Base): + + __tablename__ = 'dishes' + + id = Column(Integer, primary_key=True) + dish_name = Column(Text) + id_category = Column(Integer, ForeignKey("dish_categories.id")) + text_recipe = Column(Text) + video_recept = Column(Text) + ingridients = Column(Text) + + +class Clients(Base): + + __tablename__ = 'clients' + + id = Column(Integer, primary_key=True) + client_username = Column(Text) + +class Marks(Base): + + __tablename__ = 'marks' + + id = Column(Integer, primary_key=True) + mark_value = Column(Integer) + client_id = Column(Integer, ForeignKey("clients.id")) + dish_id = Column(Integer, ForeignKey("dishes.id")) + text_reviw = Column(Text) + user_name = Column(Text) + + styles = relationship('Clients', backref='marks', lazy=True) + styles_1 = relationship('Dishes', backref='marks', lazy=True) + +Base.metadata.create_all(engine) + +# добавления данных в бд +# Session = sessionmaker(bind = engine) +# session = Session() +# считывание данных с файла, на другом компьютере прийдеся вставить другой путь к файлам + +# categories = open("C:/Pyprojects/venv/categories.json",encoding="utf-8") +# data_categories = json.load(categories) +# dishes = open("C:/Pyprojects/venv/recipes.json",encoding="utf8") +# data_dishes = json.load(dishes) +# marks = open("C:/Pyprojects/venv/marks.json",encoding="utf8") +# data_marks = json.load(marks) +# clients = open("C:/Pyprojects/venv/clients.json",encoding="utf8") +# data_clients = json.load(clients) + +# добавление категорий блюд +# session.add_all([ +# Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), +# Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), +# Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), +# Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +# ) +# session.commit() +# +# # добавление рецептов и названий блюд +# session.add_all([ +# Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# Dishes(id = data_dishes['dish'][7]['id'], +# dish_name = data_dishes['dish'][7]['name'], +# id_category=data_dishes['dish'][7]['id_category'], +# text_recipe = data_dishes['dish'][7]['text_recipe'], +# video_recept=data_dishes['dish'][7]['video_recipe'], +# ingridients=data_dishes['dish'][7]['ingridients']), +# Dishes(id = data_dishes['dish'][8]['id'], +# dish_name = data_dishes['dish'][8]['name'], +# id_category=data_dishes['dish'][8]['id_category'], +# text_recipe = data_dishes['dish'][8]['text_recipe'], +# video_recept=data_dishes['dish'][8]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# ] +# ) +# session.commit() +# +# session.add_all([ +# Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), +# Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), +# Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), +# Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +# ) +# session.commit() + diff --git a/TelegrammBotProject/filling_db.py b/TelegrammBotProject/filling_db.py new file mode 100644 index 0000000..c2e5b6a --- /dev/null +++ b/TelegrammBotProject/filling_db.py @@ -0,0 +1,154 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import db_classes +import json +from sqlalchemy.orm import relationship, sessionmaker +# +Session = sessionmaker(bind = engine) +session = Session() +# считывание данных с файла, на другом компьютере прийдеся вставить другой путь к файлам + +categories = open("categories.json",encoding="utf-8") +data_categories = json.load(categories) +dishes = open("recipes.json",encoding="utf8") +data_dishes = json.load(dishes) +marks = open("marks.json",encoding="utf8") +data_marks = json.load(marks) +clients = open("clients.json",encoding="utf8") +data_clients = json.load(clients) + +# # добавление категорий блюд +# session.add_all([ +# db_classes.Clients(id = data_clients['clients'][0]['id'], client_username = data_clients['clients'][0]['name']), +# db_classes.Clients(id = data_clients['clients'][1]['id'], client_username = data_clients['clients'][1]['name'])] +# ) +# session.commit() +# +# session.add_all([ +# db_classes.Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][7]['id'], +# dish_name = data_dishes['dish'][7]['name'], +# id_category=data_dishes['dish'][7]['id_category'], +# text_recipe = data_dishes['dish'][7]['text_recipe'], +# video_recept=data_dishes['dish'][7]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][8]['id'], +# dish_name = data_dishes['dish'][8]['name'], +# id_category=data_dishes['dish'][8]['id_category'], +# text_recipe = data_dishes['dish'][8]['text_recipe'], +# video_recept=data_dishes['dish'][8]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# ] +# ) +# session.commit() +# +# session.add_all([ +# db_classes.Marks(id = data_marks['marks'][0]['id'], mark_value = data_marks['marks'][0]['value'], client_id = data_marks['marks'][0]['id_client'], dish_id = data_marks['marks'][0]['id_dish'], text_reviw = data_marks['marks'][0]['text_reviw'],user_name = data_marks['marks'][0]['name']), +# db_classes.Marks(id = data_marks['marks'][1]['id'], mark_value = data_marks['marks'][1]['value'], client_id = data_marks['marks'][1]['id_client'], dish_id = data_marks['marks'][1]['id_dish'], text_reviw = data_marks['marks'][1]['text_reviw'],user_name = data_marks['marks'][1]['name'])] +# ) +# session.commit() + +# добавление рецептов и названий блюд +# session.add_all([ +# db_classes.Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][9]['id'], +# dish_name = data_dishes['dish'][9]['name'], +# id_category=data_dishes['dish'][9]['id_category'], +# text_recipe = data_dishes['dish'][9]['text_recipe'], +# video_recept=data_dishes['dish'][9]['video_recipe'], +# ingridients=data_dishes['dish'][9]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][10]['id'], +# dish_name = data_dishes['dish'][10]['name'], +# id_category=data_dishes['dish'][10]['id_category'], +# text_recipe = data_dishes['dish'][10]['text_recipe'], +# video_recept=data_dishes['dish'][10]['video_recipe'], +# ingridients=data_dishes['dish'][10]['ingridients']), +# ] +# ) + + + + diff --git a/TelegrammBotProject/marks.json b/TelegrammBotProject/marks.json new file mode 100644 index 0000000..58cf64b --- /dev/null +++ b/TelegrammBotProject/marks.json @@ -0,0 +1,19 @@ +{"marks":[ + { + "id": "2", + "value": "4", + "id_client": "2", + "id_dish": "2", + "text_reviw": "Очень удобный в использовании!", + "name":"dima" +}, +{ + "id": "3", + "value": "2", + "id_client": "3", + "id_dish": "3", + "text_reviw": "Очень классній бот, первый помощник на кухне!", + "name":"olya" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProject/recipes.json b/TelegrammBotProject/recipes.json new file mode 100644 index 0000000..514d2bd --- /dev/null +++ b/TelegrammBotProject/recipes.json @@ -0,0 +1,95 @@ +{"dish":[ + { + "id": "1", + "name": "БОРЩ", + "id_category":"1", + "text_recipe":"Мясо вымойте, положите в кастрюлю и залейте холодной водой. Дождитесь, пока закипит, и варите ещё 20 минут. После закипания с помощью шумовки снимите лишнюю пену.Свёклу очистите от кожуры, натрите на крупной тёрке и обжарьте на растительном масле. Влейте немного мясного бульона и оставьте тушиться на медленном огне.Мелко нашинкуйте лук и обжарьте на масле до золотистого цвета. Добавьте морковь, влейте ещё немного бульона и тушите в течение 3—5 минут.Очистите картофель, нарежьте кубиками, добавьте к бульону и дайте закипеть.Затем добавьте мелко нашинкованную свежую капусту. Варите до готовности.Посолите и поперчите по вкусу.В конце добавьте тушёную свёклу, зелень и лавровый лист. Накройте кастрюлю крышкой и варите в течение 3—5 минут, после чего снимите с огня.При подаче заправьте борщ сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=_-9nH4zFThs", + "ingridients": "Говядина (на кости)300—400 г,Капуста (свежая)1,5 кг,Картофель3—4 шт.,Морковь1—2 шт.,Лук (репчатый)1 шт.,Свёкла1 шт.,Сметана100 мл,Масло (растительное)2 ст. л.,Лавровый лист2 листа,Вода1,5—2 л,Зелень (укроп или петрушка)по вкусу,Перец (чёрный молотый)по вкусу,Сольпо вкусу')" +}, +{ + "id": "2", + "name": "ОЛИВЬЕ", + "id_category":"2", + "text_recipe":"Картофель и морковь сварить «в мундирах». Сварить яйца. 2. Тем временем колбасу и огурцы нарезать мелкими кубиками. 3. Готовые овощи и яйца почистить и также нарезать кубиками. 4. Мелко нарезать лук. 5. Все ингредиенты смешать, добавить горошек и заправить майонезом. 6. Украсить зеленью.", + "video_recipe":"https://www.youtube.com/watch?v=z8KpTK5oGBQ", + "ingridients": "картофель - 4-5 штук,морковь - 2 крупные или 3 средние ,консервированный горошек – 1 банка ,колбаса «Докторская» - 300-400 г,соленые или маринованные огурцы – 4-5 штук,яйца – 6 штук,лук – 1 штука,зелень,майонез." +}, +{ + "id": "3", + "name": "РИЗОТТО", + "id_category":"3", + "text_recipe":"Разогрейте сливочное масло в казанке на среднем огне. Добавьте грибы и готовьте, помешивая, 5-10 минут (пока грибы не подрумянятся). Добавьте нарезанную курицу, 1 ч. л. соли, перец и готовьте, помешивая, около 10 минут. Переложите грибы с курицей в другую посуду. В кастрюле доведите до кипения бульон.2. В казанке разогрейте растительное масло. Добавьте лук и обжарьте его на умеренном огне, помешивая, в течение 5 минут. Добавьте рис. Готовьте, помешивая, около 2 минут.3. Влейте в казанок с рисом вино, добавьте 1 ч. л. соли. Готовьте, часто помешивая, до тех пор, пока жидкость не впитается. Добавьте пол стакана кипящего бульона и помешивайте, пока не впитается. Рис должен слегка кипеть (уменьшите огонь, если нужно). Продолжайте готовить рис, подливая по пол стакана бульона и перемешивая (всего – около 25-30 минут). Жидкость, которая не впитается, станет вязкой благодаря высокому содержанию крахмала в рисе. Бульон может весь не понадобиться, а может, придется добавить немного бульона или воды дополнительно.4. Вмешайте курицу с грибами, сыр и петрушку. Прогрейте ризотто с курицей и подавайте блюдо. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=5__wUabM0y8", + "ingridients": "Масло сливочное – 2 ст. л,Грибы, тонко нарезанные – 220 г,Куриные грудки, филе, нарезанное кусочками по 1 см – 300 г,Соль – 1 ч. л.,Перец черный молотый – 1 ч. л.,Бульон куриный – 5 стакан,Масло растительное – 1 ст. л.,Лук репчатый, нарезанный – пол стакана,Рис Арборио – 1 стакан,Вино сухое белое – пол стакана,Сыр Пармезан тертый – пол стакана,Зелень петрушки нарезанная – 2 ст. л." +}, +{ + "id": "4", + "name": "ТИРАМИСУ", + "id_category":"4", + "text_recipe":"Отделить белки от желтков. Желтки растереть с сахаром.Добавить маскарпоне.Перемешать.Белки взбить в крепкую пену.Добавить белки в желтково-сырную массу.Аккуратно перемешать.Палочки окунуть в холодный кофе.Палочки надо окунать очень быстрым движением, чтобы они не размокли.Кофе приготовьте так, как вам нравится (я на 350 мл добавила 4 ч.л. кофе).По желанию, в кофе можно добавить вино, ром, ликер, бренди, или коньяк.В форму (я использовала форму размером 17 на 25 см) плотно выложить палочки, смоченные в кофе.На палочки выложить половину крема.Разровнять.На крем снова выложить палочки, смоченные в кофе.На палочки выложить оставшийся крем.Разровнять.Поставить в холодильник на 5–6 часов.Посыпать через сито какао.Разрезать на порции.Разрезать надо очень аккуратно, так как десерт очень нежный.", + "video_recipe":"https://www.youtube.com/watch?v=kSlmBQLa0B8", + "ingridients": "4 яйца (я использовала 18 перепелиных яиц),100 г сахара,500 г маскарпоне,250 г печенья «Савоярди» (примерно 34 штуки),350 мл кофе (растворимого или сваренного),порошок какао,2–3 ст.л. вина «Марсала» (или любого другого), или рома, ликера, бренди, коньяка — по желанию" +}, +{ + "id": "5", + "name": "СОЛЯНКА", + "id_category":"1", + "text_recipe":"1. Налить бульон в емкость МВ (у меня куриный, можно сварить мясо на режиме Суп.Включить мультиварку, установить режим выпечка или экспресс.\n2.Обжарить лук, добавить томат. Перемешать и прожарить все это, еще 5 - 7 минут.\n3.Затем добавить огурцы, порезанные кубиками.\n4.Пока все в мультиварке тушится, готовим мясное ассорти. У меня - мясо отварное, колбаса вареная, колбаса копченая и кусочек копченой курицы. Режем все соломкой или кубиками.Закладываем в чашу мясное ассорти.Заливаем процеженным бульоном. Можно еще влить 1 стакан рассола от огурцов .\n5.Добавить картофель, порезанный мелкими кубиками.Добавить специи по вкусу, лавровый лист, зелень.\n6.Включить режем тушение или суп 1 час.И ждать сигнала)) Аромат на кухне будет неописуемый)).\n7.Подается солянка к столу, со сметаной, маслинами, долькой лимона и мелко нарезанной зеленью.Приятного аппетита!!!.", + "video_recipe":"https://www.youtube.com/watch?v=wXiK9Qoce8A", + "ingridients": "350 г свинины;\n2 луковицы;\n250 г копчёной колбасы;\n250 г ветчинной колбасы;\n4 солёных огурца;\n2 столовые ложки растительного масла;\n2 столовые ложки томатной пасты;\n100 г оливок;\n2 сосиски;\n100–120 мл огуречного рассола;\nсоль — по вкусу;\nзелень, сметана, лимон — для подачи." +}, +{ + "id": "6", + "name": "СВЕКОЛЬНИК", + "id_category":"1", + "text_recipe":"1. Подготовить продукты для приготовления горячего свекольника.\n2.Морковь очистить, вымыть, тонко нашинковать.Свеклу очистить, вымыть, нарезать соломкой.Лук очистить, вымыть, мелко нарезать.Картофель очистить, вымыть, нарезать дольками..\n3.Вскипятить воду (1-1,5 л)\n4.В кипящую воду положить 1 морковь, лук, картофель.Добавить нарезанные со­ломкой полторы свеклы. Накрыть крышкой и варить при слабом кипении.\n5.На сковороде растопить сливочное масло.Оставшиеся 0,5 свеклы, морковь выложить в растопленное масло, перемешать. Спассеровать на сливочном масле, помешивая. Жарить коренья нужно на среднем огне 5-7 минут.\n6.Помидоры ошпарить кипятком, снять шкурку.Помидоры мелко нарезать..\n7.Добавить помидо­ры к кореньям, перемешать, тушить еще 5-7 минут (помидоры должны полностью размягчиться).Высыпать в кастрюлю с кипящими овощами.\n8.Заправить по вкусу солью. Накрыть крышкой, варить еще 5 минут. Затем свекольник выключить.Можно откорректировать вкус, дополнительно заправив свекольник сахаром и лимонной кислотой.Горячий свекольник готов.\n9.При подаче горячий свекольник заправить зеленью и сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=admLVc8ezXw", + "ingridients": "Свекла - 250-350 г (2 шт.)\nМорковь - 150-200 г (1-2 шт.)\nКартофель - 200 г (2 шт.)\nПомидоры - 400 г (4-5 шт.)\nЛук - 70-90 г (1 шт.)\nСоль 1,5 ч. ложки\nСметана - 100-200 г\nЗелень - 0,5 пучка\nЛимонная кислота (по желанию) - щепотку\nСахар (по желанию) - 0,25 ч. ложки" +}, +{ + "id": "7", + "name": "ВИНИГРЕТ", + "id_category":"2", + "text_recipe":"1. Свеклу отварить до готовности.\n2.Картофель и морковь отварить до готовности.\n3.Лук мелко нарезать.\n4.Огурцы нарезать кубиками.\n5.Если капуста сильно соленая, ее промыть.Мелко нашинковать.\n6.Морковь нарезать кубиками.Свеклу нарезать кубиками.Картофель нарезать кубиками.\n7.Смешать картофель, морковь, огурцы, лук, капусту, свеклу.Немного посолить\n8.Заправить растительным маслом.", + "video_recipe":"https://www.youtube.com/watch?v=RZtWdZ8q6RM", + "ingridients": "400 г свеклы\n300 г моркови\n400 г картофеля\n200 г квашеной капусты\n200 г маринованных или соленых огурцов\n150 г лука\nсоль\nрастительное масло" +}, +{ + "id": "8", + "name": "ЦЕЗАРЬ", + "id_category":"2", + "text_recipe":"1.С хлеба срежьте корочку, а сам хлеб порежьте кубиками.\n2. Чеснок пропустите через чесночницу и обжарьте его пару минут в разогретом оливковом масле.\n3. Куриное филе порежьте небольшими кусочками и отправляйте к чесноку на сковороду.\n4. Обжарьте курицу, помешивая, 10 минут, в конце посолите и поперчите по вкусу.\n5. Уберите с огня курицу, а в ту же сковороду добавьте еще немного масла и обжарьте хлеб, постоянно помешивая, пока он не зарумянится.\n6. Приготовьте соус для салата «Цезарь» . Для этого пармезан натрите на мелкой терке. Смешайте яичный желток, оливковое масло, горчицу, лимонный сок, тертый пармезан и хорошенько все взбейте.\n7. Листья салата порвите средними кусками. Помидоры черри порежьте на половинки.\n8. Выложите на салат обжаренное куриное филе, добавьте помидоры, полейте соусом, сверху потрите пармезаном.\n9. Непосредственно перед подачей добавьте в салат «Цезарь» хлебные сухарики. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=onq7Sd8c2To", + "ingridients": "300 г курицы (филе)\n100 г пармезана\n100 г белого хлеба, 200 г листьев салата\n100 г помидоров черри\n1 зубок чеснока\n1 ст. ложка оливкового масла\nчерный молотый перец по вкусу\nсоль по вкусу.\nСоус для салата «Цезарь» включает ингредиенты:\n1 яичный желток\n1 ч. ложка горчицы\n2 ст. ложки оливкового масла\n1 ч. ложка лимонного сока\n50 г пармезана\nчерный молотый перец по вкусу\nсоль по вкусу." + +}, +{ + "id": "9", + "name": "ГОЛУБЦЫ", + "id_category":"3", + "text_recipe":"1.Подготовим капустные листья для голубцов, снимим листья с капусты.\n2.Измельчим лук и морковь.\n3.Поджарим овощи на растительном масле до готовности и разделим на две части. Одну часть используем для начинки. Во вторую часть добавим соль (1 ст. л.), сахар (1 ст. л.), молотый перец и томатный соус или кетчуп.\n4.Смешаем сваренный заранее рис, фарш и овощную зажарку. Начинку для голубцов посолим, поперчим и перемешаем.\n5.Закрутим голубцы с мясом и рисом.\n6.Голубцы выложим в кастрюлю и зальем томатной подливой.\n7.Готовим голубцы на небольшом огне примерно 1 час.", + "video_recipe":"https://www.youtube.com/watch?v=Pva-0xZ2Ips", + "ingridients": "Капуста белокочанная - 1 шт.\nРис - 1 стакан\nФарш мясной - 500 г\nМорковь - 1 шт.\nЛук репчатый - 4-5 шт.\nКетчуп или томатный соус - 3 ст.л.\nМасло растительное - для жарки\nПерец молотый (красный и черный)\nСахар\nСоль" + +}, +{ + "id": "11", + "name": "БРАУНИ", + "id_category":"4", + "text_recipe":"1.Включить духовку для предварительного разогрева на 180 градусов. Противень размером 25х35 см застелить фольгой и слегка сбрызнуть растительным маслом.\n2.В большой миске смешать масло, белый, ванильный и коричневый сахар и кофейный напиток. Миксером на средней скорости перемешать до пышного, однородного состояния. Затем по одному добавлять яйца, хорошо перемешивая после каждого.\n3. В большой миске соединить муку, какао-порошок, разрыхлитель, соду и соль. Эту массу постепенно всыпать в масляную смесь, при этом перемешивая миксером на средней скорости. В эту массу добавить шоколад и пекан. Хорошо перемешать и выложить эту массу в подготовленную форму.\n4.Поставить в разогретую духовку и выпекать около 30-35 минут. Перед подачей дать готовому изделию полностью остыть.", + "video_recipe":"https://www.youtube.com/watch?v=MhbZmcGSvcg", + "ingridients": "Масло сливочное (размягченное) - 300 г\nСахар коричневый - 1 3/4 стакана\nСахар белый - 1 стакан\nКофе растворимый - 1/2 стакана\nЯйца - 4 шт.\nВанильный сахар - 1 ст. л.\nМука пшеничная - 1 1/2 стакана\nКакао-порошок - 1 стакан\nРазрыхлитель - 1/2 ч. л.\nСода пищевая - 1/2 ч. л.\nСоль - 1/4 ч. л.\nЧипсы черного шоколада или шоколад, разломанный на кусочки - 1 стакан\nОрех пекан жареный - 1 стакан\nМолочный шоколад (разломанный на кусочки) - 30 г" + +}, +{ + "id": "12", + "name": "ЧИЗКЕЙК", + "id_category":"4", + "text_recipe":"1.Измельчите печенье до состояния крошки. Сливочное масло растопите на водяной бане.Перемешайте печенье с 1 ст. ложкой сахара, добавьте масло, тщательно перемешайте.\n2.Форму для запекания (диаметр моей формы - 22 см) застелите пергаментной бумагой. Из полученной массы сделайте основу для чизкейка в форме для запекания и поместите ее в духовку, разогретую до 170 градусов, на 10 минут.\n3.Пока корж находится в духовке, займитесь приготовлением сырной начинки. Для этого взбейте яйца с 4-мя столовыми ложками сахара, добавьте жирные сливки, ванилин и цедру половины лимона.\n4.В полученную массу добавьте сливочный сыр и снова все хорошо взбейте венчиком до получения однородной консистенции.\n5.Полученную сырную массу (довольно жидкую) вылейте на готовую основу и поместите в духовку. Внимание! Чизкейк должен готовиться в духовке на водяной бане при температуре не более 150 градусов в течение 70-80 минут.\n6.Готовый чизкейк уберите в холодильник на несколько часов, а лучше на ночь. Перед подачей украсьте чизкейк (например, сахарной пудрой и свежей клубникой) и достаньте из формы.", + "video_recipe":"https://www.youtube.com/watch?v=-UVzp2uF5Es", + "ingridients": "Печенье (любое рассыпчатое) - 300 г\nСыр сливочный (рикотта; в идеале - филадельфия) - 500 г\nСливки 35% - 200 г\nЯйца куриные - 4 шт.\nМасло сливочное - 100 г\nСахар - 5 ст. л.\nЛимон (для цедры) - 0,5-1 шт.\nВанилин - 1 пакетик (по вкусу)\nДля украшения (по желанию):\nСахарная пудра\nЯгоды свежие (клубника)" + +} +] +} diff --git a/TelegrammBotProject/telegabot.py b/TelegrammBotProject/telegabot.py new file mode 100644 index 0000000..8d5e91c --- /dev/null +++ b/TelegrammBotProject/telegabot.py @@ -0,0 +1,332 @@ +import telebot +from telebot import types + +import check_function + +API_TOKEN = '1240952041:AAGgpZ6C_-Ttga9fFgFKgdFImeV6GLcjd1s' + +bot = telebot.TeleBot(API_TOKEN,threaded=False) +@bot.message_handler(commands=['start']) + +def handle_text(message): + keyboard1 = telebot.types.ReplyKeyboardMarkup() + keyboard1.row('Поиск рецепта🥮') + keyboard1.row('Правила использования📄') + keyboard1.row('Помощь❓') + + bot.send_message(message.chat.id, + 'Готовить стало ещё проще!\n' + 'Добро пожаловать,' + str(message.from_user.username) + '\nЭтот бот предоставит вам возможность \nне только найти новые рецепты, но\nтакже сохранить их в кулинарную книгу\n Выберите одну из категорий ниже ', + reply_markup=keyboard1) + + result = check_function.check_user_exist(str(message.from_user.username)) + print(result) + +# +@bot.message_handler(commands=['help']) + +def handle_text(message): + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок,\n''/add_comment - добавить комментарий,\n''/see_comments - посмотреть комментарии других пользователей') + + +@bot.message_handler(commands=['first_dishes']) +def handle_text(message): + result = check_function.see_all_soups() + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['salads']) +def handle_text(message): + result = check_function.see_all_salads() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['main_dishes']) +def handle_text(message): + result = check_function.see_all_main_dishes() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['desserts']) +def handle_text(message): + result = check_function.see_all_desserts() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['statistic']) +def handle_text(message): + + result = check_function.statistic_of_marks() + print(type(result)) + bot.send_message(message.from_user.id,'Количество ценок "1" - '+ str(result[0])+'.') + bot.send_message(message.from_user.id, 'Количество ценок "2" - ' + str(result[1]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "3" - ' + str(result[2]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "4" - ' + str(result[3]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "5" - ' + str(result[4]) + '.') + + average = check_function.avarage_of_mark() + bot.send_message(message.from_user.id, 'Средняя оценка - ' + str(average) + '.') + +@bot.message_handler(commands=['add_comment']) +def handle_text(message): + sent = bot.send_message(message.chat.id, 'Введите свой комментарий') + bot.register_next_step_handler(sent, comments) + +@bot.message_handler(commands=['see_comments']) +def handle_text(message): + bot.send_message(message.chat.id, 'Комментарии других пользователей: ') + result = check_function.see_users_comments() + print(result) + for i in range(len(result)): + bot.send_message(message.chat.id, str((list(result[i]))[0]) + ': ' + str((list(result[i]))[1])) + +def comments(message): + check_function.add_comments(message.text, str(message.from_user.username)) + print(message.text) + bot.send_message(message.chat.id,'Спасибо, ваш комментарий был успешно добавлен!') + +@bot.message_handler(content_types=['text']) +def handle_text(message): + + if message.text == 'Правила использования📄': + bot.send_message(message.from_user.id, + '1. Для начала работы с ботом, необходимо ввести команду /start\n''2.Для поиска рецепта нажмите клавишу "поиск рецепта"\n''3.Выберите категорию, к которой относится блюдо, которое вы хотите найти,ВАЖНО,бот сможет найти блюдо в заданой категории, только, если оно относится к этой категории\n''4.Вы можете просмотреть видео рецепт блюда или просто прочиатть его,подтвердив свой выбор нажатием на соответствующюю клавишу\n''5.После окончания работы с ботом, вы можете поставить ем оценку и оставить комментарий.') + elif message.text == 'Помощь❓': + + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок') + elif message.text == 'Поиск рецепта🥮': + + keyboard = types.InlineKeyboardMarkup() + key_sup = types.InlineKeyboardButton(text='Первые блюда 🍲', callback_data='soups') + # И добавляем кнопку на экран + keyboard.add(key_sup) + key_main = types.InlineKeyboardButton(text='Основные блюда 🥘', callback_data='main_dishes') + keyboard.add(key_main) + key_salad = types.InlineKeyboardButton(text='Салаты 🥗', callback_data='salads') + keyboard.add(key_salad) + key_sweet = types.InlineKeyboardButton(text='Дессерты 🍰', callback_data='sweets') + keyboard.add(key_sweet) + + bot.send_message(message.from_user.id, "Выбери категорию.", reply_markup=keyboard) + + +@bot.callback_query_handler(func=lambda call: call.data == 'soups') +def callback_worker(call): + + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'main_dishes') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent, video_recipe) + + +@bot.callback_query_handler(func=lambda call: call.data == 'salads') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'sweets') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent, video_recipe) + + +def text_recipe(message): + + add = check_function.check_is_dish_exist((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + + else: + result = check_function.result_of_search((message.text).upper()) + list(result) + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + evaluating(message) + + +def video_recipe(message): + add = check_function.get_video_recipe((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + else: + result = check_function.get_exsist_video_recipe((message.text).upper()) + print(result) + bot.send_message(message.from_user.id, result) + print(message) + evaluating(message) +# +# def choos_dish(message): +# check_function.check_dish_category(message.text) + +def evaluating(message): + keyboard3 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='1', callback_data='one') + # И добавляем кнопку на экран + keyboard3.add(key_one) + key_two = types.InlineKeyboardButton(text='2', callback_data='two') + keyboard3.add(key_two) + key_three = types.InlineKeyboardButton(text='3', callback_data='three') + keyboard3.add(key_three) + key_four = types.InlineKeyboardButton(text='4', callback_data='four') + keyboard3.add(key_four) + key_five = types.InlineKeyboardButton(text='5', callback_data='five') + keyboard3.add(key_five) + bot.send_message(message.chat.id, "Оцените,пожалуйста,работу бота", reply_markup=keyboard3) + + @bot.callback_query_handler(func=lambda call: call.data == 'one') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(1, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'two') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(2, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'three') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(3, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'four') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(4, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'five') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(5, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + +def continue_working_with_bot(message): + keyboard4 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='Оставить комментарий', callback_data='write_comment') + # И добавляем кнопку на экран + keyboard4.add(key_one) + key_two = types.InlineKeyboardButton(text='Посмотреть комментарии пользователей', callback_data='see_comments') + keyboard4.add(key_two) + key_three = types.InlineKeyboardButton(text='Посмотреть статистику оценок', callback_data='see_rating') + keyboard4.add(key_three) + bot.send_message(message.chat.id, "Продолжите работу с ботом", reply_markup=keyboard4) + + @bot.callback_query_handler(func=lambda call: call.data == 'write_comment') + def callback_worker(call): + print(message.text) + sent = bot.send_message(call.message.chat.id, 'Введите свой комментарий') + bot.register_next_step_handler(sent,comments) + + @bot.callback_query_handler(func=lambda call: call.data == 'see_comments') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Отзывы другх пользователей') + result = check_function.see_users_comments() + print(result) + for i in range(len(result)): + bot.send_message(message.chat.id, str((list(result[i]))[0])+': '+str((list(result[i]))[1])) + + @bot.callback_query_handler(func=lambda call: call.data == 'see_rating') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Статистика оценок') + result = check_function.statistic_of_marks() + print(type(result)) + bot.send_message(message.from_user.id, 'Количество ценок "1" - ' + str(result[0]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "2" - ' + str(result[1]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "3" - ' + str(result[2]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "4" - ' + str(result[3]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "5" - ' + str(result[4]) + '.') + + average = check_function.avarage_of_mark() + bot.send_message(message.from_user.id, 'Средняя оценка - ' + str(average) + '.') + +# def comments(message): +# check_function.add_comments(message.text, str(message.from_user.username)) +# print(message.text) +# bot.send_message(message.chat.id,'Спасибо, ваш комментарий был успешно добавлен!') + +if __name__ == '__main__': + bot.polling() +# diff --git a/TelegrammBotProjectByMaistrenko/Procfile b/TelegrammBotProjectByMaistrenko/Procfile new file mode 100644 index 0000000..a8b8266 --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/Procfile @@ -0,0 +1 @@ +bot: python3 telegabot.py \ No newline at end of file diff --git a/TelegrammBotProjectByMaistrenko/categories.json b/TelegrammBotProjectByMaistrenko/categories.json new file mode 100644 index 0000000..b21d023 --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/categories.json @@ -0,0 +1,19 @@ +{"categories":[ + { + "id": "1", + "name": "Первые блюда" +}, +{ + "id": "2", + "name": "Салаты" +}, +{ + "id": "3", + "name": "Основные блюда" +}, +{ + "id": "4", + "name": "Дессерты" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProjectByMaistrenko/check_function.py b/TelegrammBotProjectByMaistrenko/check_function.py new file mode 100644 index 0000000..2f7af76 --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/check_function.py @@ -0,0 +1,170 @@ +from database_connection import engine +from db_classes import Categories, Dishes, Clients, Marks,Base +from sqlalchemy.sql import select, update, join +from sqlalchemy import and_, or_, between, asc, desc,update +from sqlalchemy.orm import sessionmaker +from sqlalchemy.sql import func +import plotly.express as px +import plotly.graph_objects as go + + + +# Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +# функция для добавления нового пользователя +def check_user_exist(username): + + try: + # q = session.query(Clients).filter_by(Clients.id == '1') + + if bool(session.query(Clients.id).filter_by(id = '1').first()) is False: + + row = Clients(id = '1',client_username = username) + session.add(row) + session.commit() + search_query = (session.query(Clients).filter_by(id = '1').one()).client_username + print('Hello,', search_query) + + else: + + if bool(session.query(Clients.client_username).filter_by(client_username = username).first()) is True: + print('User already exist') + + else: + id_value = session.query(Clients.id).count() + row = Clients(id = id_value+1, client_username = username) + session.add(row) + session.commit() + print('We successfully added you to our database') + + except: + print('This user already exsist') + +# функция для проверки значения оценки +def check_mark_value(id,mark,values,id_client,dish_id,text): + if mark > 5: + print('Max value is 5') + else: + row = Marks(id=id, mark_value=values,client_id = id_client,dish_id = dish_id,text_reviw = text) + session.add(row) + session.commit() +# bool(User.query.filter_by(name='John Smith').first()) + +# функция для проверки существования блюда +def check_is_dish_exist(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + + else: + return True +# +def if_not_exist_dish(): + + result = session.query(Dishes.dish_name).all() + return 'Такого блюда не существует в нашей базе данных, посмотрите блюда, которые доступны',result + +def result_of_search(dish_name): + + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()) + return result.ingridients, result.text_recipe + + # функция для получения видео рецепта +def get_video_recipe(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + else: + return True + +def get_exsist_video_recipe(dish_name): + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).video_recept + return result +# функция для добавления оценки пользователя +def add_user_mark(mark,client_username,dish_name): + + if bool(session.query(Marks.id).filter_by(id='1').first()) is False: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).first()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).first()).id + + + row = Marks(id= '1', mark_value = mark, client_id = id_found, dish_id = dish_id,user_name = client_username) + session.add(row) + session.commit() + return 'Вы наш первый пользователь.Мы успешно добавили вашу первую оценку' + + elif bool(session.query(Marks).filter(Marks.user_name == client_username).first()) is True: + session.query(Marks).filter(Marks.user_name == client_username).update({Marks.mark_value: mark},synchronize_session=False) + session.commit() + return 'Мы успешно обновили вашу оценку' + else: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).one()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + id_value = session.query(Marks.id).count() + row = Marks(id=id_value + 1, mark_value = mark, client_id = id_found, dish_id = dish_id, user_name = client_username) + session.add(row) + session.commit() + return 'Мы успешно добавили вашу оценку' +# функция для проверки принадлежности блюда к категории +def check_dish_category(dish_name): + id_dish = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + dish_category = (session.query(Categories).filter(Categories.id == id_dish).one()).category_name + return dish_category +# функция добавления комментария пользователя в бд +def add_comments(message,username): + + session.query(Marks).filter(Marks.user_name == username).update({Marks.text_reviw: message},synchronize_session = False) + session.commit() + return 'Мы успешно добавили ваш комментарий' +# функции для просмотре блюд и коментариев +def see_users_comments(): + return session.query(Marks.user_name,Marks.text_reviw).all() + +def see_all_soups(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 1).all()) + +def see_all_main_dishes(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 3).all()) + +def see_all_salads(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 2).all()) + +def see_all_desserts(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 4).all()) + +# график распределения оценок пользователей +def statistic_of_marks(): + result = [] + for i in range(1,6): + result.append(session.query(Marks).filter(Marks.mark_value== i).count()) + + return result +def avarage_of_mark(): + + result = session.query(func.avg(Marks.mark_value).label('average')).all() + # + # sum_of_marks = session.query(Marks.mark_value).all() + return round((result[0][0]),1) + # num_of_marks = len(sum_of_marks) + # result = sum(sum_of_marks)/num_of_marks + # print(result) + + + + + + + + + + + + + + + + + + diff --git a/TelegrammBotProjectByMaistrenko/clients.json b/TelegrammBotProjectByMaistrenko/clients.json new file mode 100644 index 0000000..e79d902 --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/clients.json @@ -0,0 +1,11 @@ +{"clients":[ + { + "id": "2", + "name": "dima" +}, +{ + "id": "3", + "name": "olya" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProjectByMaistrenko/database_connection.py b/TelegrammBotProjectByMaistrenko/database_connection.py new file mode 100644 index 0000000..75bd0a8 --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/database_connection.py @@ -0,0 +1,7 @@ +from sqlalchemy.engine import create_engine + +# для создания таблиц Вам неободимо прописать путь к своей базе данніх oracle +DATABASE_URI = 'postgres+psycopg2://postgres:msn1973msn@localhost:5432/bot' + +engine = create_engine(DATABASE_URI) + diff --git a/TelegrammBotProjectByMaistrenko/db_classes.py b/TelegrammBotProjectByMaistrenko/db_classes.py new file mode 100644 index 0000000..d8ab9cf --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/db_classes.py @@ -0,0 +1,144 @@ +from sqlalchemy import Column, Integer, String, ForeignKey,Text +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import json + +Base = declarative_base() + +from sqlalchemy.orm import relationship, sessionmaker +# создание таблиц +class Categories(Base): + + __tablename__ = 'dish_categories' + + id = Column(Integer, primary_key=True) + category_name = Column(Text) + + styles = relationship('Dishes', backref='dish_categories', lazy=True) + +class Dishes(Base): + + __tablename__ = 'dishes' + + id = Column(Integer, primary_key=True) + dish_name = Column(Text) + id_category = Column(Integer, ForeignKey("dish_categories.id")) + text_recipe = Column(Text) + video_recept = Column(Text) + ingridients = Column(Text) + + +class Clients(Base): + + __tablename__ = 'clients' + + id = Column(Integer, primary_key=True) + client_username = Column(Text) + +class Marks(Base): + + __tablename__ = 'marks' + + id = Column(Integer, primary_key=True) + mark_value = Column(Integer) + client_id = Column(Integer, ForeignKey("clients.id")) + dish_id = Column(Integer, ForeignKey("dishes.id")) + text_reviw = Column(Text) + user_name = Column(Text) + + styles = relationship('Clients', backref='marks', lazy=True) + styles_1 = relationship('Dishes', backref='marks', lazy=True) + +Base.metadata.create_all(engine) + +# добавления данных в бд +# Session = sessionmaker(bind = engine) +# session = Session() +# считывание данных с файла, на другом компьютере прийдеся вставить другой путь к файлам + +# categories = open("C:/Pyprojects/venv/categories.json",encoding="utf-8") +# data_categories = json.load(categories) +# dishes = open("C:/Pyprojects/venv/recipes.json",encoding="utf8") +# data_dishes = json.load(dishes) +# marks = open("C:/Pyprojects/venv/marks.json",encoding="utf8") +# data_marks = json.load(marks) +# clients = open("C:/Pyprojects/venv/clients.json",encoding="utf8") +# data_clients = json.load(clients) + +# добавление категорий блюд +# session.add_all([ +# Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), +# Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), +# Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), +# Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +# ) +# session.commit() +# +# # добавление рецептов и названий блюд +# session.add_all([ +# Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# Dishes(id = data_dishes['dish'][7]['id'], +# dish_name = data_dishes['dish'][7]['name'], +# id_category=data_dishes['dish'][7]['id_category'], +# text_recipe = data_dishes['dish'][7]['text_recipe'], +# video_recept=data_dishes['dish'][7]['video_recipe'], +# ingridients=data_dishes['dish'][7]['ingridients']), +# Dishes(id = data_dishes['dish'][8]['id'], +# dish_name = data_dishes['dish'][8]['name'], +# id_category=data_dishes['dish'][8]['id_category'], +# text_recipe = data_dishes['dish'][8]['text_recipe'], +# video_recept=data_dishes['dish'][8]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# ] +# ) +# session.commit() +# +# session.add_all([ +# Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), +# Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), +# Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), +# Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +# ) +# session.commit() + diff --git a/TelegrammBotProjectByMaistrenko/filling_db.py b/TelegrammBotProjectByMaistrenko/filling_db.py new file mode 100644 index 0000000..c2e5b6a --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/filling_db.py @@ -0,0 +1,154 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import db_classes +import json +from sqlalchemy.orm import relationship, sessionmaker +# +Session = sessionmaker(bind = engine) +session = Session() +# считывание данных с файла, на другом компьютере прийдеся вставить другой путь к файлам + +categories = open("categories.json",encoding="utf-8") +data_categories = json.load(categories) +dishes = open("recipes.json",encoding="utf8") +data_dishes = json.load(dishes) +marks = open("marks.json",encoding="utf8") +data_marks = json.load(marks) +clients = open("clients.json",encoding="utf8") +data_clients = json.load(clients) + +# # добавление категорий блюд +# session.add_all([ +# db_classes.Clients(id = data_clients['clients'][0]['id'], client_username = data_clients['clients'][0]['name']), +# db_classes.Clients(id = data_clients['clients'][1]['id'], client_username = data_clients['clients'][1]['name'])] +# ) +# session.commit() +# +# session.add_all([ +# db_classes.Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][7]['id'], +# dish_name = data_dishes['dish'][7]['name'], +# id_category=data_dishes['dish'][7]['id_category'], +# text_recipe = data_dishes['dish'][7]['text_recipe'], +# video_recept=data_dishes['dish'][7]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][8]['id'], +# dish_name = data_dishes['dish'][8]['name'], +# id_category=data_dishes['dish'][8]['id_category'], +# text_recipe = data_dishes['dish'][8]['text_recipe'], +# video_recept=data_dishes['dish'][8]['video_recipe'], +# ingridients=data_dishes['dish'][8]['ingridients']), +# ] +# ) +# session.commit() +# +# session.add_all([ +# db_classes.Marks(id = data_marks['marks'][0]['id'], mark_value = data_marks['marks'][0]['value'], client_id = data_marks['marks'][0]['id_client'], dish_id = data_marks['marks'][0]['id_dish'], text_reviw = data_marks['marks'][0]['text_reviw'],user_name = data_marks['marks'][0]['name']), +# db_classes.Marks(id = data_marks['marks'][1]['id'], mark_value = data_marks['marks'][1]['value'], client_id = data_marks['marks'][1]['id_client'], dish_id = data_marks['marks'][1]['id_dish'], text_reviw = data_marks['marks'][1]['text_reviw'],user_name = data_marks['marks'][1]['name'])] +# ) +# session.commit() + +# добавление рецептов и названий блюд +# session.add_all([ +# db_classes.Dishes(id = data_dishes['dish'][0]['id'], +# dish_name = data_dishes['dish'][0]['name'], +# id_category=data_dishes['dish'][0]['id_category'], +# text_recipe = data_dishes['dish'][0]['text_recipe'], +# video_recept=data_dishes['dish'][0]['video_recipe'], +# ingridients=data_dishes['dish'][0]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][1]['id'], +# dish_name = data_dishes['dish'][1]['name'], +# id_category=data_dishes['dish'][1]['id_category'], +# text_recipe = data_dishes['dish'][1]['text_recipe'], +# video_recept=data_dishes['dish'][1]['video_recipe'], +# ingridients=data_dishes['dish'][1]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][2]['id'], +# dish_name = data_dishes['dish'][2]['name'], +# id_category=data_dishes['dish'][2]['id_category'], +# text_recipe = data_dishes['dish'][2]['text_recipe'], +# video_recept=data_dishes['dish'][2]['video_recipe'], +# ingridients=data_dishes['dish'][2]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][3]['id'], +# dish_name = data_dishes['dish'][3]['name'], +# id_category=data_dishes['dish'][3]['id_category'], +# text_recipe = data_dishes['dish'][3]['text_recipe'], +# video_recept=data_dishes['dish'][3]['video_recipe'], +# ingridients=data_dishes['dish'][3]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][4]['id'], +# dish_name = data_dishes['dish'][4]['name'], +# id_category=data_dishes['dish'][4]['id_category'], +# text_recipe = data_dishes['dish'][4]['text_recipe'], +# video_recept=data_dishes['dish'][4]['video_recipe'], +# ingridients=data_dishes['dish'][4]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][5]['id'], +# dish_name = data_dishes['dish'][5]['name'], +# id_category=data_dishes['dish'][5]['id_category'], +# text_recipe = data_dishes['dish'][5]['text_recipe'], +# video_recept=data_dishes['dish'][5]['video_recipe'], +# ingridients=data_dishes['dish'][5]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][6]['id'], +# dish_name = data_dishes['dish'][6]['name'], +# id_category=data_dishes['dish'][6]['id_category'], +# text_recipe = data_dishes['dish'][6]['text_recipe'], +# video_recept=data_dishes['dish'][6]['video_recipe'], +# ingridients=data_dishes['dish'][6]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][9]['id'], +# dish_name = data_dishes['dish'][9]['name'], +# id_category=data_dishes['dish'][9]['id_category'], +# text_recipe = data_dishes['dish'][9]['text_recipe'], +# video_recept=data_dishes['dish'][9]['video_recipe'], +# ingridients=data_dishes['dish'][9]['ingridients']), +# db_classes.Dishes(id = data_dishes['dish'][10]['id'], +# dish_name = data_dishes['dish'][10]['name'], +# id_category=data_dishes['dish'][10]['id_category'], +# text_recipe = data_dishes['dish'][10]['text_recipe'], +# video_recept=data_dishes['dish'][10]['video_recipe'], +# ingridients=data_dishes['dish'][10]['ingridients']), +# ] +# ) + + + + diff --git a/TelegrammBotProjectByMaistrenko/marks.json b/TelegrammBotProjectByMaistrenko/marks.json new file mode 100644 index 0000000..58cf64b --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/marks.json @@ -0,0 +1,19 @@ +{"marks":[ + { + "id": "2", + "value": "4", + "id_client": "2", + "id_dish": "2", + "text_reviw": "Очень удобный в использовании!", + "name":"dima" +}, +{ + "id": "3", + "value": "2", + "id_client": "3", + "id_dish": "3", + "text_reviw": "Очень классній бот, первый помощник на кухне!", + "name":"olya" +} +] +} \ No newline at end of file diff --git a/TelegrammBotProjectByMaistrenko/recipes.json b/TelegrammBotProjectByMaistrenko/recipes.json new file mode 100644 index 0000000..514d2bd --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/recipes.json @@ -0,0 +1,95 @@ +{"dish":[ + { + "id": "1", + "name": "БОРЩ", + "id_category":"1", + "text_recipe":"Мясо вымойте, положите в кастрюлю и залейте холодной водой. Дождитесь, пока закипит, и варите ещё 20 минут. После закипания с помощью шумовки снимите лишнюю пену.Свёклу очистите от кожуры, натрите на крупной тёрке и обжарьте на растительном масле. Влейте немного мясного бульона и оставьте тушиться на медленном огне.Мелко нашинкуйте лук и обжарьте на масле до золотистого цвета. Добавьте морковь, влейте ещё немного бульона и тушите в течение 3—5 минут.Очистите картофель, нарежьте кубиками, добавьте к бульону и дайте закипеть.Затем добавьте мелко нашинкованную свежую капусту. Варите до готовности.Посолите и поперчите по вкусу.В конце добавьте тушёную свёклу, зелень и лавровый лист. Накройте кастрюлю крышкой и варите в течение 3—5 минут, после чего снимите с огня.При подаче заправьте борщ сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=_-9nH4zFThs", + "ingridients": "Говядина (на кости)300—400 г,Капуста (свежая)1,5 кг,Картофель3—4 шт.,Морковь1—2 шт.,Лук (репчатый)1 шт.,Свёкла1 шт.,Сметана100 мл,Масло (растительное)2 ст. л.,Лавровый лист2 листа,Вода1,5—2 л,Зелень (укроп или петрушка)по вкусу,Перец (чёрный молотый)по вкусу,Сольпо вкусу')" +}, +{ + "id": "2", + "name": "ОЛИВЬЕ", + "id_category":"2", + "text_recipe":"Картофель и морковь сварить «в мундирах». Сварить яйца. 2. Тем временем колбасу и огурцы нарезать мелкими кубиками. 3. Готовые овощи и яйца почистить и также нарезать кубиками. 4. Мелко нарезать лук. 5. Все ингредиенты смешать, добавить горошек и заправить майонезом. 6. Украсить зеленью.", + "video_recipe":"https://www.youtube.com/watch?v=z8KpTK5oGBQ", + "ingridients": "картофель - 4-5 штук,морковь - 2 крупные или 3 средние ,консервированный горошек – 1 банка ,колбаса «Докторская» - 300-400 г,соленые или маринованные огурцы – 4-5 штук,яйца – 6 штук,лук – 1 штука,зелень,майонез." +}, +{ + "id": "3", + "name": "РИЗОТТО", + "id_category":"3", + "text_recipe":"Разогрейте сливочное масло в казанке на среднем огне. Добавьте грибы и готовьте, помешивая, 5-10 минут (пока грибы не подрумянятся). Добавьте нарезанную курицу, 1 ч. л. соли, перец и готовьте, помешивая, около 10 минут. Переложите грибы с курицей в другую посуду. В кастрюле доведите до кипения бульон.2. В казанке разогрейте растительное масло. Добавьте лук и обжарьте его на умеренном огне, помешивая, в течение 5 минут. Добавьте рис. Готовьте, помешивая, около 2 минут.3. Влейте в казанок с рисом вино, добавьте 1 ч. л. соли. Готовьте, часто помешивая, до тех пор, пока жидкость не впитается. Добавьте пол стакана кипящего бульона и помешивайте, пока не впитается. Рис должен слегка кипеть (уменьшите огонь, если нужно). Продолжайте готовить рис, подливая по пол стакана бульона и перемешивая (всего – около 25-30 минут). Жидкость, которая не впитается, станет вязкой благодаря высокому содержанию крахмала в рисе. Бульон может весь не понадобиться, а может, придется добавить немного бульона или воды дополнительно.4. Вмешайте курицу с грибами, сыр и петрушку. Прогрейте ризотто с курицей и подавайте блюдо. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=5__wUabM0y8", + "ingridients": "Масло сливочное – 2 ст. л,Грибы, тонко нарезанные – 220 г,Куриные грудки, филе, нарезанное кусочками по 1 см – 300 г,Соль – 1 ч. л.,Перец черный молотый – 1 ч. л.,Бульон куриный – 5 стакан,Масло растительное – 1 ст. л.,Лук репчатый, нарезанный – пол стакана,Рис Арборио – 1 стакан,Вино сухое белое – пол стакана,Сыр Пармезан тертый – пол стакана,Зелень петрушки нарезанная – 2 ст. л." +}, +{ + "id": "4", + "name": "ТИРАМИСУ", + "id_category":"4", + "text_recipe":"Отделить белки от желтков. Желтки растереть с сахаром.Добавить маскарпоне.Перемешать.Белки взбить в крепкую пену.Добавить белки в желтково-сырную массу.Аккуратно перемешать.Палочки окунуть в холодный кофе.Палочки надо окунать очень быстрым движением, чтобы они не размокли.Кофе приготовьте так, как вам нравится (я на 350 мл добавила 4 ч.л. кофе).По желанию, в кофе можно добавить вино, ром, ликер, бренди, или коньяк.В форму (я использовала форму размером 17 на 25 см) плотно выложить палочки, смоченные в кофе.На палочки выложить половину крема.Разровнять.На крем снова выложить палочки, смоченные в кофе.На палочки выложить оставшийся крем.Разровнять.Поставить в холодильник на 5–6 часов.Посыпать через сито какао.Разрезать на порции.Разрезать надо очень аккуратно, так как десерт очень нежный.", + "video_recipe":"https://www.youtube.com/watch?v=kSlmBQLa0B8", + "ingridients": "4 яйца (я использовала 18 перепелиных яиц),100 г сахара,500 г маскарпоне,250 г печенья «Савоярди» (примерно 34 штуки),350 мл кофе (растворимого или сваренного),порошок какао,2–3 ст.л. вина «Марсала» (или любого другого), или рома, ликера, бренди, коньяка — по желанию" +}, +{ + "id": "5", + "name": "СОЛЯНКА", + "id_category":"1", + "text_recipe":"1. Налить бульон в емкость МВ (у меня куриный, можно сварить мясо на режиме Суп.Включить мультиварку, установить режим выпечка или экспресс.\n2.Обжарить лук, добавить томат. Перемешать и прожарить все это, еще 5 - 7 минут.\n3.Затем добавить огурцы, порезанные кубиками.\n4.Пока все в мультиварке тушится, готовим мясное ассорти. У меня - мясо отварное, колбаса вареная, колбаса копченая и кусочек копченой курицы. Режем все соломкой или кубиками.Закладываем в чашу мясное ассорти.Заливаем процеженным бульоном. Можно еще влить 1 стакан рассола от огурцов .\n5.Добавить картофель, порезанный мелкими кубиками.Добавить специи по вкусу, лавровый лист, зелень.\n6.Включить режем тушение или суп 1 час.И ждать сигнала)) Аромат на кухне будет неописуемый)).\n7.Подается солянка к столу, со сметаной, маслинами, долькой лимона и мелко нарезанной зеленью.Приятного аппетита!!!.", + "video_recipe":"https://www.youtube.com/watch?v=wXiK9Qoce8A", + "ingridients": "350 г свинины;\n2 луковицы;\n250 г копчёной колбасы;\n250 г ветчинной колбасы;\n4 солёных огурца;\n2 столовые ложки растительного масла;\n2 столовые ложки томатной пасты;\n100 г оливок;\n2 сосиски;\n100–120 мл огуречного рассола;\nсоль — по вкусу;\nзелень, сметана, лимон — для подачи." +}, +{ + "id": "6", + "name": "СВЕКОЛЬНИК", + "id_category":"1", + "text_recipe":"1. Подготовить продукты для приготовления горячего свекольника.\n2.Морковь очистить, вымыть, тонко нашинковать.Свеклу очистить, вымыть, нарезать соломкой.Лук очистить, вымыть, мелко нарезать.Картофель очистить, вымыть, нарезать дольками..\n3.Вскипятить воду (1-1,5 л)\n4.В кипящую воду положить 1 морковь, лук, картофель.Добавить нарезанные со­ломкой полторы свеклы. Накрыть крышкой и варить при слабом кипении.\n5.На сковороде растопить сливочное масло.Оставшиеся 0,5 свеклы, морковь выложить в растопленное масло, перемешать. Спассеровать на сливочном масле, помешивая. Жарить коренья нужно на среднем огне 5-7 минут.\n6.Помидоры ошпарить кипятком, снять шкурку.Помидоры мелко нарезать..\n7.Добавить помидо­ры к кореньям, перемешать, тушить еще 5-7 минут (помидоры должны полностью размягчиться).Высыпать в кастрюлю с кипящими овощами.\n8.Заправить по вкусу солью. Накрыть крышкой, варить еще 5 минут. Затем свекольник выключить.Можно откорректировать вкус, дополнительно заправив свекольник сахаром и лимонной кислотой.Горячий свекольник готов.\n9.При подаче горячий свекольник заправить зеленью и сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=admLVc8ezXw", + "ingridients": "Свекла - 250-350 г (2 шт.)\nМорковь - 150-200 г (1-2 шт.)\nКартофель - 200 г (2 шт.)\nПомидоры - 400 г (4-5 шт.)\nЛук - 70-90 г (1 шт.)\nСоль 1,5 ч. ложки\nСметана - 100-200 г\nЗелень - 0,5 пучка\nЛимонная кислота (по желанию) - щепотку\nСахар (по желанию) - 0,25 ч. ложки" +}, +{ + "id": "7", + "name": "ВИНИГРЕТ", + "id_category":"2", + "text_recipe":"1. Свеклу отварить до готовности.\n2.Картофель и морковь отварить до готовности.\n3.Лук мелко нарезать.\n4.Огурцы нарезать кубиками.\n5.Если капуста сильно соленая, ее промыть.Мелко нашинковать.\n6.Морковь нарезать кубиками.Свеклу нарезать кубиками.Картофель нарезать кубиками.\n7.Смешать картофель, морковь, огурцы, лук, капусту, свеклу.Немного посолить\n8.Заправить растительным маслом.", + "video_recipe":"https://www.youtube.com/watch?v=RZtWdZ8q6RM", + "ingridients": "400 г свеклы\n300 г моркови\n400 г картофеля\n200 г квашеной капусты\n200 г маринованных или соленых огурцов\n150 г лука\nсоль\nрастительное масло" +}, +{ + "id": "8", + "name": "ЦЕЗАРЬ", + "id_category":"2", + "text_recipe":"1.С хлеба срежьте корочку, а сам хлеб порежьте кубиками.\n2. Чеснок пропустите через чесночницу и обжарьте его пару минут в разогретом оливковом масле.\n3. Куриное филе порежьте небольшими кусочками и отправляйте к чесноку на сковороду.\n4. Обжарьте курицу, помешивая, 10 минут, в конце посолите и поперчите по вкусу.\n5. Уберите с огня курицу, а в ту же сковороду добавьте еще немного масла и обжарьте хлеб, постоянно помешивая, пока он не зарумянится.\n6. Приготовьте соус для салата «Цезарь» . Для этого пармезан натрите на мелкой терке. Смешайте яичный желток, оливковое масло, горчицу, лимонный сок, тертый пармезан и хорошенько все взбейте.\n7. Листья салата порвите средними кусками. Помидоры черри порежьте на половинки.\n8. Выложите на салат обжаренное куриное филе, добавьте помидоры, полейте соусом, сверху потрите пармезаном.\n9. Непосредственно перед подачей добавьте в салат «Цезарь» хлебные сухарики. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=onq7Sd8c2To", + "ingridients": "300 г курицы (филе)\n100 г пармезана\n100 г белого хлеба, 200 г листьев салата\n100 г помидоров черри\n1 зубок чеснока\n1 ст. ложка оливкового масла\nчерный молотый перец по вкусу\nсоль по вкусу.\nСоус для салата «Цезарь» включает ингредиенты:\n1 яичный желток\n1 ч. ложка горчицы\n2 ст. ложки оливкового масла\n1 ч. ложка лимонного сока\n50 г пармезана\nчерный молотый перец по вкусу\nсоль по вкусу." + +}, +{ + "id": "9", + "name": "ГОЛУБЦЫ", + "id_category":"3", + "text_recipe":"1.Подготовим капустные листья для голубцов, снимим листья с капусты.\n2.Измельчим лук и морковь.\n3.Поджарим овощи на растительном масле до готовности и разделим на две части. Одну часть используем для начинки. Во вторую часть добавим соль (1 ст. л.), сахар (1 ст. л.), молотый перец и томатный соус или кетчуп.\n4.Смешаем сваренный заранее рис, фарш и овощную зажарку. Начинку для голубцов посолим, поперчим и перемешаем.\n5.Закрутим голубцы с мясом и рисом.\n6.Голубцы выложим в кастрюлю и зальем томатной подливой.\n7.Готовим голубцы на небольшом огне примерно 1 час.", + "video_recipe":"https://www.youtube.com/watch?v=Pva-0xZ2Ips", + "ingridients": "Капуста белокочанная - 1 шт.\nРис - 1 стакан\nФарш мясной - 500 г\nМорковь - 1 шт.\nЛук репчатый - 4-5 шт.\nКетчуп или томатный соус - 3 ст.л.\nМасло растительное - для жарки\nПерец молотый (красный и черный)\nСахар\nСоль" + +}, +{ + "id": "11", + "name": "БРАУНИ", + "id_category":"4", + "text_recipe":"1.Включить духовку для предварительного разогрева на 180 градусов. Противень размером 25х35 см застелить фольгой и слегка сбрызнуть растительным маслом.\n2.В большой миске смешать масло, белый, ванильный и коричневый сахар и кофейный напиток. Миксером на средней скорости перемешать до пышного, однородного состояния. Затем по одному добавлять яйца, хорошо перемешивая после каждого.\n3. В большой миске соединить муку, какао-порошок, разрыхлитель, соду и соль. Эту массу постепенно всыпать в масляную смесь, при этом перемешивая миксером на средней скорости. В эту массу добавить шоколад и пекан. Хорошо перемешать и выложить эту массу в подготовленную форму.\n4.Поставить в разогретую духовку и выпекать около 30-35 минут. Перед подачей дать готовому изделию полностью остыть.", + "video_recipe":"https://www.youtube.com/watch?v=MhbZmcGSvcg", + "ingridients": "Масло сливочное (размягченное) - 300 г\nСахар коричневый - 1 3/4 стакана\nСахар белый - 1 стакан\nКофе растворимый - 1/2 стакана\nЯйца - 4 шт.\nВанильный сахар - 1 ст. л.\nМука пшеничная - 1 1/2 стакана\nКакао-порошок - 1 стакан\nРазрыхлитель - 1/2 ч. л.\nСода пищевая - 1/2 ч. л.\nСоль - 1/4 ч. л.\nЧипсы черного шоколада или шоколад, разломанный на кусочки - 1 стакан\nОрех пекан жареный - 1 стакан\nМолочный шоколад (разломанный на кусочки) - 30 г" + +}, +{ + "id": "12", + "name": "ЧИЗКЕЙК", + "id_category":"4", + "text_recipe":"1.Измельчите печенье до состояния крошки. Сливочное масло растопите на водяной бане.Перемешайте печенье с 1 ст. ложкой сахара, добавьте масло, тщательно перемешайте.\n2.Форму для запекания (диаметр моей формы - 22 см) застелите пергаментной бумагой. Из полученной массы сделайте основу для чизкейка в форме для запекания и поместите ее в духовку, разогретую до 170 градусов, на 10 минут.\n3.Пока корж находится в духовке, займитесь приготовлением сырной начинки. Для этого взбейте яйца с 4-мя столовыми ложками сахара, добавьте жирные сливки, ванилин и цедру половины лимона.\n4.В полученную массу добавьте сливочный сыр и снова все хорошо взбейте венчиком до получения однородной консистенции.\n5.Полученную сырную массу (довольно жидкую) вылейте на готовую основу и поместите в духовку. Внимание! Чизкейк должен готовиться в духовке на водяной бане при температуре не более 150 градусов в течение 70-80 минут.\n6.Готовый чизкейк уберите в холодильник на несколько часов, а лучше на ночь. Перед подачей украсьте чизкейк (например, сахарной пудрой и свежей клубникой) и достаньте из формы.", + "video_recipe":"https://www.youtube.com/watch?v=-UVzp2uF5Es", + "ingridients": "Печенье (любое рассыпчатое) - 300 г\nСыр сливочный (рикотта; в идеале - филадельфия) - 500 г\nСливки 35% - 200 г\nЯйца куриные - 4 шт.\nМасло сливочное - 100 г\nСахар - 5 ст. л.\nЛимон (для цедры) - 0,5-1 шт.\nВанилин - 1 пакетик (по вкусу)\nДля украшения (по желанию):\nСахарная пудра\nЯгоды свежие (клубника)" + +} +] +} diff --git a/TelegrammBotProjectByMaistrenko/telegabot.py b/TelegrammBotProjectByMaistrenko/telegabot.py new file mode 100644 index 0000000..8d5e91c --- /dev/null +++ b/TelegrammBotProjectByMaistrenko/telegabot.py @@ -0,0 +1,332 @@ +import telebot +from telebot import types + +import check_function + +API_TOKEN = '1240952041:AAGgpZ6C_-Ttga9fFgFKgdFImeV6GLcjd1s' + +bot = telebot.TeleBot(API_TOKEN,threaded=False) +@bot.message_handler(commands=['start']) + +def handle_text(message): + keyboard1 = telebot.types.ReplyKeyboardMarkup() + keyboard1.row('Поиск рецепта🥮') + keyboard1.row('Правила использования📄') + keyboard1.row('Помощь❓') + + bot.send_message(message.chat.id, + 'Готовить стало ещё проще!\n' + 'Добро пожаловать,' + str(message.from_user.username) + '\nЭтот бот предоставит вам возможность \nне только найти новые рецепты, но\nтакже сохранить их в кулинарную книгу\n Выберите одну из категорий ниже ', + reply_markup=keyboard1) + + result = check_function.check_user_exist(str(message.from_user.username)) + print(result) + +# +@bot.message_handler(commands=['help']) + +def handle_text(message): + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок,\n''/add_comment - добавить комментарий,\n''/see_comments - посмотреть комментарии других пользователей') + + +@bot.message_handler(commands=['first_dishes']) +def handle_text(message): + result = check_function.see_all_soups() + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['salads']) +def handle_text(message): + result = check_function.see_all_salads() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['main_dishes']) +def handle_text(message): + result = check_function.see_all_main_dishes() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['desserts']) +def handle_text(message): + result = check_function.see_all_desserts() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['statistic']) +def handle_text(message): + + result = check_function.statistic_of_marks() + print(type(result)) + bot.send_message(message.from_user.id,'Количество ценок "1" - '+ str(result[0])+'.') + bot.send_message(message.from_user.id, 'Количество ценок "2" - ' + str(result[1]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "3" - ' + str(result[2]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "4" - ' + str(result[3]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "5" - ' + str(result[4]) + '.') + + average = check_function.avarage_of_mark() + bot.send_message(message.from_user.id, 'Средняя оценка - ' + str(average) + '.') + +@bot.message_handler(commands=['add_comment']) +def handle_text(message): + sent = bot.send_message(message.chat.id, 'Введите свой комментарий') + bot.register_next_step_handler(sent, comments) + +@bot.message_handler(commands=['see_comments']) +def handle_text(message): + bot.send_message(message.chat.id, 'Комментарии других пользователей: ') + result = check_function.see_users_comments() + print(result) + for i in range(len(result)): + bot.send_message(message.chat.id, str((list(result[i]))[0]) + ': ' + str((list(result[i]))[1])) + +def comments(message): + check_function.add_comments(message.text, str(message.from_user.username)) + print(message.text) + bot.send_message(message.chat.id,'Спасибо, ваш комментарий был успешно добавлен!') + +@bot.message_handler(content_types=['text']) +def handle_text(message): + + if message.text == 'Правила использования📄': + bot.send_message(message.from_user.id, + '1. Для начала работы с ботом, необходимо ввести команду /start\n''2.Для поиска рецепта нажмите клавишу "поиск рецепта"\n''3.Выберите категорию, к которой относится блюдо, которое вы хотите найти,ВАЖНО,бот сможет найти блюдо в заданой категории, только, если оно относится к этой категории\n''4.Вы можете просмотреть видео рецепт блюда или просто прочиатть его,подтвердив свой выбор нажатием на соответствующюю клавишу\n''5.После окончания работы с ботом, вы можете поставить ем оценку и оставить комментарий.') + elif message.text == 'Помощь❓': + + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок') + elif message.text == 'Поиск рецепта🥮': + + keyboard = types.InlineKeyboardMarkup() + key_sup = types.InlineKeyboardButton(text='Первые блюда 🍲', callback_data='soups') + # И добавляем кнопку на экран + keyboard.add(key_sup) + key_main = types.InlineKeyboardButton(text='Основные блюда 🥘', callback_data='main_dishes') + keyboard.add(key_main) + key_salad = types.InlineKeyboardButton(text='Салаты 🥗', callback_data='salads') + keyboard.add(key_salad) + key_sweet = types.InlineKeyboardButton(text='Дессерты 🍰', callback_data='sweets') + keyboard.add(key_sweet) + + bot.send_message(message.from_user.id, "Выбери категорию.", reply_markup=keyboard) + + +@bot.callback_query_handler(func=lambda call: call.data == 'soups') +def callback_worker(call): + + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'main_dishes') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent, video_recipe) + + +@bot.callback_query_handler(func=lambda call: call.data == 'salads') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'sweets') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent, video_recipe) + + +def text_recipe(message): + + add = check_function.check_is_dish_exist((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + + else: + result = check_function.result_of_search((message.text).upper()) + list(result) + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + evaluating(message) + + +def video_recipe(message): + add = check_function.get_video_recipe((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + else: + result = check_function.get_exsist_video_recipe((message.text).upper()) + print(result) + bot.send_message(message.from_user.id, result) + print(message) + evaluating(message) +# +# def choos_dish(message): +# check_function.check_dish_category(message.text) + +def evaluating(message): + keyboard3 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='1', callback_data='one') + # И добавляем кнопку на экран + keyboard3.add(key_one) + key_two = types.InlineKeyboardButton(text='2', callback_data='two') + keyboard3.add(key_two) + key_three = types.InlineKeyboardButton(text='3', callback_data='three') + keyboard3.add(key_three) + key_four = types.InlineKeyboardButton(text='4', callback_data='four') + keyboard3.add(key_four) + key_five = types.InlineKeyboardButton(text='5', callback_data='five') + keyboard3.add(key_five) + bot.send_message(message.chat.id, "Оцените,пожалуйста,работу бота", reply_markup=keyboard3) + + @bot.callback_query_handler(func=lambda call: call.data == 'one') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(1, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'two') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(2, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'three') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(3, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'four') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(4, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'five') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(5, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + +def continue_working_with_bot(message): + keyboard4 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='Оставить комментарий', callback_data='write_comment') + # И добавляем кнопку на экран + keyboard4.add(key_one) + key_two = types.InlineKeyboardButton(text='Посмотреть комментарии пользователей', callback_data='see_comments') + keyboard4.add(key_two) + key_three = types.InlineKeyboardButton(text='Посмотреть статистику оценок', callback_data='see_rating') + keyboard4.add(key_three) + bot.send_message(message.chat.id, "Продолжите работу с ботом", reply_markup=keyboard4) + + @bot.callback_query_handler(func=lambda call: call.data == 'write_comment') + def callback_worker(call): + print(message.text) + sent = bot.send_message(call.message.chat.id, 'Введите свой комментарий') + bot.register_next_step_handler(sent,comments) + + @bot.callback_query_handler(func=lambda call: call.data == 'see_comments') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Отзывы другх пользователей') + result = check_function.see_users_comments() + print(result) + for i in range(len(result)): + bot.send_message(message.chat.id, str((list(result[i]))[0])+': '+str((list(result[i]))[1])) + + @bot.callback_query_handler(func=lambda call: call.data == 'see_rating') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Статистика оценок') + result = check_function.statistic_of_marks() + print(type(result)) + bot.send_message(message.from_user.id, 'Количество ценок "1" - ' + str(result[0]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "2" - ' + str(result[1]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "3" - ' + str(result[2]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "4" - ' + str(result[3]) + '.') + bot.send_message(message.from_user.id, 'Количество ценок "5" - ' + str(result[4]) + '.') + + average = check_function.avarage_of_mark() + bot.send_message(message.from_user.id, 'Средняя оценка - ' + str(average) + '.') + +# def comments(message): +# check_function.add_comments(message.text, str(message.from_user.username)) +# print(message.text) +# bot.send_message(message.chat.id,'Спасибо, ваш комментарий был успешно добавлен!') + +if __name__ == '__main__': + bot.polling() +# diff --git a/Workshop4/Workshop4/check_function.py b/Workshop4/Workshop4/check_function.py new file mode 100644 index 0000000..3e186a1 --- /dev/null +++ b/Workshop4/Workshop4/check_function.py @@ -0,0 +1,55 @@ +from database_connection import engine +from db_classes import Categories, Dishes, Clients, Marks,Base +from sqlalchemy.sql import select, update, join +from sqlalchemy import and_, or_, between, asc, desc,update +from sqlalchemy.orm import sessionmaker + +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +def check_user_exist(username): + + try: + if bool(session.query(Clients.id).filter_by(id = '1').first()) is False: + + row = Clients(id = '1',client_username = username) + session.add(row) + session.commit() + search_query = (session.query(Clients).filter_by(id = '1').one()).client_username + + print('Hello,', search_query) + + else: + if bool(session.query(Clients.client_username).filter_by(client_username = username).first()) is True: + print('User already exist') + + else: + id_value = session.query(Clients.id).count() + row = Clients(id=id_value+1, client_username=username) + session.add(row) + session.commit() + + except: + print('This user already exsist') + + + + +def check_mark_value(id,mark,values,id_client,dish_id,text): + if mark > 5: + print('Max value is 5') + else: + row = Marks(id=id, mark_value=values,client_id = id_client,dish_id = dish_id,text_reviw = text) + session.add(row) + session.commit() + +def check_is_dish_exist(dish_name): + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + print('This dish is not exist in our database') + else: + result = session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).text_recipe + print("Recipe:", result) + + + diff --git a/Workshop4/Workshop4/creating_database.txt b/Workshop4/Workshop4/creating_database.txt new file mode 100644 index 0000000..bee9786 --- /dev/null +++ b/Workshop4/Workshop4/creating_database.txt @@ -0,0 +1,37 @@ +CREATE TABLE dishes( + id NUMBER(2) NOT NULL, + dish_name VARCHAR2(50) NOT NULL, + id_category NUMBER(3) NOT NULL, + text_recipe VARCHAR2(3000) NOT NULL, + video_recept VARCHAR2(100) NOT NULL, + ingridients VARCHAR2(800) NOT NULL, + CONSTRAINT pk_id_dish PRIMARY KEY (id), + CONSTRAINT fk_id_category FOREIGN KEY(id_category) REFERENCES dish_categories(id) +); + +CREATE TABLE dish_categories( + id NUMBER(2) NOT NULL, + category_name VARCHAR2(50) NOT NULL, + CONSTRAINT pk_id_category PRIMARY KEY (id) + +); + +CREATE TABLE clients( + id NUMBER(2) NOT NULL, + client_username VARCHAR2(50) NOT NULL, + CONSTRAINT pk_id_client PRIMARY KEY (id), + CONSTRAINT username_unique UNIQUE (client_username) +); + +CREATE TABLE marks( + id NUMBER(2) NOT NULL, + mark_value NUMBER(2), + client_id NUMBER(2) NOT NULL, + dish_id NUMBER(2) NOT NULL, + text_reviw VARCHAR2(200) NOT NULL, + CONSTRAINT pk_id_mark PRIMARY KEY (id), + CONSTRAINT fk_id_client FOREIGN KEY(client_id) REFERENCES clients(id), + CONSTRAINT fk_id_dish FOREIGN KEY(dish_id) REFERENCES dishes(id), + CONSTRAINT check_mark_value CHECK(mark_value<=5) +); + diff --git a/Workshop4/Workshop4/database_connection.py b/Workshop4/Workshop4/database_connection.py new file mode 100644 index 0000000..56698f6 --- /dev/null +++ b/Workshop4/Workshop4/database_connection.py @@ -0,0 +1,13 @@ +from sqlalchemy.engine import create_engine + +DIALECT = 'oracle' +SQL_DRIVER = 'cx_oracle' +USERNAME = 'system' +PASSWORD = 'msn1973msn' + +HOST = 'localhost' +PORT = 1521 +SERVICE = 'xe' + +ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD + '@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE +engine = create_engine(ENGINE_PATH_WIN_AUTH) diff --git a/Workshop4/Workshop4/db_classes.py b/Workshop4/Workshop4/db_classes.py new file mode 100644 index 0000000..097f965 --- /dev/null +++ b/Workshop4/Workshop4/db_classes.py @@ -0,0 +1,99 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import json + +Base = declarative_base() + +from sqlalchemy.orm import relationship, sessionmaker + +class Categories(Base): + + __tablename__ = 'dish_categories' + + id = Column(Integer, primary_key=True) + category_name = Column(String(50)) + + styles = relationship('Dishes', backref='dish_categories', lazy=True) + + +class Dishes(Base): + + __tablename__ = 'dishes' + + id = Column(Integer, primary_key=True) + dish_name = Column(String(50)) + id_category = Column(Integer, ForeignKey("dish_categories.id")) + text_recipe = Column(String(100)) + video_recept = Column(String(100)) + ingridients = Column(String(800)) + + +class Clients(Base): + + __tablename__ = 'clients' + + id = Column(Integer, primary_key=True) + client_username = Column(String(50)) + +class Marks(Base): + + __tablename__ = 'marks' + + id = Column(Integer, primary_key=True) + mark_value = Column(Integer) + client_id = Column(Integer, ForeignKey("clients.id")) + dish_id = Column(Integer, ForeignKey("dishes.id")) + text_reviw = Column(String(100)) + + styles = relationship('Clients', backref='marks', lazy=True) + styles_1 = relationship('Dishes', backref='marks', lazy=True) + + + +Session = sessionmaker(bind = engine) +session = Session() + +categories = open("C:/Pyprojects/venv/categories.json",encoding="utf-8") +data_categories = json.load(categories) + +dishes = open("C:/Pyprojects/venv/recipes.json",encoding="utf8") +data_dishes = json.load(dishes) + +session.add_all([ + Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), + Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), + Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), + Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +) + +session.add_all([ + Dishes(id = data_dishes['dish'][0]['id'], + dish_name = data_dishes['dish'][0]['name'], + id_category=data_dishes['dish'][0]['id_category'], + text_recipe = data_dishes['dish'][0]['text_recipe'], + video_recept=data_dishes['dish'][0]['video_recipe'], + ingridients=data_dishes['dish'][0]['ingridients']), +Dishes(id = data_dishes['dish'][1]['id'], + dish_name = data_dishes['dish'][1]['name'], + id_category=data_dishes['dish'][1]['id_category'], + text_recipe = data_dishes['dish'][1]['text_recipe'], + video_recept=data_dishes['dish'][1]['video_recipe'], + ingridients=data_dishes['dish'][1]['ingridients']), +Dishes(id = data_dishes['dish'][2]['id'], + dish_name = data_dishes['dish'][2]['name'], + id_category=data_dishes['dish'][2]['id_category'], + text_recipe = data_dishes['dish'][2]['text_recipe'], + video_recept=data_dishes['dish'][2]['video_recipe'], + ingridients=data_dishes['dish'][2]['ingridients']), +Dishes(id = data_dishes['dish'][3]['id'], + dish_name = data_dishes['dish'][3]['name'], + id_category=data_dishes['dish'][3]['id_category'], + text_recipe = data_dishes['dish'][3]['text_recipe'], + video_recept=data_dishes['dish'][3]['video_recipe'], + ingridients=data_dishes['dish'][3]['ingridients'])] +) + +session.commit() + + diff --git a/Workshop4/Workshop4/json_files/categories.json b/Workshop4/Workshop4/json_files/categories.json new file mode 100644 index 0000000..4bb44e5 --- /dev/null +++ b/Workshop4/Workshop4/json_files/categories.json @@ -0,0 +1,19 @@ +{"categories":[ + { + "id": "1", + "name": "Первые блюда" +}, +{ + "id": "2", + "name": "Салаты" +}, +{ + "id": "3", + "name": "Основные блюда" +}, +{ + "id": "4", + "name": "Дессерты" +} +] +} \ No newline at end of file diff --git a/Workshop4/Workshop4/json_files/recipes.json b/Workshop4/Workshop4/json_files/recipes.json new file mode 100644 index 0000000..4337a32 --- /dev/null +++ b/Workshop4/Workshop4/json_files/recipes.json @@ -0,0 +1,35 @@ +{"dish":[ + { + "id": "1", + "name": "БОРЩ", + "id_category":"1", + "text_recipe":"Мясо вымойте, положите в кастрюлю и залейте холодной водой. Дождитесь, пока закипит, и варите ещё 20 минут. После закипания с помощью шумовки снимите лишнюю пену.Свёклу очистите от кожуры, натрите на крупной тёрке и обжарьте на растительном масле. Влейте немного мясного бульона и оставьте тушиться на медленном огне.Мелко нашинкуйте лук и обжарьте на масле до золотистого цвета. Добавьте морковь, влейте ещё немного бульона и тушите в течение 3—5 минут.Очистите картофель, нарежьте кубиками, добавьте к бульону и дайте закипеть.Затем добавьте мелко нашинкованную свежую капусту. Варите до готовности.Посолите и поперчите по вкусу.В конце добавьте тушёную свёклу, зелень и лавровый лист. Накройте кастрюлю крышкой и варите в течение 3—5 минут, после чего снимите с огня.При подаче заправьте борщ сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=_-9nH4zFThs", + "ingridients": "Говядина (на кости)300—400 г,Капуста (свежая)1,5 кг,Картофель3—4 шт.,Морковь1—2 шт.,Лук (репчатый)1 шт.,Свёкла1 шт.,Сметана100 мл,Масло (растительное)2 ст. л.,Лавровый лист2 листа,Вода1,5—2 л,Зелень (укроп или петрушка)по вкусу,Перец (чёрный молотый)по вкусу,Сольпо вкусу')" +}, +{ + "id": "2", + "name": "ОЛИВЬЕ", + "id_category":"2", + "text_recipe":"Картофель и морковь сварить «в мундирах». Сварить яйца. 2. Тем временем колбасу и огурцы нарезать мелкими кубиками. 3. Готовые овощи и яйца почистить и также нарезать кубиками. 4. Мелко нарезать лук. 5. Все ингредиенты смешать, добавить горошек и заправить майонезом. 6. Украсить зеленью.", + "video_recipe":"https://www.youtube.com/watch?v=z8KpTK5oGBQ", + "ingridients": "картофель - 4-5 штук,морковь - 2 крупные или 3 средние ,консервированный горошек – 1 банка ,колбаса «Докторская» - 300-400 г,соленые или маринованные огурцы – 4-5 штук,яйца – 6 штук,лук – 1 штука,зелень,майонез." +}, +{ + "id": "3", + "name": "РИЗОТТО", + "id_category":"3", + "text_recipe":"Разогрейте сливочное масло в казанке на среднем огне. Добавьте грибы и готовьте, помешивая, 5-10 минут (пока грибы не подрумянятся). Добавьте нарезанную курицу, 1 ч. л. соли, перец и готовьте, помешивая, около 10 минут. Переложите грибы с курицей в другую посуду. В кастрюле доведите до кипения бульон.2. В казанке разогрейте растительное масло. Добавьте лук и обжарьте его на умеренном огне, помешивая, в течение 5 минут. Добавьте рис. Готовьте, помешивая, около 2 минут.3. Влейте в казанок с рисом вино, добавьте 1 ч. л. соли. Готовьте, часто помешивая, до тех пор, пока жидкость не впитается. Добавьте пол стакана кипящего бульона и помешивайте, пока не впитается. Рис должен слегка кипеть (уменьшите огонь, если нужно). Продолжайте готовить рис, подливая по пол стакана бульона и перемешивая (всего – около 25-30 минут). Жидкость, которая не впитается, станет вязкой благодаря высокому содержанию крахмала в рисе. Бульон может весь не понадобиться, а может, придется добавить немного бульона или воды дополнительно.4. Вмешайте курицу с грибами, сыр и петрушку. Прогрейте ризотто с курицей и подавайте блюдо. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=5__wUabM0y8", + "ingridients": "Масло сливочное – 2 ст. л,Грибы, тонко нарезанные – 220 г,Куриные грудки, филе, нарезанное кусочками по 1 см – 300 г,Соль – 1 ч. л.,Перец черный молотый – 1 ч. л.,Бульон куриный – 5 стакан,Масло растительное – 1 ст. л.,Лук репчатый, нарезанный – пол стакана,Рис Арборио – 1 стакан,Вино сухое белое – пол стакана,Сыр Пармезан тертый – пол стакана,Зелень петрушки нарезанная – 2 ст. л." +}, +{ + "id": "4", + "name": "ТИРАМИСУ", + "id_category":"4", + "text_recipe":"Отделить белки от желтков. Желтки растереть с сахаром.Добавить маскарпоне.Перемешать.Белки взбить в крепкую пену.Добавить белки в желтково-сырную массу.Аккуратно перемешать.Палочки окунуть в холодный кофе.Палочки надо окунать очень быстрым движением, чтобы они не размокли.Кофе приготовьте так, как вам нравится (я на 350 мл добавила 4 ч.л. кофе).По желанию, в кофе можно добавить вино, ром, ликер, бренди, или коньяк.В форму (я использовала форму размером 17 на 25 см) плотно выложить палочки, смоченные в кофе.На палочки выложить половину крема.Разровнять.На крем снова выложить палочки, смоченные в кофе.На палочки выложить оставшийся крем.Разровнять.Поставить в холодильник на 5–6 часов.Посыпать через сито какао.Разрезать на порции.Разрезать надо очень аккуратно, так как десерт очень нежный.", + "video_recipe":"https://www.youtube.com/watch?v=kSlmBQLa0B8", + "ingridients": "4 яйца (я использовала 18 перепелиных яиц),100 г сахара,500 г маскарпоне,250 г печенья «Савоярди» (примерно 34 штуки),350 мл кофе (растворимого или сваренного),порошок какао,2–3 ст.л. вина «Марсала» (или любого другого), или рома, ликера, бренди, коньяка — по желанию" +} +] +} diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/WorkShop2 Flask.pdf" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/WorkShop2 Flask.pdf" new file mode 100644 index 0000000..6f00a06 Binary files /dev/null and "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/WorkShop2 Flask.pdf" differ diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/flask.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/flask.py" new file mode 100644 index 0000000..2e3dd64 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/flask.py" @@ -0,0 +1,56 @@ +from flask import Flask, render_template, request, abort, redirect, url_for +app = Flask(__name__) + + +@app.route('/api/', methods = ['GET']) +def apiget(action): + if action == "user": + + return render_template("user.html", user=user_dictionary) + + elif action == "dish": + return render_template("dish.html", dish=dish_dictionary) + + elif action == "all": + return render_template("all.html", user=user_dictionary, dish=dish_dictionary) + + else: + return render_template("404.html", action_value=action, user=user_dictionary, dish=dish_dictionary) + + +#dynamic rout +@app.route('/api', methods=['POST']) +def apipost(): + + + if request.form["action"] == "user_update": + + user_dictionary["user_name"] = request.form["name"] + user_dictionary["user_email"] = request.form["email"] + + return redirect(url_for('apiget', action="all")) + + if request.form["action"] == "dish_update": + + dish_dictionary["dish_id"] = request.form["id"] + dish_dictionary["dish_name"] = request.form["name"] + dish_dictionary["dish_category"] = request.form["category"] + + return redirect(url_for("apiget", action="all")) + + + + +if __name__ == '__main__': + user_dictionary = { + "user_name": "Hanna", + "user_email": "user@gmail.com", + } + + dish_dictionary = { + "dish_id": 5, + "dish_name": "Soup", + "dish_category": "First course" + } + + app.run(debug=True) \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/404.html" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/404.html" new file mode 100644 index 0000000..9193b75 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/404.html" @@ -0,0 +1,10 @@ + + + + + 404 page + + +

Not correct action value: {{action_value}}

+ + \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/all.html" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/all.html" new file mode 100644 index 0000000..6640ebb --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/all.html" @@ -0,0 +1,49 @@ + + + + + all + + + + + + + + + + + + +
user_nameuser_email
{{user.get('user_name')}}{{user.get('user_email')}}
+ +
+ + + + + + + + + + + + +
dish_iddish_namedish_category
{{dish.get('dish_id')}}{{dish.get('dish_name')}}{{dish.get('dish_category')}}
+ + + \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/dish.html" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/dish.html" new file mode 100644 index 0000000..7973a5b --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/dish.html" @@ -0,0 +1,21 @@ + + + + + customer + + + + +
+

Dish Id

+

Dish name

+

Dish category

+ +
+ + + + + + \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/user.html" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/user.html" new file mode 100644 index 0000000..19c9859 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop2/source/templates/user.html" @@ -0,0 +1,19 @@ + + + + + customer + + + + +
+

Name

+

Email

+
+ + + + + + \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/creating_database.txt" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/creating_database.txt" new file mode 100644 index 0000000..bee9786 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/creating_database.txt" @@ -0,0 +1,37 @@ +CREATE TABLE dishes( + id NUMBER(2) NOT NULL, + dish_name VARCHAR2(50) NOT NULL, + id_category NUMBER(3) NOT NULL, + text_recipe VARCHAR2(3000) NOT NULL, + video_recept VARCHAR2(100) NOT NULL, + ingridients VARCHAR2(800) NOT NULL, + CONSTRAINT pk_id_dish PRIMARY KEY (id), + CONSTRAINT fk_id_category FOREIGN KEY(id_category) REFERENCES dish_categories(id) +); + +CREATE TABLE dish_categories( + id NUMBER(2) NOT NULL, + category_name VARCHAR2(50) NOT NULL, + CONSTRAINT pk_id_category PRIMARY KEY (id) + +); + +CREATE TABLE clients( + id NUMBER(2) NOT NULL, + client_username VARCHAR2(50) NOT NULL, + CONSTRAINT pk_id_client PRIMARY KEY (id), + CONSTRAINT username_unique UNIQUE (client_username) +); + +CREATE TABLE marks( + id NUMBER(2) NOT NULL, + mark_value NUMBER(2), + client_id NUMBER(2) NOT NULL, + dish_id NUMBER(2) NOT NULL, + text_reviw VARCHAR2(200) NOT NULL, + CONSTRAINT pk_id_mark PRIMARY KEY (id), + CONSTRAINT fk_id_client FOREIGN KEY(client_id) REFERENCES clients(id), + CONSTRAINT fk_id_dish FOREIGN KEY(dish_id) REFERENCES dishes(id), + CONSTRAINT check_mark_value CHECK(mark_value<=5) +); + diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/database_connection.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/database_connection.py" new file mode 100644 index 0000000..56698f6 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/database_connection.py" @@ -0,0 +1,13 @@ +from sqlalchemy.engine import create_engine + +DIALECT = 'oracle' +SQL_DRIVER = 'cx_oracle' +USERNAME = 'system' +PASSWORD = 'msn1973msn' + +HOST = 'localhost' +PORT = 1521 +SERVICE = 'xe' + +ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD + '@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE +engine = create_engine(ENGINE_PATH_WIN_AUTH) diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/db_classes.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/db_classes.py" new file mode 100644 index 0000000..097f965 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/db_classes.py" @@ -0,0 +1,99 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import json + +Base = declarative_base() + +from sqlalchemy.orm import relationship, sessionmaker + +class Categories(Base): + + __tablename__ = 'dish_categories' + + id = Column(Integer, primary_key=True) + category_name = Column(String(50)) + + styles = relationship('Dishes', backref='dish_categories', lazy=True) + + +class Dishes(Base): + + __tablename__ = 'dishes' + + id = Column(Integer, primary_key=True) + dish_name = Column(String(50)) + id_category = Column(Integer, ForeignKey("dish_categories.id")) + text_recipe = Column(String(100)) + video_recept = Column(String(100)) + ingridients = Column(String(800)) + + +class Clients(Base): + + __tablename__ = 'clients' + + id = Column(Integer, primary_key=True) + client_username = Column(String(50)) + +class Marks(Base): + + __tablename__ = 'marks' + + id = Column(Integer, primary_key=True) + mark_value = Column(Integer) + client_id = Column(Integer, ForeignKey("clients.id")) + dish_id = Column(Integer, ForeignKey("dishes.id")) + text_reviw = Column(String(100)) + + styles = relationship('Clients', backref='marks', lazy=True) + styles_1 = relationship('Dishes', backref='marks', lazy=True) + + + +Session = sessionmaker(bind = engine) +session = Session() + +categories = open("C:/Pyprojects/venv/categories.json",encoding="utf-8") +data_categories = json.load(categories) + +dishes = open("C:/Pyprojects/venv/recipes.json",encoding="utf8") +data_dishes = json.load(dishes) + +session.add_all([ + Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), + Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), + Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), + Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +) + +session.add_all([ + Dishes(id = data_dishes['dish'][0]['id'], + dish_name = data_dishes['dish'][0]['name'], + id_category=data_dishes['dish'][0]['id_category'], + text_recipe = data_dishes['dish'][0]['text_recipe'], + video_recept=data_dishes['dish'][0]['video_recipe'], + ingridients=data_dishes['dish'][0]['ingridients']), +Dishes(id = data_dishes['dish'][1]['id'], + dish_name = data_dishes['dish'][1]['name'], + id_category=data_dishes['dish'][1]['id_category'], + text_recipe = data_dishes['dish'][1]['text_recipe'], + video_recept=data_dishes['dish'][1]['video_recipe'], + ingridients=data_dishes['dish'][1]['ingridients']), +Dishes(id = data_dishes['dish'][2]['id'], + dish_name = data_dishes['dish'][2]['name'], + id_category=data_dishes['dish'][2]['id_category'], + text_recipe = data_dishes['dish'][2]['text_recipe'], + video_recept=data_dishes['dish'][2]['video_recipe'], + ingridients=data_dishes['dish'][2]['ingridients']), +Dishes(id = data_dishes['dish'][3]['id'], + dish_name = data_dishes['dish'][3]['name'], + id_category=data_dishes['dish'][3]['id_category'], + text_recipe = data_dishes['dish'][3]['text_recipe'], + video_recept=data_dishes['dish'][3]['video_recipe'], + ingridients=data_dishes['dish'][3]['ingridients'])] +) + +session.commit() + + diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/categories.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/categories.json" new file mode 100644 index 0000000..4bb44e5 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/categories.json" @@ -0,0 +1,19 @@ +{"categories":[ + { + "id": "1", + "name": "Первые блюда" +}, +{ + "id": "2", + "name": "Салаты" +}, +{ + "id": "3", + "name": "Основные блюда" +}, +{ + "id": "4", + "name": "Дессерты" +} +] +} \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/recipes.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/recipes.json" new file mode 100644 index 0000000..4337a32 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop4/Workshop4/json_files/recipes.json" @@ -0,0 +1,35 @@ +{"dish":[ + { + "id": "1", + "name": "БОРЩ", + "id_category":"1", + "text_recipe":"Мясо вымойте, положите в кастрюлю и залейте холодной водой. Дождитесь, пока закипит, и варите ещё 20 минут. После закипания с помощью шумовки снимите лишнюю пену.Свёклу очистите от кожуры, натрите на крупной тёрке и обжарьте на растительном масле. Влейте немного мясного бульона и оставьте тушиться на медленном огне.Мелко нашинкуйте лук и обжарьте на масле до золотистого цвета. Добавьте морковь, влейте ещё немного бульона и тушите в течение 3—5 минут.Очистите картофель, нарежьте кубиками, добавьте к бульону и дайте закипеть.Затем добавьте мелко нашинкованную свежую капусту. Варите до готовности.Посолите и поперчите по вкусу.В конце добавьте тушёную свёклу, зелень и лавровый лист. Накройте кастрюлю крышкой и варите в течение 3—5 минут, после чего снимите с огня.При подаче заправьте борщ сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=_-9nH4zFThs", + "ingridients": "Говядина (на кости)300—400 г,Капуста (свежая)1,5 кг,Картофель3—4 шт.,Морковь1—2 шт.,Лук (репчатый)1 шт.,Свёкла1 шт.,Сметана100 мл,Масло (растительное)2 ст. л.,Лавровый лист2 листа,Вода1,5—2 л,Зелень (укроп или петрушка)по вкусу,Перец (чёрный молотый)по вкусу,Сольпо вкусу')" +}, +{ + "id": "2", + "name": "ОЛИВЬЕ", + "id_category":"2", + "text_recipe":"Картофель и морковь сварить «в мундирах». Сварить яйца. 2. Тем временем колбасу и огурцы нарезать мелкими кубиками. 3. Готовые овощи и яйца почистить и также нарезать кубиками. 4. Мелко нарезать лук. 5. Все ингредиенты смешать, добавить горошек и заправить майонезом. 6. Украсить зеленью.", + "video_recipe":"https://www.youtube.com/watch?v=z8KpTK5oGBQ", + "ingridients": "картофель - 4-5 штук,морковь - 2 крупные или 3 средние ,консервированный горошек – 1 банка ,колбаса «Докторская» - 300-400 г,соленые или маринованные огурцы – 4-5 штук,яйца – 6 штук,лук – 1 штука,зелень,майонез." +}, +{ + "id": "3", + "name": "РИЗОТТО", + "id_category":"3", + "text_recipe":"Разогрейте сливочное масло в казанке на среднем огне. Добавьте грибы и готовьте, помешивая, 5-10 минут (пока грибы не подрумянятся). Добавьте нарезанную курицу, 1 ч. л. соли, перец и готовьте, помешивая, около 10 минут. Переложите грибы с курицей в другую посуду. В кастрюле доведите до кипения бульон.2. В казанке разогрейте растительное масло. Добавьте лук и обжарьте его на умеренном огне, помешивая, в течение 5 минут. Добавьте рис. Готовьте, помешивая, около 2 минут.3. Влейте в казанок с рисом вино, добавьте 1 ч. л. соли. Готовьте, часто помешивая, до тех пор, пока жидкость не впитается. Добавьте пол стакана кипящего бульона и помешивайте, пока не впитается. Рис должен слегка кипеть (уменьшите огонь, если нужно). Продолжайте готовить рис, подливая по пол стакана бульона и перемешивая (всего – около 25-30 минут). Жидкость, которая не впитается, станет вязкой благодаря высокому содержанию крахмала в рисе. Бульон может весь не понадобиться, а может, придется добавить немного бульона или воды дополнительно.4. Вмешайте курицу с грибами, сыр и петрушку. Прогрейте ризотто с курицей и подавайте блюдо. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=5__wUabM0y8", + "ingridients": "Масло сливочное – 2 ст. л,Грибы, тонко нарезанные – 220 г,Куриные грудки, филе, нарезанное кусочками по 1 см – 300 г,Соль – 1 ч. л.,Перец черный молотый – 1 ч. л.,Бульон куриный – 5 стакан,Масло растительное – 1 ст. л.,Лук репчатый, нарезанный – пол стакана,Рис Арборио – 1 стакан,Вино сухое белое – пол стакана,Сыр Пармезан тертый – пол стакана,Зелень петрушки нарезанная – 2 ст. л." +}, +{ + "id": "4", + "name": "ТИРАМИСУ", + "id_category":"4", + "text_recipe":"Отделить белки от желтков. Желтки растереть с сахаром.Добавить маскарпоне.Перемешать.Белки взбить в крепкую пену.Добавить белки в желтково-сырную массу.Аккуратно перемешать.Палочки окунуть в холодный кофе.Палочки надо окунать очень быстрым движением, чтобы они не размокли.Кофе приготовьте так, как вам нравится (я на 350 мл добавила 4 ч.л. кофе).По желанию, в кофе можно добавить вино, ром, ликер, бренди, или коньяк.В форму (я использовала форму размером 17 на 25 см) плотно выложить палочки, смоченные в кофе.На палочки выложить половину крема.Разровнять.На крем снова выложить палочки, смоченные в кофе.На палочки выложить оставшийся крем.Разровнять.Поставить в холодильник на 5–6 часов.Посыпать через сито какао.Разрезать на порции.Разрезать надо очень аккуратно, так как десерт очень нежный.", + "video_recipe":"https://www.youtube.com/watch?v=kSlmBQLa0B8", + "ingridients": "4 яйца (я использовала 18 перепелиных яиц),100 г сахара,500 г маскарпоне,250 г печенья «Савоярди» (примерно 34 штуки),350 мл кофе (растворимого или сваренного),порошок какао,2–3 ст.л. вина «Марсала» (или любого другого), или рома, ликера, бренди, коньяка — по желанию" +} +] +} diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/check_function.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/check_function.py" new file mode 100644 index 0000000..1a0e72c --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/check_function.py" @@ -0,0 +1,169 @@ +from database_connection import engine +from db_classes import Categories, Dishes, Clients, Marks,Base +from sqlalchemy.sql import select, update, join +from sqlalchemy import and_, or_, between, asc, desc,update +from sqlalchemy.orm import sessionmaker +import plotly.express as px +import plotly.graph_objects as go + + +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +# функция для добавления нового пользователя +def check_user_exist(username): + + try: + # q = session.query(Clients).filter_by(Clients.id == '1') + + if bool(session.query(Clients.id).filter_by(id = '1').first()) is False: + + row = Clients(id = '1',client_username = username) + session.add(row) + session.commit() + search_query = (session.query(Clients).filter_by(id = '1').one()).client_username + print('Hello,', search_query) + + else: + + if bool(session.query(Clients.client_username).filter_by(client_username = username).first()) is True: + print('User already exist') + + else: + id_value = session.query(Clients.id).count() + row = Clients(id = id_value+1, client_username = username) + session.add(row) + session.commit() + print('We successfully added you to our database') + + except: + print('This user already exsist') + +# функция для проверки значения оценки +def check_mark_value(id,mark,values,id_client,dish_id,text): + if mark > 5: + print('Max value is 5') + else: + row = Marks(id=id, mark_value=values,client_id = id_client,dish_id = dish_id,text_reviw = text) + session.add(row) + session.commit() +# bool(User.query.filter_by(name='John Smith').first()) + +# функция для проверки существования блюда +def check_is_dish_exist(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + + else: + return True +# +def if_not_exist_dish(): + + result = session.query(Dishes.dish_name).all() + return 'Такого блюда не существует в нашей базе данных, посмотрите блюда, которые доступны',result + +def result_of_search(dish_name): + + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()) + return result.ingridients, result.text_recipe + + # функция для получения видео рецепта +def get_video_recipe(dish_name): + # exsist = session.query(Dishes).filter(Dishes.dish_name == dish_name) + if bool(session.query(Dishes.dish_name).filter_by(dish_name = dish_name).first()) is False: + return False + else: + return True + +def get_exsist_video_recipe(dish_name): + result = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).video_recept + return result +# функция для добавления оценки пользователя +def add_user_mark(mark,client_username,dish_name): + + if bool(session.query(Marks.id).filter_by(id='1').first()) is False: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).one()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + + row = Marks(id= '1', mark_value = mark, client_id = id_found, dish_id = dish_id,user_name = client_username) + session.add(row) + session.commit() + return 'Вы наш первый пользователь.Мы успешно добавили вашу первую оценку' + + elif bool(session.query(Marks).filter(Marks.user_name == client_username).one()) is True: + session.query(Marks).filter(Marks.user_name == client_username).update({Marks.mark_value: mark},synchronize_session=False) + session.commit() + return 'Мы успешно обновили вашу оценку' + else: + id_found = (session.query(Clients).filter(Clients.client_username == client_username).one()).id + dish_id = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + id_value = session.query(Marks.id).count() + row = Marks(id=id_value + 1, mark_value = mark, client_id = id_found, dish_id = dish_id, user_name = client_username) + session.add(row) + session.commit() + return 'Мы успешно добавили вашу оценку' +# функция для проверки принадлежности блюда к категории +def check_dish_category(dish_name): + id_dish = (session.query(Dishes).filter(Dishes.dish_name == dish_name).one()).id + dish_category = (session.query(Categories).filter(Categories.id == id_dish).one()).category_name + return dish_category +# функция добавления комментария пользователя в бд +def add_comments(message,username): + + session.query(Marks).filter(Marks.user_name == username).update({Marks.text_reviw: message},synchronize_session = False) + session.commit() + return 'Мы успешно добавили ваш комментарий' +# функции для просмотре блюд и коментариев +def see_users_comments(): + return session.query(Marks.user_name,Marks.text_reviw).all() + +def see_all_soups(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 1).all()) + +def see_all_main_dishes(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 3).all()) + +def see_all_salads(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 2).all()) + +def see_all_desserts(): + return (session.query(Dishes.dish_name).filter(Dishes.id_category == 4).all()) + +# график распределения оценок пользователей +def graph(): + result = session.query(Marks.mark_value).all() + print(result[0][0]) + count_of_five = [] + count_of_four = [] + count_of_three = [] + count_of_two = [] + count_of_one = [] + for i in range(len(result)): + if result[i][0] == 5: + count_of_five.append(result[i][0]) + elif result[i][0] == 4: + count_of_four.append(result[i][0]) + elif result[i][0] == 3: + count_of_three.append(result[i][0]) + elif result[i][0] == 2: + count_of_two.append(result[i][0]) + elif result[i][0] == 1: + count_of_one.append(result[i][0]) + + labels = ['mark 5', 'mark 4', 'mark 3','mark 2','mark 1'] + values = [len(count_of_five),len(count_of_four),len(count_of_three),len(count_of_two),len(count_of_one)] + + fig = go.Figure(data=[go.Pie(labels=labels, values=values)]) + fig.show() + + + + + + + + + + diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/database_connection.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/database_connection.py" new file mode 100644 index 0000000..2191a04 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/database_connection.py" @@ -0,0 +1,14 @@ +from sqlalchemy.engine import create_engine + +# для создания таблиц Вам неободимо прописать путь к своей базе данніх oracle +DIALECT = 'oracle' +SQL_DRIVER = 'cx_oracle' +USERNAME = 'system' +PASSWORD = 'msn1973msn' + +HOST = 'localhost' +PORT = 1521 +SERVICE = 'xe' + +ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD + '@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE +engine = create_engine(ENGINE_PATH_WIN_AUTH) diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/db_classes.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/db_classes.py" new file mode 100644 index 0000000..46cf2f5 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/db_classes.py" @@ -0,0 +1,160 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from database_connection import engine +import json + +Base = declarative_base() + +from sqlalchemy.orm import relationship, sessionmaker +# создание таблиц +class Categories(Base): + + __tablename__ = 'dish_categories' + + id = Column(Integer, primary_key=True) + category_name = Column(String(50)) + + styles = relationship('Dishes', backref='dish_categories', lazy=True) + +class Dishes(Base): + + __tablename__ = 'dishes' + + id = Column(Integer, primary_key=True) + dish_name = Column(String(50)) + id_category = Column(Integer, ForeignKey("dish_categories.id")) + text_recipe = Column(String(100)) + video_recept = Column(String(100)) + ingridients = Column(String(800)) + + +class Clients(Base): + + __tablename__ = 'clients' + + id = Column(Integer, primary_key=True) + client_username = Column(String(50)) + +class Marks(Base): + + __tablename__ = 'marks' + + id = Column(Integer, primary_key=True) + mark_value = Column(Integer) + client_id = Column(Integer, ForeignKey("clients.id")) + dish_id = Column(Integer, ForeignKey("dishes.id")) + text_reviw = Column(String(100)) + user_name = Column(String(20)) + + styles = relationship('Clients', backref='marks', lazy=True) + styles_1 = relationship('Dishes', backref='marks', lazy=True) + +Base.metadata.create_all(engine) + +# добавления данных в бд +Session = sessionmaker(bind = engine) +session = Session() +# считывание данных с файла, на другом компьютере прийдеся вставить другой путь к файлам + +categories = open("C:/Pyprojects/venv/categories.json",encoding="utf-8") +data_categories = json.load(categories) +dishes = open("C:/Pyprojects/venv/recipes.json",encoding="utf8") +data_dishes = json.load(dishes) +marks = open("C:/Pyprojects/venv/marks.json",encoding="utf8") +data_marks = json.load(marks) +clients = open("C:/Pyprojects/venv/clients.json",encoding="utf8") +data_clients = json.load(clients) + +# добавление категорий блюд +session.add_all([ + Categories(id = data_categories['categories'][0]['id'], category_name = data_categories['categories'][0]['name']), + Categories(id = data_categories['categories'][1]['id'], category_name = data_categories['categories'][1]['name']), + Categories(id = data_categories['categories'][2]['id'], category_name = data_categories['categories'][2]['name']), + Categories(id = data_categories['categories'][3]['id'], category_name = data_categories['categories'][3]['name'])] +) +session.commit() + +# добавление рецептов и названий блюд +session.add_all([ + Dishes(id = data_dishes['dish'][0]['id'], + dish_name = data_dishes['dish'][0]['name'], + id_category=data_dishes['dish'][0]['id_category'], + text_recipe = data_dishes['dish'][0]['text_recipe'], + video_recept=data_dishes['dish'][0]['video_recipe'], + ingridients=data_dishes['dish'][0]['ingridients']), +Dishes(id = data_dishes['dish'][1]['id'], + dish_name = data_dishes['dish'][1]['name'], + id_category=data_dishes['dish'][1]['id_category'], + text_recipe = data_dishes['dish'][1]['text_recipe'], + video_recept=data_dishes['dish'][1]['video_recipe'], + ingridients=data_dishes['dish'][1]['ingridients']), +Dishes(id = data_dishes['dish'][2]['id'], + dish_name = data_dishes['dish'][2]['name'], + id_category=data_dishes['dish'][2]['id_category'], + text_recipe = data_dishes['dish'][2]['text_recipe'], + video_recept=data_dishes['dish'][2]['video_recipe'], + ingridients=data_dishes['dish'][2]['ingridients']), +Dishes(id = data_dishes['dish'][3]['id'], + dish_name = data_dishes['dish'][3]['name'], + id_category=data_dishes['dish'][3]['id_category'], + text_recipe = data_dishes['dish'][3]['text_recipe'], + video_recept=data_dishes['dish'][3]['video_recipe'], + ingridients=data_dishes['dish'][3]['ingridients']), +Dishes(id = data_dishes['dish'][4]['id'], + dish_name = data_dishes['dish'][4]['name'], + id_category=data_dishes['dish'][4]['id_category'], + text_recipe = data_dishes['dish'][4]['text_recipe'], + video_recept=data_dishes['dish'][4]['video_recipe'], + ingridients=data_dishes['dish'][4]['ingridients']), +Dishes(id = data_dishes['dish'][5]['id'], + dish_name = data_dishes['dish'][5]['name'], + id_category=data_dishes['dish'][5]['id_category'], + text_recipe = data_dishes['dish'][5]['text_recipe'], + video_recept=data_dishes['dish'][5]['video_recipe'], + ingridients=data_dishes['dish'][5]['ingridients']), +Dishes(id = data_dishes['dish'][6]['id'], + dish_name = data_dishes['dish'][6]['name'], + id_category=data_dishes['dish'][6]['id_category'], + text_recipe = data_dishes['dish'][6]['text_recipe'], + video_recept=data_dishes['dish'][6]['video_recipe'], + ingridients=data_dishes['dish'][6]['ingridients']), +Dishes(id = data_dishes['dish'][7]['id'], + dish_name = data_dishes['dish'][7]['name'], + id_category=data_dishes['dish'][7]['id_category'], + text_recipe = data_dishes['dish'][7]['text_recipe'], + video_recept=data_dishes['dish'][7]['video_recipe'], + ingridients=data_dishes['dish'][7]['ingridients']), +Dishes(id = data_dishes['dish'][8]['id'], + dish_name = data_dishes['dish'][8]['name'], + id_category=data_dishes['dish'][8]['id_category'], + text_recipe = data_dishes['dish'][8]['text_recipe'], + video_recept=data_dishes['dish'][8]['video_recipe'], + ingridients=data_dishes['dish'][8]['ingridients']), +] +) +session.commit() + +# Этот код следует запустить уже после первого запуска и поиска блюда в нем, эти данные добавляються искуственно, только для построения графика и добавления комментариев + +# session.add_all([ +# Clients(id = data_clients['clients'][0]['id'], +# client_username = data_clients['clients'][0]['name']), +# Clients(id = data_clients['clients'][1]['id'], +# client_username = data_clients['clients'][1]['name']) +# ] +# ) +# session.commit() +# +# session.add_all([ +# Marks(id = data_marks['marks'][0]['id'], +# mark_value = data_marks['marks'][0]['value'], +# client_id = data_marks['marks'][0]['id_client'], +# dish_id = data_marks['marks'][1]['id_dish'], +# text_reviw = data_marks['marks'][1]['text_reviw'], +# user_name = data_marks['marks'][1]['name'])] +# ) +# session.commit() +# # + +# +# diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/categories.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/categories.json" new file mode 100644 index 0000000..4bb44e5 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/categories.json" @@ -0,0 +1,19 @@ +{"categories":[ + { + "id": "1", + "name": "Первые блюда" +}, +{ + "id": "2", + "name": "Салаты" +}, +{ + "id": "3", + "name": "Основные блюда" +}, +{ + "id": "4", + "name": "Дессерты" +} +] +} \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/clients.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/clients.json" new file mode 100644 index 0000000..b194d4d --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/clients.json" @@ -0,0 +1,11 @@ +{"clients":[ + { + "id": "2", + "name": "dima" +}, +{ + "id": "3", + "name": "olya" +} +] +} \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/marks.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/marks.json" new file mode 100644 index 0000000..d80e7a0 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/marks.json" @@ -0,0 +1,19 @@ +{"marks":[ + { + "id": "2", + "value": "4", + "id_client": "2", + "id_dish": "2", + "text_reviw": "Очень удобный в использовании!", + "name":"dima" +}, +{ + "id": "3", + "value": "2", + "id_client": "3", + "id_dish": "3", + "text_reviw": "Очень классній бот, первый помощник на кухне!", + "name":"olya" +} +] +} \ No newline at end of file diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/recipes.json" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/recipes.json" new file mode 100644 index 0000000..4fe0667 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/json_files/recipes.json" @@ -0,0 +1,95 @@ +{"dish":[ + { + "id": "1", + "name": "БОРЩ", + "id_category":"1", + "text_recipe":"Мясо вымойте, положите в кастрюлю и залейте холодной водой. Дождитесь, пока закипит, и варите ещё 20 минут. После закипания с помощью шумовки снимите лишнюю пену.Свёклу очистите от кожуры, натрите на крупной тёрке и обжарьте на растительном масле. Влейте немного мясного бульона и оставьте тушиться на медленном огне.Мелко нашинкуйте лук и обжарьте на масле до золотистого цвета. Добавьте морковь, влейте ещё немного бульона и тушите в течение 3—5 минут.Очистите картофель, нарежьте кубиками, добавьте к бульону и дайте закипеть.Затем добавьте мелко нашинкованную свежую капусту. Варите до готовности.Посолите и поперчите по вкусу.В конце добавьте тушёную свёклу, зелень и лавровый лист. Накройте кастрюлю крышкой и варите в течение 3—5 минут, после чего снимите с огня.При подаче заправьте борщ сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=_-9nH4zFThs", + "ingridients": "Говядина (на кости)300—400 г,Капуста (свежая)1,5 кг,Картофель3—4 шт.,Морковь1—2 шт.,Лук (репчатый)1 шт.,Свёкла1 шт.,Сметана100 мл,Масло (растительное)2 ст. л.,Лавровый лист2 листа,Вода1,5—2 л,Зелень (укроп или петрушка)по вкусу,Перец (чёрный молотый)по вкусу,Сольпо вкусу')" +}, +{ + "id": "2", + "name": "ОЛИВЬЕ", + "id_category":"2", + "text_recipe":"Картофель и морковь сварить «в мундирах». Сварить яйца. 2. Тем временем колбасу и огурцы нарезать мелкими кубиками. 3. Готовые овощи и яйца почистить и также нарезать кубиками. 4. Мелко нарезать лук. 5. Все ингредиенты смешать, добавить горошек и заправить майонезом. 6. Украсить зеленью.", + "video_recipe":"https://www.youtube.com/watch?v=z8KpTK5oGBQ", + "ingridients": "картофель - 4-5 штук,морковь - 2 крупные или 3 средние ,консервированный горошек – 1 банка ,колбаса «Докторская» - 300-400 г,соленые или маринованные огурцы – 4-5 штук,яйца – 6 штук,лук – 1 штука,зелень,майонез." +}, +{ + "id": "3", + "name": "РИЗОТТО", + "id_category":"3", + "text_recipe":"Разогрейте сливочное масло в казанке на среднем огне. Добавьте грибы и готовьте, помешивая, 5-10 минут (пока грибы не подрумянятся). Добавьте нарезанную курицу, 1 ч. л. соли, перец и готовьте, помешивая, около 10 минут. Переложите грибы с курицей в другую посуду. В кастрюле доведите до кипения бульон.2. В казанке разогрейте растительное масло. Добавьте лук и обжарьте его на умеренном огне, помешивая, в течение 5 минут. Добавьте рис. Готовьте, помешивая, около 2 минут.3. Влейте в казанок с рисом вино, добавьте 1 ч. л. соли. Готовьте, часто помешивая, до тех пор, пока жидкость не впитается. Добавьте пол стакана кипящего бульона и помешивайте, пока не впитается. Рис должен слегка кипеть (уменьшите огонь, если нужно). Продолжайте готовить рис, подливая по пол стакана бульона и перемешивая (всего – около 25-30 минут). Жидкость, которая не впитается, станет вязкой благодаря высокому содержанию крахмала в рисе. Бульон может весь не понадобиться, а может, придется добавить немного бульона или воды дополнительно.4. Вмешайте курицу с грибами, сыр и петрушку. Прогрейте ризотто с курицей и подавайте блюдо. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=5__wUabM0y8", + "ingridients": "Масло сливочное – 2 ст. л,Грибы, тонко нарезанные – 220 г,Куриные грудки, филе, нарезанное кусочками по 1 см – 300 г,Соль – 1 ч. л.,Перец черный молотый – 1 ч. л.,Бульон куриный – 5 стакан,Масло растительное – 1 ст. л.,Лук репчатый, нарезанный – пол стакана,Рис Арборио – 1 стакан,Вино сухое белое – пол стакана,Сыр Пармезан тертый – пол стакана,Зелень петрушки нарезанная – 2 ст. л." +}, +{ + "id": "4", + "name": "ТИРАМИСУ", + "id_category":"4", + "text_recipe":"Отделить белки от желтков. Желтки растереть с сахаром.Добавить маскарпоне.Перемешать.Белки взбить в крепкую пену.Добавить белки в желтково-сырную массу.Аккуратно перемешать.Палочки окунуть в холодный кофе.Палочки надо окунать очень быстрым движением, чтобы они не размокли.Кофе приготовьте так, как вам нравится (я на 350 мл добавила 4 ч.л. кофе).По желанию, в кофе можно добавить вино, ром, ликер, бренди, или коньяк.В форму (я использовала форму размером 17 на 25 см) плотно выложить палочки, смоченные в кофе.На палочки выложить половину крема.Разровнять.На крем снова выложить палочки, смоченные в кофе.На палочки выложить оставшийся крем.Разровнять.Поставить в холодильник на 5–6 часов.Посыпать через сито какао.Разрезать на порции.Разрезать надо очень аккуратно, так как десерт очень нежный.", + "video_recipe":"https://www.youtube.com/watch?v=kSlmBQLa0B8", + "ingridients": "4 яйца (я использовала 18 перепелиных яиц),100 г сахара,500 г маскарпоне,250 г печенья «Савоярди» (примерно 34 штуки),350 мл кофе (растворимого или сваренного),порошок какао,2–3 ст.л. вина «Марсала» (или любого другого), или рома, ликера, бренди, коньяка — по желанию" +}, +{ + "id": "5", + "name": "СОЛЯНКА", + "id_category":"1", + "text_recipe":"1. Налить бульон в емкость МВ (у меня куриный, можно сварить мясо на режиме Суп.Включить мультиварку, установить режим выпечка или экспресс.\n2.Обжарить лук, добавить томат. Перемешать и прожарить все это, еще 5 - 7 минут.\n3.Затем добавить огурцы, порезанные кубиками.\n4.Пока все в мультиварке тушится, готовим мясное ассорти. У меня - мясо отварное, колбаса вареная, колбаса копченая и кусочек копченой курицы. Режем все соломкой или кубиками.Закладываем в чашу мясное ассорти.Заливаем процеженным бульоном. Можно еще влить 1 стакан рассола от огурцов .\n5.Добавить картофель, порезанный мелкими кубиками.Добавить специи по вкусу, лавровый лист, зелень.\n6.Включить режем тушение или суп 1 час.И ждать сигнала)) Аромат на кухне будет неописуемый)).\n7.Подается солянка к столу, со сметаной, маслинами, долькой лимона и мелко нарезанной зеленью.Приятного аппетита!!!.", + "video_recipe":"https://www.youtube.com/watch?v=wXiK9Qoce8A", + "ingridients": "350 г свинины;\n2 луковицы;\n250 г копчёной колбасы;\n250 г ветчинной колбасы;\n4 солёных огурца;\n2 столовые ложки растительного масла;\n2 столовые ложки томатной пасты;\n100 г оливок;\n2 сосиски;\n100–120 мл огуречного рассола;\nсоль — по вкусу;\nзелень, сметана, лимон — для подачи." +}, +{ + "id": "6", + "name": "СВЕКОЛЬНИК", + "id_category":"1", + "text_recipe":"1. Подготовить продукты для приготовления горячего свекольника.\n2.Морковь очистить, вымыть, тонко нашинковать.Свеклу очистить, вымыть, нарезать соломкой.Лук очистить, вымыть, мелко нарезать.Картофель очистить, вымыть, нарезать дольками..\n3.Вскипятить воду (1-1,5 л)\n4.В кипящую воду положить 1 морковь, лук, картофель.Добавить нарезанные со­ломкой полторы свеклы. Накрыть крышкой и варить при слабом кипении.\n5.На сковороде растопить сливочное масло.Оставшиеся 0,5 свеклы, морковь выложить в растопленное масло, перемешать. Спассеровать на сливочном масле, помешивая. Жарить коренья нужно на среднем огне 5-7 минут.\n6.Помидоры ошпарить кипятком, снять шкурку.Помидоры мелко нарезать..\n7.Добавить помидо­ры к кореньям, перемешать, тушить еще 5-7 минут (помидоры должны полностью размягчиться).Высыпать в кастрюлю с кипящими овощами.\n8.Заправить по вкусу солью. Накрыть крышкой, варить еще 5 минут. Затем свекольник выключить.Можно откорректировать вкус, дополнительно заправив свекольник сахаром и лимонной кислотой.Горячий свекольник готов.\n9.При подаче горячий свекольник заправить зеленью и сметаной.", + "video_recipe":"https://www.youtube.com/watch?v=admLVc8ezXw", + "ingridients": "Свекла - 250-350 г (2 шт.)\nМорковь - 150-200 г (1-2 шт.)\nКартофель - 200 г (2 шт.)\nПомидоры - 400 г (4-5 шт.)\nЛук - 70-90 г (1 шт.)\nСоль 1,5 ч. ложки\nСметана - 100-200 г\nЗелень - 0,5 пучка\nЛимонная кислота (по желанию) - щепотку\nСахар (по желанию) - 0,25 ч. ложки" +}, +{ + "id": "7", + "name": "ВИНИГРЕТ", + "id_category":"2", + "text_recipe":"1. Свеклу отварить до готовности.\n2.Картофель и морковь отварить до готовности.\n3.Лук мелко нарезать.\n4.Огурцы нарезать кубиками.\n5.Если капуста сильно соленая, ее промыть.Мелко нашинковать.\n6.Морковь нарезать кубиками.Свеклу нарезать кубиками.Картофель нарезать кубиками.\n7.Смешать картофель, морковь, огурцы, лук, капусту, свеклу.Немного посолить\n8.Заправить растительным маслом.", + "video_recipe":"https://www.youtube.com/watch?v=RZtWdZ8q6RM", + "ingridients": "400 г свеклы\n300 г моркови\n400 г картофеля\n200 г квашеной капусты\n200 г маринованных или соленых огурцов\n150 г лука\nсоль\nрастительное масло" +}, +{ + "id": "8", + "name": "ЦЕЗАРЬ", + "id_category":"2", + "text_recipe":"1.С хлеба срежьте корочку, а сам хлеб порежьте кубиками.\n2. Чеснок пропустите через чесночницу и обжарьте его пару минут в разогретом оливковом масле.\n3. Куриное филе порежьте небольшими кусочками и отправляйте к чесноку на сковороду.\n4. Обжарьте курицу, помешивая, 10 минут, в конце посолите и поперчите по вкусу.\n5. Уберите с огня курицу, а в ту же сковороду добавьте еще немного масла и обжарьте хлеб, постоянно помешивая, пока он не зарумянится.\n6. Приготовьте соус для салата «Цезарь» . Для этого пармезан натрите на мелкой терке. Смешайте яичный желток, оливковое масло, горчицу, лимонный сок, тертый пармезан и хорошенько все взбейте.\n7. Листья салата порвите средними кусками. Помидоры черри порежьте на половинки.\n8. Выложите на салат обжаренное куриное филе, добавьте помидоры, полейте соусом, сверху потрите пармезаном.\n9. Непосредственно перед подачей добавьте в салат «Цезарь» хлебные сухарики. Приятного аппетита!", + "video_recipe":"https://www.youtube.com/watch?v=onq7Sd8c2To", + "ingridients": "300 г курицы (филе)\n100 г пармезана\n100 г белого хлеба, 200 г листьев салата\n100 г помидоров черри\n1 зубок чеснока\n1 ст. ложка оливкового масла\nчерный молотый перец по вкусу\nсоль по вкусу.\nСоус для салата «Цезарь» включает ингредиенты:\n1 яичный желток\n1 ч. ложка горчицы\n2 ст. ложки оливкового масла\n1 ч. ложка лимонного сока\n50 г пармезана\nчерный молотый перец по вкусу\nсоль по вкусу." + +}, +{ + "id": "9", + "name": "ГОЛУБЦЫ", + "id_category":"3", + "text_recipe":"1.Подготовим капустные листья для голубцов, снимим листья с капусты.\n2.Измельчим лук и морковь.\n3.Поджарим овощи на растительном масле до готовности и разделим на две части. Одну часть используем для начинки. Во вторую часть добавим соль (1 ст. л.), сахар (1 ст. л.), молотый перец и томатный соус или кетчуп.\n4.Смешаем сваренный заранее рис, фарш и овощную зажарку. Начинку для голубцов посолим, поперчим и перемешаем.\n5.Закрутим голубцы с мясом и рисом.\n6.Голубцы выложим в кастрюлю и зальем томатной подливой.\n7.Готовим голубцы на небольшом огне примерно 1 час.", + "video_recipe":"https://www.youtube.com/watch?v=Pva-0xZ2Ips", + "ingridients": "Капуста белокочанная - 1 шт.\nРис - 1 стакан\nФарш мясной - 500 г\nМорковь - 1 шт.\nЛук репчатый - 4-5 шт.\nКетчуп или томатный соус - 3 ст.л.\nМасло растительное - для жарки\nПерец молотый (красный и черный)\nСахар\nСоль" + +}, +{ + "id": "11", + "name": "БРАУНИ", + "id_category":"4", + "text_recipe":"1.Включить духовку для предварительного разогрева на 180 градусов. Противень размером 25х35 см застелить фольгой и слегка сбрызнуть растительным маслом.\n2.В большой миске смешать масло, белый, ванильный и коричневый сахар и кофейный напиток. Миксером на средней скорости перемешать до пышного, однородного состояния. Затем по одному добавлять яйца, хорошо перемешивая после каждого.\n3. В большой миске соединить муку, какао-порошок, разрыхлитель, соду и соль. Эту массу постепенно всыпать в масляную смесь, при этом перемешивая миксером на средней скорости. В эту массу добавить шоколад и пекан. Хорошо перемешать и выложить эту массу в подготовленную форму.\n4.Поставить в разогретую духовку и выпекать около 30-35 минут. Перед подачей дать готовому изделию полностью остыть.", + "video_recipe":"https://www.youtube.com/watch?v=MhbZmcGSvcg", + "ingridients": "Масло сливочное (размягченное) - 300 г\nСахар коричневый - 1 3/4 стакана\nСахар белый - 1 стакан\nКофе растворимый - 1/2 стакана\nЯйца - 4 шт.\nВанильный сахар - 1 ст. л.\nМука пшеничная - 1 1/2 стакана\nКакао-порошок - 1 стакан\nРазрыхлитель - 1/2 ч. л.\nСода пищевая - 1/2 ч. л.\nСоль - 1/4 ч. л.\nЧипсы черного шоколада или шоколад, разломанный на кусочки - 1 стакан\nОрех пекан жареный - 1 стакан\nМолочный шоколад (разломанный на кусочки) - 30 г" + +}, +{ + "id": "12", + "name": "ЧИЗКЕЙК", + "id_category":"4", + "text_recipe":"1.Измельчите печенье до состояния крошки. Сливочное масло растопите на водяной бане.Перемешайте печенье с 1 ст. ложкой сахара, добавьте масло, тщательно перемешайте.\n2.Форму для запекания (диаметр моей формы - 22 см) застелите пергаментной бумагой. Из полученной массы сделайте основу для чизкейка в форме для запекания и поместите ее в духовку, разогретую до 170 градусов, на 10 минут.\n3.Пока корж находится в духовке, займитесь приготовлением сырной начинки. Для этого взбейте яйца с 4-мя столовыми ложками сахара, добавьте жирные сливки, ванилин и цедру половины лимона.\n4.В полученную массу добавьте сливочный сыр и снова все хорошо взбейте венчиком до получения однородной консистенции.\n5.Полученную сырную массу (довольно жидкую) вылейте на готовую основу и поместите в духовку. Внимание! Чизкейк должен готовиться в духовке на водяной бане при температуре не более 150 градусов в течение 70-80 минут.\n6.Готовый чизкейк уберите в холодильник на несколько часов, а лучше на ночь. Перед подачей украсьте чизкейк (например, сахарной пудрой и свежей клубникой) и достаньте из формы.", + "video_recipe":"https://www.youtube.com/watch?v=-UVzp2uF5Es", + "ingridients": "Печенье (любое рассыпчатое) - 300 г\nСыр сливочный (рикотта; в идеале - филадельфия) - 500 г\nСливки 35% - 200 г\nЯйца куриные - 4 шт.\nМасло сливочное - 100 г\nСахар - 5 ст. л.\nЛимон (для цедры) - 0,5-1 шт.\nВанилин - 1 пакетик (по вкусу)\nДля украшения (по желанию):\nСахарная пудра\nЯгоды свежие (клубника)" + +} +] +} diff --git "a/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/telegabot.py" "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/telegabot.py" new file mode 100644 index 0000000..54b7010 --- /dev/null +++ "b/\320\234\320\260\320\271\321\201\321\202\321\200\320\265\320\275\320\272\320\276 \320\223\320\260\320\275\320\275\320\260/Workshop5/telegabot.py" @@ -0,0 +1,296 @@ +import telebot +import database_connection +import db_classes +import check_function + +bot = telebot.TeleBot('1240952041:AAGgpZ6C_-Ttga9fFgFKgdFImeV6GLcjd1s') + +from telebot import types + +@bot.message_handler(commands=['start']) + +def handle_text(message): + keyboard1 = telebot.types.ReplyKeyboardMarkup() + keyboard1.row('Поиск рецепта🥮') + keyboard1.row('Правила использования📄') + keyboard1.row('Помощь❓') + + bot.send_message(message.chat.id, + 'Готовить стало ещё проще!\n' + 'Добро пожаловать,' + str(message.from_user.username) + '\nЭтот бот предоставит вам возможность \nне только найти новые рецепты, но\nтакже сохранить их в кулинарную книгу\n Выберите одну из категорий ниже ', + reply_markup=keyboard1) + +# +@bot.message_handler(commands=['help']) + +def handle_text(message): + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок') + +@bot.message_handler(commands=['first_dishes']) +def handle_text(message): + result = check_function.see_all_soups() + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['salads']) +def handle_text(message): + result = check_function.see_all_salads() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['main_dishes']) +def handle_text(message): + result = check_function.see_all_main_dishes() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['desserts']) +def handle_text(message): + result = check_function.see_all_desserts() + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + +@bot.message_handler(commands=['statistic']) +def handle_text(message): + + check_function.graph() + bot.send_message(message.from_user.id,'Cатистика оценок') + +@bot.message_handler(content_types=['text']) +def handle_text(message): + + if message.text == 'Правила использования📄': + bot.send_message(message.from_user.id, + '1. Для начала работы с ботом, необходимо ввести команду /start\n''2.Для поиска рецепта нажмите клавишу "поиск рецепта"\n''3.Выберите категорию, к которой относится блюдо, которое вы хотите найти,ВАЖНО,бот сможет найти блюдо в заданой категории, только, если оно относится к этой категории\n''4.Вы можете просмотреть видео рецепт блюда или просто прочиатть его,подтвердив свой выбор нажатием на соответствующюю клавишу\n''5.После окончания работы с ботом, вы можете поставить ем оценку и оставить комментарий.') + elif message.text == 'Помощь❓': + + bot.send_message(message.from_user.id, + 'Вы используете бот для поиска рецептов\n''Ниже представленны команды, которые существуют в боте:\n''/start - начало работы с ботом\n''/help - основные команды бота\n''/first_dishes - список доступных супов\n''/salads - список доступных салатов\n''/main_dishes - список доступных основніх блюд,\n''/desserts - список доступных дессертов,\n''/statistic - посмотреть статистику оценок') + elif message.text == 'Поиск рецепта🥮': + + keyboard = types.InlineKeyboardMarkup() + key_sup = types.InlineKeyboardButton(text='Первые блюда 🍲', callback_data='soups') + # И добавляем кнопку на экран + keyboard.add(key_sup) + key_main = types.InlineKeyboardButton(text='Основные блюда 🥘', callback_data='main_dishes') + keyboard.add(key_main) + key_salad = types.InlineKeyboardButton(text='Салаты 🥗', callback_data='salads') + keyboard.add(key_salad) + key_sweet = types.InlineKeyboardButton(text='Дессерты 🍰', callback_data='sweets') + keyboard.add(key_sweet) + + bot.send_message(message.from_user.id, "Выбери категорию.", reply_markup=keyboard) + + +@bot.callback_query_handler(func=lambda call: call.data == 'soups') +def callback_worker(call): + + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название супа 🍲') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'main_dishes') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название основного блюда🥘') + bot.register_next_step_handler(sent, video_recipe) + + +@bot.callback_query_handler(func=lambda call: call.data == 'salads') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название салата🥗') + bot.register_next_step_handler(sent, video_recipe) + +@bot.callback_query_handler(func=lambda call: call.data == 'sweets') +def callback_worker(call): + keyboard = types.InlineKeyboardMarkup() + key_text = types.InlineKeyboardButton(text='Посмотреть рецепт в текстовой формe', callback_data='text') + keyboard.add(key_text) + key_video = types.InlineKeyboardButton(text='Посмотреть видео рецепт', callback_data='video') + keyboard.add(key_video) + bot.send_message(call.message.chat.id, "Выберите один из возможных вариатнтов", reply_markup=keyboard) + + + @bot.callback_query_handler(func=lambda call: call.data == 'text') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent,text_recipe) + + @bot.callback_query_handler(func=lambda call: call.data == 'video') + def callback_worker(call): + sent = bot.send_message(call.message.chat.id, 'Введите название дессерта 🍰') + bot.register_next_step_handler(sent, video_recipe) + + +def text_recipe(message): + + add = check_function.check_is_dish_exist((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + else: + result = check_function.result_of_search((message.text).upper()) + list(result) + print(result) + for i in range(len(result)): + bot.send_message(message.from_user.id, result[i]) + + evaluating(message) + + +def video_recipe(message): + add = check_function.get_video_recipe((message.text).upper()) + if bool(add) is False: + result = check_function.if_not_exist_dish() + list(result) + print(result) + bot.send_message(message.from_user.id, result[0]) + for i in range(len(result[1])): + bot.send_message(message.from_user.id, result[1][i]) + + else: + result = check_function.get_exsist_video_recipe((message.text).upper()) + print(result) + bot.send_message(message.from_user.id, result) + print(message) + evaluating(message) +# +# def choos_dish(message): +# check_function.check_dish_category(message.text) + +def evaluating(message): + keyboard3 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='1', callback_data='one') + # И добавляем кнопку на экран + keyboard3.add(key_one) + key_two = types.InlineKeyboardButton(text='2', callback_data='two') + keyboard3.add(key_two) + key_three = types.InlineKeyboardButton(text='3', callback_data='three') + keyboard3.add(key_three) + key_four = types.InlineKeyboardButton(text='4', callback_data='four') + keyboard3.add(key_four) + key_five = types.InlineKeyboardButton(text='5', callback_data='five') + keyboard3.add(key_five) + bot.send_message(message.chat.id, "Оцените,пожалуйста,работу бота", reply_markup=keyboard3) + + @bot.callback_query_handler(func=lambda call: call.data == 'one') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(1, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'two') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(2, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'three') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(3, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'four') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(4, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + @bot.callback_query_handler(func=lambda call: call.data == 'five') + def callback_worker(call): + print(message.text) + check_function.add_user_mark(5, str(message.from_user.username), (message.text).upper()) + continue_working_with_bot(message) + + +def continue_working_with_bot(message): + keyboard4 = types.InlineKeyboardMarkup() + key_one = types.InlineKeyboardButton(text='Оставить комментарий', callback_data='write_comment') + # И добавляем кнопку на экран + keyboard4.add(key_one) + key_two = types.InlineKeyboardButton(text='Посмотреть комментарии пользователей', callback_data='see_comments') + keyboard4.add(key_two) + key_three = types.InlineKeyboardButton(text='Посмотреть статистику оценок', callback_data='see_rating') + keyboard4.add(key_three) + bot.send_message(message.chat.id, "Продолжите работу с ботом", reply_markup=keyboard4) + + @bot.callback_query_handler(func=lambda call: call.data == 'write_comment') + def callback_worker(call): + print(message.text) + sent = bot.send_message(call.message.chat.id, 'Введите свой комментарий') + bot.register_next_step_handler(sent,comments) + + + + @bot.callback_query_handler(func=lambda call: call.data == 'see_comments') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Отзывы другх пользователей') + result = check_function.see_users_comments() + print(result) + for i in range(len(result)): + bot.send_message(message.chat.id, str((list(result[i]))[0])+': '+str((list(result[i]))[1])) + + @bot.callback_query_handler(func=lambda call: call.data == 'see_rating') + def callback_worker(call): + bot.send_message(call.message.chat.id, 'Статистика оценок') + result = check_function.graph() + print(result) + bot.send_message(message.chat.id,result) + + def comments(message): + check_function.add_comments(message.text, str(message.from_user.username)) + print(message.text) + bot.send_message(message.chat.id,'Спасибо, ваш комментарий был успешно добавлен!') + +bot.polling() \ No newline at end of file