How To Build A Chat Bot That Learns From The User In Python Tutorial

Поділитися
Вставка
  • Опубліковано 24 січ 2025

КОМЕНТАРІ • 246

  • @mdshahed9031
    @mdshahed9031 11 місяців тому +55

    I am glad that I found this tutorial. I am a 2nd semester student in computer science where I am learning python. While I was searching for something new that I can learn in advance of my class, I found this masterpiece that opened my mind and the way of thinking. I really appreciate your effort and I am gonna suggest my friends to follow this.

    • @sgjnn32134
      @sgjnn32134 9 місяців тому +1

      From what university? same here am a second semester CS student

  • @ilriveril
    @ilriveril Рік тому +60

    So for my bonus homework problem, I changed it to asynchronous to work with a discord bot. I added the ability to have multiple answers in a list and to pick a random answer. I also added an add command that will prompt the user to add a question and answer manually. If the answer is not found, it will create a new entry in the knowledge base. If the answer is found, it will change the string answer to a list and add it, or add to a list if there is one. Thank you so much for this! I just started learning programming a few months ago and the way you explained it helped me out a lot.

    • @raduoos
      @raduoos Рік тому +5

      can you show us how?

    • @carsonhighfill364
      @carsonhighfill364 Рік тому

      ive had a hard time getting the import random to work as you wouold want for multiple responses on the answers. but ive only been working on this for 1 hour. probably will get it solved soon

    • @angelojiwoo
      @angelojiwoo Рік тому

      @@carsonhighfill364 Have you figured it out?

    • @ghanshamsharma8973
      @ghanshamsharma8973 Рік тому +1

      type: - and then the > : -> rest is his prettier format

  • @romualdurbanski6111
    @romualdurbanski6111 Рік тому +65

    Please give us the link for GitHub repository for this code example. You miss this.

    • @oceanofanythingshorts
      @oceanofanythingshorts 9 місяців тому

      import json
      from difflib import get_close_matches
      import os
      # create database folder if it doesn't exist
      if not os.path.exists("database"):
      os.makedirs("database")
      def loadKnowledgeBase(filepath: str) -> dict: # Load the knowledge base from a file
      with open(filepath, 'r') as file:
      data: dict = json.load(file)
      return data
      def saveKnowledgeBase(filepath: str, data: dict) -> None: # Save the knowledge base to a file
      with open(filepath, 'w') as file:
      json.dump(data, file, indent=2)
      def findBestMatch(userQuestion: str, questions: list[str]) -> str | None: # Find the best match for the user question
      bestMatch: list = get_close_matches(userQuestion, questions, n=1, cutoff=0.6)
      return bestMatch[0] if bestMatch else None
      def getAnswerForQuestion(question: str, knowledgeBase: dict) -> str | None: # Get the answer for the question
      for q in knowledgeBase["questions"]:
      if q["question"] == question:
      return q["answer"]
      def chat(): # Chat with the bot
      knowledgeBase: dict = loadKnowledgeBase("database\\knowledge_base_0.json")
      while True:
      userInput = input("You: ")
      if userInput == "exit":
      break

      bestMatch: str | None = findBestMatch(userInput, [q["question"] for q in knowledgeBase["questions"]])

      if bestMatch:
      answer: str | None = getAnswerForQuestion(bestMatch, knowledgeBase)
      print(f"Bot: {answer}")

      else:
      print("Bot: I'm sorry, I don't know the answer to that question, can you provide me with the answer?")
      userAnswer: str = input("You: ")
      knowledgeBase["questions"].append({"question": userInput, "answer": userAnswer})
      saveKnowledgeBase("database\\knowledge_base_0.json", knowledgeBase)
      print("Bot: Thank you for the information, I will remember it for next time.")
      if __name__ == "__main__":
      chat()

    • @sagarbhat7317
      @sagarbhat7317 8 місяців тому +1

      Hiya! I wanted to play around, did you find it?

    • @thetutorialdoctor
      @thetutorialdoctor 8 місяців тому

      I created a repo for this, but my comment never posted.

  • @philipokposo6265
    @philipokposo6265 Рік тому +2

    Thank you very much @Indently for such a great video. My program is up, running and learning very fast.

  • @frank-d9v
    @frank-d9v 10 місяців тому +3

    Couldnt find my mistakes, nor a github code lol. So, I went to chatgpt and asked if it could help and it caught a spelling error and I forgot a 'f' statement. Otherwise this was a great code and you were very kind to share it, ty.

  • @average_war_criminal
    @average_war_criminal 6 місяців тому +1

    Thanks a lot mate this tutorial gave me a wonderful insight on how Artificial Intelligence and chat bots are structured, Cheers!

  • @abuzargore3762
    @abuzargore3762 Рік тому +52

    there's no github link???

    • @battleaxe990
      @battleaxe990 Рік тому +18

      Nah but if you wanna put in the effort you can pause here and there and copy down what he did. That's what I did

    • @angelfvrggedits
      @angelfvrggedits 11 місяців тому +1

      Same

    • @haydenedmunds6004
      @haydenedmunds6004 11 місяців тому +1

      Yeah where's the link

    • @luascripts787
      @luascripts787 11 місяців тому +1

      I don't want copy I just 2an understand it by seeing live code

    • @patahgaming
      @patahgaming 11 місяців тому

      ​@@battleaxe990fedric said there's a repo in description but there's no repo

  • @moinuddinshaikh5801
    @moinuddinshaikh5801 8 місяців тому +15

    .json file:
    {
    "questions":[
    ]
    }
    .py file:
    import json
    from difflib import get_close_matches
    def load_knowledge_base(file_path:str) -> dict:
    with open(file_path,'r') as file:
    data:dict=json.load(file)
    return data
    def save_knowledge_base(file_path:str,data:dict):
    with open(file_path,'w') as file:
    json.dump(data,file,indent=2)
    def find_best_match(user_question:str,questions:list[str]) -> str|None:
    matches:list=get_close_matches(user_question,questions,n=1,cutoff=0.6)
    return matches[0] if matches else None
    def get_answer_for_question(question:str,knowledge_base:dict) -> str|None:
    for q in knowledge_base["questions"]:
    if q["question"]==question:
    return q["answer"]

    def chatbot():
    knowledge_base:dict=load_knowledge_base('knowledge_base.json')
    while True:
    user_input:str=input('You: ')
    if user_input.lower()=='quit':
    break
    best_match:str|None=find_best_match(user_input,[q['question'] for q in knowledge_base['questions']])
    if best_match:
    answer:str=get_answer_for_question(best_match,knowledge_base)
    print(f"Bot: {answer}")
    else:
    print("Bot: I don't know the answer.can you teach me?")
    new_answer:str=input("Type the answer or 'skip' to skip: ")
    if new_answer.lower()!='skip':
    knowledge_base["questions"].append({"question":user_input,"answer":new_answer})
    save_knowledge_base('knowledge_base.json',knowledge_base)
    print("Bot: Thankyou! I learnt a new response!")
    if __name__=="__main__":
    chatbot()

  • @ChannelYourDenovations
    @ChannelYourDenovations Рік тому +13

    So, essentially I can make my own tutor. Ducking awesome. I'm gonna teach Marvin so Marvin can teach me.

  • @KeiraraVT
    @KeiraraVT Рік тому +12

    I like this! Now I can start training some custom chatbots :D

    • @knkn5049
      @knkn5049 11 місяців тому +1

      Tell about your progress, have you moved to conversational pipelines or was able to pull out of here something?

  • @noblethebest9939
    @noblethebest9939 10 місяців тому +4

    Hello! I couldn't find the repository link for the platform. Can you please provide the link?
    Thank you!

  • @hannibalbianchi1466
    @hannibalbianchi1466 11 місяців тому +2

    Thanks
    Clear explanation and very useful

  • @pallenda
    @pallenda Рік тому +4

    ohhh cool! I didn't know about difflib.get_close_matches in default python. Thanks for the inspiration to study it! :)

  • @C_Plus_Py
    @C_Plus_Py 5 місяців тому +17

    I'm sorry to say this, but this is a sorry excuse for a chat bot, this is no better than writing code to tell it what to say, it never learns. And always returns your answer, there's nothinh to do with this except teach and even then it's a boring experience at that

    • @Indently
      @Indently  5 місяців тому +4

      Thank you for sharing your view

    • @C_Plus_Py
      @C_Plus_Py 5 місяців тому +3

      @Indently You are very welcome

    • @nandhaxd
      @nandhaxd 4 місяці тому +3

      No I just learned something new

    • @C_Plus_Py
      @C_Plus_Py 4 місяці тому +1

      @nandhaxd Yes i understand that, you understood how to take input, use indexs or lists, dictionary perhaps. But you certainly did not learn how to make a chat bot, not one that is actually chattable anyways you made a dictionary

  • @oceanofanythingshorts
    @oceanofanythingshorts 9 місяців тому

    Really good job man, i implemented this on my ai application, which is now self-training. Thanks for such a beautiful demonstration. really appreciate that

    • @chy2114
      @chy2114 7 місяців тому +1

      how did you start building your model/ what do you recommend i start with?

    • @oceanofanythingshorts
      @oceanofanythingshorts 7 місяців тому

      ​@@chy2114 you can start with mistral

  • @lessthanpinochet
    @lessthanpinochet Рік тому +7

    Unless I missed something, I never saw you define file_path. How would your script know where to find the json file without defining it first?

    • @thomasgalarneau2928
      @thomasgalarneau2928 Рік тому

      I messed around with different file paths and had zero success. But im very new so who knows.

    • @_cyan735
      @_cyan735 Рік тому +2

      knowledge_base: dict = load_knowledge_base("knowledge_base.json") just tells the programm that it should load the database from the directory the main file is in, but you can replace "knowledge_base.json" with any filepath you want

    • @lokeshjonakuti437
      @lokeshjonakuti437 Рік тому

      The json file is created in the same folder as the main app. when we create any file in the same folder or directory, you dont have to give the path, it will automatically read it.

  • @kachrooabhishek
    @kachrooabhishek Рік тому +12

    where is github link for the same ?

  • @peektv6570
    @peektv6570 Рік тому +3

    Hi there , is it possible to integrate openAI with this code?

  • @Explore4code
    @Explore4code 10 місяців тому

    Amazing tutorial to learn and enjoy to teach own chatbot 🤩🤩

  • @wobblycentaur
    @wobblycentaur Рік тому +11

    you mentioned including a link to the code i am unable to find the link, might you say what it is? thank you ! :)

  • @josephang3665
    @josephang3665 Рік тому +9

    hey there, can I get your code source pls, just simply because I can't find it in the description. However, can I use other languages to train this AI?

    • @JasperPloum
      @JasperPloum 6 місяців тому +1

      Yes but if it doesn’t know the language it will still say it in English

  • @spencerfunk6697
    @spencerfunk6697 11 місяців тому +1

    love this im learning computer science and ai/ml and this is perfect

    • @irludure
      @irludure 9 місяців тому

      this isnt really ai, its just fetching from a json file

  • @YadavJii-pt2sx
    @YadavJii-pt2sx 11 місяців тому

    Excellent and versatile project!!! Thank you so much sir 💯

  • @cherry6280
    @cherry6280 10 місяців тому

    You made it very easy to learn, Thank you so much❤❤❤❤❤❤ Masterpiece

  • @gimmernglow7217
    @gimmernglow7217 9 місяців тому +1

    How can we train it on large dataset?

  • @wazz6003
    @wazz6003 Рік тому +40

    Chat Bot part 2: How to connect your bot to an ChatBot API :P

  • @RKAAchannel1
    @RKAAchannel1 11 місяців тому

    Thanks for this video.. I am able to make my first bot.

  • @nancyjhaonepiece
    @nancyjhaonepiece Рік тому +3

    U r a life saver for me.....🔥

  • @susguy446
    @susguy446 Рік тому +4

    There is no github link in the description

  • @buddyshub9824
    @buddyshub9824 9 місяців тому +1

    Is this how ai chat bots are made or are there more techniques?

  • @Adster5-Viewer
    @Adster5-Viewer 6 місяців тому +1

    Hey, thank you for the informative video! I cannot find the link to the github so I wrote the code as you had shown. However, when I am running it, the terminal says no such file in directory (with regards to the knowledge_base.json) - "File Not Found". Is there something I am missing, as I had done everything exactly as you had shown.
    I was wondering if it could be the second last line wherein you state if name__ == main... as I do not have a function for that in my VS, so I just typed it from scratch. But it does not select and run the main like yours does, is there an extention I need to download to set the name == main function in VS, thank you!

    • @JasperPloum
      @JasperPloum 6 місяців тому

      Yeah because in the terminal you can’t run the file inside of the folder if you want to fix that you need to use the absolute path instead of knowledge_base.json

  • @aviraljain7020
    @aviraljain7020 Рік тому +9

    sir where is the link for github??

  • @mohammedmudassir123
    @mohammedmudassir123 Рік тому +3

    I can't find the github link

  • @costa9083
    @costa9083 Рік тому +2

    no link in the infobox ??

  • @arhitro6391
    @arhitro6391 10 місяців тому +1

    What libraries did he use? ChatterBot? NLTK?

    • @Indently
      @Indently  10 місяців тому +1

      If you watch any % of the video you will find out

  • @nelsonvaldivia1430
    @nelsonvaldivia1430 Рік тому +4

    Hi is the source code avaliable?

  • @prajwalkr5777
    @prajwalkr5777 Рік тому

    Thank you it helped us a lot❤❤

  • @Mohammed-Alsahli
    @Mohammed-Alsahli Рік тому +14

    Can you please create a video about how to use gui and convert the terminal script into an actual app?

    • @RageMastaX
      @RageMastaX Рік тому +1

      Yes please 🥺

    • @samiranmanna3951
      @samiranmanna3951 Рік тому +4

      Learn the kivy framework. You'll be able to make an actual Android app & build a GUI for it

    • @carsonhighfill364
      @carsonhighfill364 Рік тому

      you make the back end like this to run form python. 3.11. then you make a gui using PySimpleGUI.. boom
      Script kiddy

  • @ndunwani
    @ndunwani 9 місяців тому

    Thanks so much, this video really helped a lot for my project. Out of curiosity, what text-editor are you using?

  • @ananthkrish4643
    @ananthkrish4643 Рік тому +1

    Can we add database to it or important Wikipedia like module to get answers for random questions??

  • @Creationish
    @Creationish 7 місяців тому

    Great video

  • @nobafan7515
    @nobafan7515 Рік тому +1

    Is ther a way to impliment cause-effect logic to this?

  • @croatiaofrandom
    @croatiaofrandom 9 місяців тому

    Is there a way to make it on one question pick randomly from few correct answers

  • @wshawnways459
    @wshawnways459 Рік тому +1

    can anyone please tell me where the github link is i cant find it anywhere

  • @dastfa8402
    @dastfa8402 Рік тому

    Hi, may I know how you type =/= non-equal sign in Visual/python or it is a package i have to download in Visual Studio?

  • @knkn5049
    @knkn5049 11 місяців тому +1

    I dont understand what if i rearranged words in my question, or asked similar thing about other thing?
    I want "conversation", not scripted dialoge...

  • @JonathanSandberg-rm9kf
    @JonathanSandberg-rm9kf Рік тому +14

    Hello! I'm wondering how you did this symbol → valid because when i try to copy paste it i'm present with an error. I'm using PyCharm as my IDE and this symbol get's in the way because it throws an error. Very very nice guide though, will be perfect for my learning project. Would appreciate if i can get some clarity regarding this. Thank you in advance!

    • @Harsh-gh7rx
      @Harsh-gh7rx Рік тому +2

      i belive its not the symble but lilke -->

    • @the_phoenix78
      @the_phoenix78 Рік тому +1

      It doesn’t work for python 3.9 or less

    • @engineeringsuite2243
      @engineeringsuite2243 Рік тому

      @@the_phoenix78 in spyder i just write -> it worked.

    • @DanDepan-g1m
      @DanDepan-g1m Рік тому +1

      It is the symbol "->".

    • @AronAyub
      @AronAyub Рік тому +1

      Hi, it's "->" symbol which is indicating a return type of the defined function.

  • @Priyadharshini-yt1us
    @Priyadharshini-yt1us Рік тому +1

    Superb🎉

  • @jeongminyoun5388
    @jeongminyoun5388 10 місяців тому

    It says that the indentation is not matching what is wrong? Using VScode

  • @thebeastcracker3525
    @thebeastcracker3525 6 місяців тому +1

    How to give it sources to automatically learn about this world?

  • @hirafuyucoding
    @hirafuyucoding 8 місяців тому

    Thankyou! ❤❤😊

  • @shadowlionbg
    @shadowlionbg 8 місяців тому

    Is there a way to make this code to work with html. Like make it to work on a website

  • @i_fighter29
    @i_fighter29 Рік тому

    for some reason the save command isn't defined for me is there any reason why

  • @artistpw
    @artistpw 8 місяців тому

    I'm trying this in visual studio on python 3.12 and getting some errors on the "import long_responses". Just thought I'd mention this.

  • @obaidhashmi3965
    @obaidhashmi3965 Рік тому +1

    where's the github repository link, can't find it

  • @VSJey-q3j
    @VSJey-q3j 3 місяці тому

    i got a problem in load json file what to do?

  • @J0nas.nsn7
    @J0nas.nsn7 Рік тому +1

    I can´t find the Github link.

  • @jasonarendse9075
    @jasonarendse9075 Рік тому

    in vs code it doesnt skip a tab and also doesnt show the pre suggested code that you type anyway. did i miss something or is that normal?

    • @Ryoma263
      @Ryoma263 11 місяців тому

      its normal i use vs code i consider pycharm for the weak of mind

  • @Jk-ls7ey
    @Jk-ls7ey Рік тому +1

    Which python framework is used here?

  • @golinithin8184
    @golinithin8184 10 місяців тому

    Can we use this code as a backend of a chatbot?

  • @JudstarYT
    @JudstarYT 7 місяців тому

    Nice tutorial, but I'm getting an error. In the function "Find Best Match", I typed "user_question: str, questions: list[str]", but an error is generated saying "Subscript for class "list" will generate runtime exception; enclose type annotation in quotes". I'm currently on Python 3.8.9 64-bit. I am new to this, so maybe I am missing something?

  • @TheEinzzCookie
    @TheEinzzCookie Рік тому +2

    Is it possible to manage that the bot searches with beautifulscrape after Answers in the web and learns like that?

    • @TheEinzzCookie
      @TheEinzzCookie Рік тому +1

      or make the bot selflearning???

    • @glassesgaming5831
      @glassesgaming5831 Рік тому +1

      you mean for all questions including greetings or just for general info questions?

    • @TheEinzzCookie
      @TheEinzzCookie Рік тому +1

      @@glassesgaming5831 for all

  • @mohsenghafari7652
    @mohsenghafari7652 10 місяців тому

    hi. please help me. how to create custom model from many pdfs in Persian language? tank you.

  • @notstating241
    @notstating241 Рік тому

    Can something similar be done using vanilla js?

  • @Oneshot_Gaming16
    @Oneshot_Gaming16 Рік тому +1

    I get an error saying, no such file or directory. Pls help

  • @AfrinFoodVlog669
    @AfrinFoodVlog669 Рік тому

    Btw can i train this ai with toons of data?

  • @TheHiddenReaveld
    @TheHiddenReaveld 10 місяців тому

    My code has no errors, except I only get "Process finished with exit code 0" after running it. If possible, can you please assist on how to fix this. Thank you!

  • @muskankhan9313
    @muskankhan9313 8 місяців тому

    Code is working awesome❤ I have run it

    • @VibeVoyage001
      @VibeVoyage001 8 місяців тому

      can you provide me with it's github link? or can you just share the written code with me.
      would be a great help

  • @manoeddowork
    @manoeddowork 5 місяців тому

    Can it use other languages?

  • @S.H.P.
    @S.H.P. Рік тому

    Wouldnt this glitch kinda bcs ;lets say I wrote "Whats the capital of Italy" and in another chat I wrote "Whats a dish from Italy" wouldnt it say a dish name?

  • @GENOZGAMINGOFFICAL
    @GENOZGAMINGOFFICAL 3 місяці тому +1

    i am a 9 yr old and this help me a lot

  • @maxfedorets7864
    @maxfedorets7864 Рік тому

    Is there a way you can connect it to ChatGPT so it can do that for you?

  • @Whoelse_Ghost
    @Whoelse_Ghost Рік тому +1

    It is not working

  • @-Fidelis-
    @-Fidelis- Рік тому +1

    Didn't work for me

  • @How2Python.22
    @How2Python.22 5 місяців тому

    Thank you so much for making this video! I have learned so much and I am having so much fun with it!

  • @w0ngky
    @w0ngky Рік тому

    Will this work on Jupiter Notebook?

  • @hishamhakeem7999
    @hishamhakeem7999 Рік тому

    It is showing error in line 5(with open ) how can we reslove it

    • @anarcharatic5565
      @anarcharatic5565 Рік тому

      Did you do the with open in a function? If so, you have to pass the name as a parameter (assuming you used a variable name instead of the file name directly in the with open)

  • @11305205219
    @11305205219 5 місяців тому

    OK I got to learn this project

  • @balogunazeez3458
    @balogunazeez3458 Рік тому

    Thank you Federico

  • @dachuandu6539
    @dachuandu6539 Рік тому

    how did you type out the not equal sign?

    • @ilovereading21
      @ilovereading21 9 місяців тому

      It's != on IDE's that aren't PyCharm

  • @troysmastertoys953
    @troysmastertoys953 Рік тому

    It says 'r' is not a designated file location?

    • @anarcharatic5565
      @anarcharatic5565 Рік тому

      You have to specify the file location first, then put a comma, then put 'r' or something else depending on what you want to with the file

  • @rogerjrperez2872
    @rogerjrperez2872 Рік тому

    Wait where did you get the chat_bot() ???? In not see anything that you create a class

    • @WafflesssFalling
      @WafflesssFalling 7 місяців тому

      The chatbot is the code he typed - if you type everything he did in the video, you will have made the chatbot

  • @vasundharasahu1348
    @vasundharasahu1348 Рік тому

    Error: _name_ not defined
    How I can fix it..?

  • @hanbaal
    @hanbaal Рік тому

    Any Idea why when I copy the code and run it in idle3 I get a syntax error on line 14?
    data: dict = json.load(file) it doesn't like the colon.
    I don't have much idea what I'm doing, I'm not much of a coder.

    • @glassesgaming5831
      @glassesgaming5831 Рік тому

      probably doesnt work on an older version of python, try updating python or just remove the colon and dict. specifying a variable's type is nice but not required for it to work

    • @carsonhighfill364
      @carsonhighfill364 Рік тому

      You typed it correct maybe you indented it wrong. python is picky about indents. try giveing it a tab or 4 spaces. from the line above

    • @الطيبمحمد-س7س
      @الطيبمحمد-س7س Рік тому

      I think you have to write file name

  • @calebplaysgamesofficial
    @calebplaysgamesofficial 7 місяців тому

    is this on github??? I think I made a mistake but the video was a little hard to follow.

  • @cyber-x3194
    @cyber-x3194 Рік тому

    It's not work on 3.11 don't know why

  • @VibeVoyage001
    @VibeVoyage001 8 місяців тому +1

    github link?

  • @katarisreelasya7936
    @katarisreelasya7936 6 місяців тому

    where is the link for github repos

  • @adityag6022
    @adityag6022 Рік тому

    Thank you sir

  • @A-X-pi
    @A-X-pi Рік тому

    ≠ how do I get that?

  • @martinsilungwe2725
    @martinsilungwe2725 Рік тому

    Thank you very much

  • @kauru4738
    @kauru4738 Рік тому

    im new to coding and i was wondering if this can be used with a discord bot.

  • @fukozrecords6566
    @fukozrecords6566 11 місяців тому

    Thank you, One quick question. What happens when someone feed knowledge hub with the wrong information..

    • @mahiatlinux
      @mahiatlinux 11 місяців тому

      It would output the wrong answer if the question is asked. There is nothing to understand the information given is wrong.

  • @hizararain-c3t
    @hizararain-c3t 6 місяців тому

    wo is the link?

  • @martinsilungwe2725
    @martinsilungwe2725 Рік тому +1

    Can you do a video on how we can extract all text from a word document

    • @glassesgaming5831
      @glassesgaming5831 Рік тому

      you can just do that by using the in-build open feature in python

    • @carsonhighfill364
      @carsonhighfill364 Рік тому +1

      dude you would do a file open and read to import it as a sring then do a .slice() to index the words [ ] and boom

  • @kamino3694
    @kamino3694 10 місяців тому

    is it possible to implement this into a discord bot?

  • @sentexmc
    @sentexmc 10 місяців тому

    cool i searched very long

  • @mmm55m55m
    @mmm55m55m Рік тому +1

    can i have the code?

  • @SBRox
    @SBRox 11 місяців тому

    There's no github code in the description I badly needed please :(

  • @mohamedsaber-uo7wu
    @mohamedsaber-uo7wu Рік тому +2

    where is the source code plz?

    • @ThomasKallstenius
      @ThomasKallstenius Рік тому

      same question.... where is the link to the github? thanks