Bladeren bron

Update user_manager: add avatar into profile

StrayWarrior 1 week geleden
bovenliggende
commit
63f899191c
1 gewijzigde bestanden met toevoegingen van 8 en 2 verwijderingen
  1. 8 2
      user_manager.py

+ 8 - 2
user_manager.py

@@ -38,6 +38,7 @@ class UserManager(abc.ABC):
         default_profile = {
             "name": "",
             "nickname": "",
+            "avatar": "",
             "preferred_nickname": "",
             "gender": "未知",
             "age": 0,
@@ -131,13 +132,15 @@ class LocalUserManager(UserManager):
         pass
 
 class MySQLUserManager(UserManager):
+    PROFILE_EXCLUDE_ITEMS = ['avatar', ]
+
     def __init__(self, db_config, table_name, staff_table):
         self.db = MySQLManager(db_config)
         self.table_name = table_name
         self.staff_table = staff_table
 
     def get_user_profile(self, user_id) -> Dict:
-        sql = f"SELECT name, wxid, profile_data_v1, gender" \
+        sql = f"SELECT name, wxid, profile_data_v1, gender, iconurl as avatar" \
               f" FROM {self.table_name} WHERE third_party_user_id = {user_id}"
         data = self.db.select(sql, pymysql.cursors.DictCursor)
         if not data:
@@ -146,7 +149,7 @@ class MySQLUserManager(UserManager):
         data = data[0]
         gender_map = {0: '未知', 1: '男', 2: '女', None: '未知'}
         gender = gender_map[data['gender']]
-        default_profile = self.get_default_profile(nickname=data['name'], gender=gender)
+        default_profile = self.get_default_profile(nickname=data['name'], gender=gender, avatar=data['avatar'])
         if not data['profile_data_v1']:
             logger.warning(f"user[{user_id}] profile not found, create a default one")
             self.save_user_profile(user_id, default_profile)
@@ -169,6 +172,9 @@ class MySQLUserManager(UserManager):
             raise Exception("Invalid user_id: {}".format(user_id))
         if configs.get().get('debug_flags', {}).get('disable_database_write', False):
             return
+        profile = profile.copy()
+        for name in self.PROFILE_EXCLUDE_ITEMS:
+            profile.pop(name, None)
         sql = f"UPDATE {self.table_name} SET profile_data_v1 = %s WHERE third_party_user_id = {user_id}"
         self.db.execute(sql, (json.dumps(profile),))