Based on the given specification, the following core classes, functions, and methods will be necessary:
Classes:
- User: Represents a user account with a nickname and internal currency balance. Contains methods for finding tasks, loading tasks, buying SH, and uploading tasks.
- Task: Represents a homework solution with properties for school, grade, date, tags, image, text recognition, likes, and dislikes.
- Subject: Represents a subject with a name and associated tags.
Functions:
- search_tasks: A function that takes a list of tasks and a subject, and returns a list of tasks that match the subject's associated tags.
Methods:
- User.find_task: A method that takes a list of tasks and a set of tags, and returns a list of tasks that match the tags.
- User.load_task: A method that takes a task and deducts 1 SH from the user's internal currency balance.
- User.buy_sh: A method that takes a number of SH and charges the user's credit card 0.1 USD per SH.
- User.upload_task: A method that takes a task and adds it to the user's list of tasks. If the task receives more than 10 likes and less than 5 dislikes, the user's internal currency balance is increased by 5 SH.
Now, let's create the necessary files for the implementation of the Telegram bot using aiogram and SQLAlchemy.
[main.py]