Personal DB - dvirby20/BotIt GitHub Wiki
ืืฃ ืื ืืคืจื ืืขืืืง ืืืฆื ื ืืชื ืืฉืืืจ ืืืงืื ืืืืข ืื-DB ืืืืฉื ืฉื ืืคืืฆ'ืจ ืฉืืื (ืืืืจื: ืืืื = DB)
[[TOC]]
ืืชื ืฆืจืืืื ืืงืื ืฉื ืืฉืชืืฉ ืืกืืกืื ืืฆืืืช ืืืื. ืืืืจ ืืื
ืืืืจืช ืืืชืืืจืืช ืDB ืฆืจืืื ืืืืขืฉืืช ืืจื ืฉืงืืืฅ credentials.yaml. ืืื ืฆืจืื ืืืืจืืืช ืื:

ืืืืื ืืกืืื ืื ืืฉืืืช ืฉืืชื ืฆืจืืืื ืืฉื ืืช ืืคื ืืคืจืืื ืฉืชืงืืื ืืืฆืืืช.
ื-DB ืืืืฉื ืฉืืื ืฆืจืื ืืืืืช ืืขื ืืื ื ืืกืืืื ืฉืืชื ืชืืืืจื ืืืชื.
ื ื ืื ืฉื ืจืฆื ืืืฆืืจ DB ืฉืฉืืืจ ืืืื ืืืช ืฉื ืื ืืืื. ืืฉืืืช ืฉืื ืื: ืืกืคืจ ืจืื, ืฆืืข ืืจืื, ืืืฉืชืืฉ ืฉืืื ืืืขืืืชื ืืฉื ืช ืืืฆืืจ. ืืฉืืื ืืขืฉืืช ืืช ืื ืชืืื ืกื ืืืฃ DBModels ืฉืืชืื ืืชืืงืืื ืฉื ืืคืืฆ'ืจ ืฉืืื (ืจืื ืขืืื "Feature Structure" ืืืืืงื), ืืืชืื ืืช ืืงืื ืืื:
in TalpiBot/Features/my_feature_name/DBModels/car_model.py
from mongoengine import *
class Car(Document):
meta = {'db_alias': 'cars_feature'}
license_number: str = StringField(max_length=100, required=True)
color: str = StringField(max_length=100, required=True)
owner: str = StringField(max_length=100, requred=True)
year: int = LongField()ืืฉืืจื ืืจืืฉืื ื ืืืืืงื ืฉื ืืืืื ืืื ืืืืื ืืืืื ืืืืจืืช ืฉื ืืืืื. ืฉื ืDB ืฉืืื ืืืืืจ ืinit.py ืฉื ืืคืืฆืจ ืืื ืฉื ืืชืืงืืื DBModels! . ืืืฉื, ืื ืืืื ืinit.py ืฉื ืคืืฆ'ืจ ืงืืืฆืืช ืฉืืฉืชืืฉ ืืืืื Car ืฉืืืืจื ื:
in TalpiBot/Features/my_feature_name/init.py
def get_settings():
return FeatureSettings(
display_name = "cars",
_type = FeatureType.REGULAR_FEATURE,
db_name = "your_db_name"
)ืืืืจ ืืื, ืื ืฉืืจื ืืืืฆืืช ืฉืื ืฉื ืืืืืืงืืื ืืืกืื ืืื. ืืฉืื - ืืขืช ืืฉืืื ืืืฉืช ืืืืื ืฉืืื ืืชื ืฆืจืืืื ืืขืฉืืช ืื import.
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
from car_model import Carืืขืช ืื ืฉืืจ ืืงืื ื ืจืฉื ืืืจ"ื ืืชืืงืืืช Logic ืื ืืชืืงืืื UI.
ืืขืช ืืืจื ืฉืืฆืจื ื ืืช ืืืืื ืขืฆืื ืืืฉืืืช ืฉืื ืื ื ืจืืฆืื ืฉืืืื ืื, ืื ืื ื ืจืืฆืื ืืืฆืืจ ืืืืืืงืืื ื ืืชื ืืขืฉืืช ืืช ืื ืขื ืืื ืฉืืืืฉ ืืฉื ืืืืืงื ืฉื ืืืืืื ืืืงืืื (ืืขืฆื ืื ืื ื ืืืฆืจืื ืืืืืืงื ืืืฉ ืคืืืชืื ืืืกืื ืฉื ืืืืื) ืืื ืฉืืืจื ืฉืืื ืขื ืืื save.
ืืืฉื, ืงืืข ืืงืื ืืื ืืืฆืืจ ืืืื ืืช ืืืฉื ืืืฉืืืจ ืืืชื ืDB:
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
new_car = Car(license_number='439018901', color='white', owner='ืืจืื ืืืคื', year=2019)
new_car.save()ืืืจื ืฉืืฆืจื ื ืืืืืงืืื ื ืจืฆื ืืืฉืช ืืืืื. ืืฉืืื ืืขืฉืืช ืืช ืื ื ืฉืชืืฉ ืืืฉืชื ื objects ืฉืืืืืืืืช ืงืืื ืืื ืืืื, ืฉืืืืืจ ืืช ืื ืืืืืืืงืืื ืฉื ืืฆืืื ืืืืื ืืกืืืื.
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
Car.objectsืชืืืืจ ืื ื ืืขืจื ืฉื ืื ืืืืืืืงืืื.
ืืขืช ื ื ืื ืฉืื ืื ื ืจืืฆืื ืืช ืื ืืืืืืงืืื ืฉืขืจืื ืืฉืื ืืกืืื ืืื ืกืคืฆืืคื, ืืืืืื ืื ืืืืื ืืืช ื2019. ืื ื ืฉืชืืฉ ืขืืืื ืobhects ืืื ืืคืขื ืืชืืจ ืคืื ืงืฆืื ืืขื ืืคืจืืืจืื ืฉืื ืื ื ืจืืฆืื:
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
Car.objects(year=2019)ืงืืข ืืงืื ืืื ืืืืืจ ืืืื ืืืช ื2019.
ืืื ื ืจืฆื ืืืืืื ืืืฆืื ืืช ืืฆืืข ืฉื ืืืช ืืืืืื ืืืช ื2019, ื ืฉืชืืฉ ืืงืื ืืื:
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
color = Car.objects(year=2019)[0].colorืฉืืื ืื ืืืืืจื ืฉื ืืืืืจ ืืจืืฉืื ืขื ืืื [0]- ืืคืงืืื objects() ืืืืืจื ืจืฉืืื ืฉื ืืืืืืงืืื, ืื ืื ืืฉ ืจืง ืืืืืืงื ืืื ืืขืื ื ืขื ืืชื ืืื (ืืืฆืืจื ืืขื ืืื ืื ืื ืืื ืืืืืืงืืื ืืขืื ืื ืขื ืืชื ืืื, ืืืงืจื ืื ืชืืืืจ ืจืฉืืื ืจืืงื).
ื ืืชื ืื ืืืฆืืจ ืชื ืืื ืืกืืืืื ืืืชืจ, ืื ืืืชืจ ืงื ืคืฉืื ืืกื ื ืืช ืืืืืืืงืืื ืืื ืืช ืืงืื.
ืื ืืื ืืืช ืืชื ืืขืืืคืื ืืขืฉืืช ืืืช , ื ืืชื ืืืฆืื ืืืืข ื ืืกืฃ ืืื.
ื ืืชื ืืขืจืื ืืช ืืืืืข ืฉื ืืืืืืงืืื ืฉืืืจ ืงืืืืื ืDB ืืืืคื ืืื:
ืืฉืืืฃ ืืช ืืืืืืืงื ืืืืืื, ืืขืจืื ืืช ืืืืืข ืขื ืืืืืืืงื ืขืฆืื, ืืื ืืฉืืืจ ืืช ืืฉืื ืืืื ืขื ืืื ืงืจืืื ืืคืื ืงืฆืืืช save.
ืืืืืื ืงืืข ืืงืื ืืื ืืฆืื ืืืฆื ื ืืชื ืืฉื ืืช ืืช ืืฆืืข ืฉื ืืืื ืืช ืขื ืืกืคืจ ืจืืฉืื ืืืฉืื. ืฉืืื ืื ืฉืื ืื ื ืขืืืืื ืขื ืืืืืืืงืืื ืขืฆืื ืืื ืขื ืืขืจืืื ืืืื [0].
in TalpiBot/Features/my_feature_name/Logic/feature_logic.py
from car_model import Car
car= Car.objects(license_number='439018901')[0]
car.color = 'red'
car.save()ืืฉืืจื ืืจืืฉืื ื (ืืืจื ืimport) ืืืฆืืช ืืช ืืืืืืืงื ืืืชืืจ ืืช ืืืืื ืืช. ืืฉืืจื ืืฉื ืืื ืืขืืื ืช ืืช ืืฆืืข ืฉื ืืืืื ืืช, ืืื ืขืืืื ืื ืืขืืื ืช ืืช ืืืืืข ืDB. ืืฉืืจื ืืืืจืื ื ืฉืืืจืช ืืช ืืืืืข ืืืืฉ ืDB.
ื ืืชื ืืืืืง ืืืืืืงืืื ืขื ืืื ืืคืื ืงืฆืื delete(). ืืืฉื, ืงืืข ืืงืื ืืื ืืืืง ืืืื ืืช ืขื ืืกืคืจ ืจืืฉืื ืืืฉืื:
Car.objects(license_number='439018901')[0].delete()ืงืื ืื ืืื ืืืืื ืืคืืฆ'ืจ ืฉืืงืื ืืืืฉืชืืฉ ืืกืคืจ ืจืื, ืืืืง ืืื ืืจืื ืฉืืื ืืืฉืชืืฉ, ืืื ืื ืืื ืืฉื ื ืืช ืืฆืืข ืฉืื ืืืืืจืช ืืืฉืชืืฉ.
in TalpiBot/Features/my_feature_name/UI/feature_main.py
from typing import List
from BotAPI.Feature.bot_feature import BotFeature
from BotAPI.View.view import View
from BotAPI.session import Session
from BotAPI.ui.ui import UI, Button
from TalpiotAPIs.User.user import User
from TalpiotAPIs.User.user import Gender
class CarColorChanger(BotFeature):
# init the class and call to super init - The same for every feature
def __init__(self, ui: UI):
super().__init__(ui)
# This is the first function that run when user press to to start the feature
def main(self, session: Session):
self.ui.create_text_view(session, "ืืืื ืืืื ืืช ืืขืจืื?").draw()
self.ui.get_text(session, self.get_car_number)
def get_car_number(self, session: Session, number: str):
# Get car with the correct number from DB
car = Car.objects(license_number=number)[0]
if session.user.name != car.owner:
self.ui.create_text_view(session, "ืืชื ืื ืืืขืืื, ื ืกื ืฉื ืืช").draw()
self.main(session)
self.ui.create_text_view(session, "ืืื ืืฉื ืืช ืืช ืืฆืืข?").draw()
# Get the new color, and pass both the color and the car object itself to the final method
self.ui.get_text(session, lambda s,new_color: self.edit_and_end(s, new_color, car))
def edit_and_end(self, session: Session, new_color: str, car: Car):
car.color= new_color
car.save()
self.ui.create_text_view(session, "ืฆืืข ืืืืื ืืช ืฉืื ื").draw()
self.ui.summarize_and_close(session, [])
def get_command(self) -> str:
"""
:return: The string tha invoke this feature
"""
return "cars"
def get_summarize_views(self, session: Session) -> [View]:
return []
def is_authorized(self, user: User) -> bool:
return "ืืชืื" in user.role