Files
rc-tgbot/app/plugin/user.py
T
2026-03-01 00:49:27 +03:00

195 lines
4.6 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._agree_upload: bool = None
self._vector_type: dict = 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
@property
def agree_upload(self):
return self._agree_upload
@agree_upload.setter
def agree_upload(self, value):
self._agree_upload = value
self.update_data()
return self._agree_upload
@property
def vector_type(self):
return self._vector_type
@vector_type.setter
def vector_type(self, value):
self._vector_type = value
self.update_data()
return self._vector_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,
"agree_upload": self._agree_upload,
"vector_type": self._vector_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"]
self._agree_upload = data["agree_upload"]
self._vector_type = data["vector_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