import time import jsonpickle from vk_messages_bot import db from vk_messages_bot.vk import Vk """ VK User """ class Vk_user(): def __init__(self, uid=None, type='', invited_by=0, first_name='Unresolved', last_name='Name', deactivated=None, photo_400_orig=None, created_at=time.time()): self.uid = uid self.first_name = first_name self.last_name = last_name self.photo = photo_400_orig self.created_at = created_at def __hash__(self): return self.uid def __eq__(self, other): return self.__hash__() == other.__hash__() def db_key(self): return Vk_user.DB_KEY(self.uid) @staticmethod def DB_KEY(uid): return 'VK-USER-' + str(uid) def empty(self): return self.uid == None def participants(self): return None def should_fetch(self): return self.uid == None or self.outdated() def get_name(self): return self.first_name + ' ' + self.last_name def persist(self): db.set(self.db_key(), self.to_json()) db.sync() def send_message(self, token, message): params = {'user_id': self.uid, 'message': message} message_id = Vk.api('messages.send', token, params) def outdated(self): one_week = 60 * 24 * 7 return self.created_at < time.time() - one_week def to_json(self): return jsonpickle.encode(self) @staticmethod def from_json(json_str): return jsonpickle.decode(json_str) @staticmethod def from_api(token, params): users = Vk.api('users.get', token, params) if users == None: return Vk_user() if len(users) == 0: return Vk_user() user = Vk_user(**users[0]) user.persist() return user @staticmethod def fetch_current_user(token): params = {'fields': 'photo_400_orig'} return Vk_user.from_api(token, params) @staticmethod def fetch_user(token, user_id): key = Vk_user.DB_KEY(user_id) if key in db.dict(): user = Vk_user.from_json(db.get(key)) if not user.outdated(): return user params = {'user_ids': user_id, 'fields': 'photo_400_orig'} return Vk_user.from_api(token, params)