|
@@ -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),))
|
|
|
|