167 lines
3.9 KiB
Python
Executable File
167 lines
3.9 KiB
Python
Executable File
from db import DB
|
|
from plugin.bot_instance import bot
|
|
from config import Messages
|
|
from telebot import types
|
|
from typing import List
|
|
|
|
users_reg: List["User"] = []
|
|
|
|
|
|
class User:
|
|
_db = DB("Users")
|
|
|
|
def __init__(self, user_id, name=None):
|
|
self.user_id: int = user_id
|
|
self._name: str = name
|
|
self._age: int = None
|
|
self._gender: str = None
|
|
self._faculty: str = None
|
|
self._group: str = None
|
|
self._type: str = None
|
|
|
|
self._load()
|
|
|
|
@property
|
|
def name(self):
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, value):
|
|
self._name = value
|
|
self.update_data()
|
|
|
|
return self._name
|
|
|
|
@property
|
|
def age(self):
|
|
return self._age
|
|
|
|
@age.setter
|
|
def age(self, value):
|
|
self._age = value
|
|
self.update_data()
|
|
|
|
return self._age
|
|
|
|
@property
|
|
def gender(self):
|
|
return self._gender
|
|
|
|
@gender.setter
|
|
def gender(self, value):
|
|
self._gender = value
|
|
self.update_data()
|
|
|
|
return self._gender
|
|
|
|
@property
|
|
def faculty(self):
|
|
return self._faculty
|
|
|
|
@faculty.setter
|
|
def faculty(self, value):
|
|
self._faculty = value
|
|
self.update_data()
|
|
|
|
return self._faculty
|
|
|
|
@property
|
|
def group(self):
|
|
return self._group
|
|
|
|
@group.setter
|
|
def group(self, value):
|
|
self._group = value
|
|
self.update_data()
|
|
|
|
return self._group
|
|
|
|
@property
|
|
def type(self):
|
|
return self._type
|
|
|
|
@type.setter
|
|
def type(self, value):
|
|
self._type = value
|
|
self.update_data()
|
|
|
|
return self._type
|
|
|
|
def _into_json(self):
|
|
return {
|
|
"_id": self.user_id,
|
|
"name": self._name,
|
|
"age": self._age,
|
|
"gender": self._gender,
|
|
"faculty": self._faculty,
|
|
"group": self._group,
|
|
"type": self._type,
|
|
}
|
|
|
|
def update_data(self):
|
|
self._db.update({"_id": self.user_id}, self._into_json())
|
|
|
|
def delete(self):
|
|
self._db.delete({"_id": self.user_id})
|
|
|
|
def get_all() -> list["User"]:
|
|
users_data = User._db.find({})
|
|
|
|
return [User(data["_id"]) for data in users_data]
|
|
|
|
def _save(self):
|
|
if not self._db.exist({"_id": self.user_id}):
|
|
self._db.insert(self._into_json())
|
|
else:
|
|
self.update_data()
|
|
|
|
def _load(self):
|
|
if not self._db.exist({"_id": self.user_id}):
|
|
self._save()
|
|
# raise ValueError("User not found")
|
|
|
|
data = self._db.find_one({"_id": self.user_id})
|
|
self._name = data["name"]
|
|
|
|
self._age = data["age"]
|
|
self._gender = data["gender"]
|
|
self._faculty = data["faculty"]
|
|
self._group = data["group"]
|
|
self._type = data["type"]
|
|
|
|
@staticmethod
|
|
def start_shuffle_reg():
|
|
users_reg.clear()
|
|
users = [user for user in User.get_all() if (user.type and len(user.type) == 4)]
|
|
|
|
markup = types.InlineKeyboardMarkup()
|
|
markup.add(
|
|
types.InlineKeyboardButton("Я тут!", callback_data="shuffle_agree"),
|
|
)
|
|
|
|
for user in users:
|
|
bot.send_message(user.user_id, Messages.MATCHING_START, reply_markup=markup)
|
|
|
|
return
|
|
|
|
@staticmethod
|
|
@bot.callback_query_handler(func=lambda call: call.data == "shuffle_agree")
|
|
def add_user_to_reg(call: types.CallbackQuery):
|
|
user = User(call.message.chat.id)
|
|
users_reg.append(user)
|
|
|
|
bot.edit_message_text(
|
|
"Вы добавлены в список участников! Пожалуйста, подождите, пока все зарегистрируются",
|
|
call.message.chat.id,
|
|
call.message.message_id,
|
|
reply_markup=None,
|
|
)
|
|
|
|
return
|
|
|
|
def __str__(self):
|
|
text = [f"{var}: {vars(self)[var]}" for var in vars(self) if var]
|
|
text = "\n".join(text)
|
|
|
|
return text
|