yoimiya-kokomi / miao-plugin

Miao-Plugin for Yunzai-Bot
MIT License
1.4k stars 201 forks source link

fix. 修复uid与qq号对应关系不刷新的问题 #760

Open lhhxxxxx opened 4 days ago

lhhxxxxx commented 4 days ago

此前遇到了一个bug:当uid被其他人抢先绑定之后,即使对方取消绑定,无论如何操作,排行榜等处显示的头像仍然会显示对方的头像。

经过分析,该bug问题在于redis数据库miao:rank:uid-info:{uid}内存储的qq号不刷新,而更新该处数据库的方法为setUidInfo。该方法只在两处被调用,其一:

4d398499b4f666e768e7c1e2df3ea315

并不会实际更新数据库,其二来自本pr修改的render函数,其首先定义了isSelfUid

67adf1278392c25cd1044afd40ebfaf7

然后传入setUidInfo

image

内部更新qq号逻辑如下:

b8727e98a5a195e501855d8f43c005b4

因此,qq号当前仅当当前uid在getCkUidList返回的uid列表中时会被更新。虽然getCkUidList函数名已经暗示了其用途,但鉴于是第一次接触本项目代码,确认了一下其逻辑:

1a4ebb6d97e243ddae450c30c00ec91a

be9abdc7b8e78a1188bd399555899751

9af49bb7a9bb5119fdbfd987f94d9d54

因此显然,getCkUidList只会返回绑定了cookie的uid。

综上,bug的原因在于,只要没有绑定过cookie,只要被人绑定过的uid,其uid-qq对应关系就不再会发生改变,故做出此修改及pr。

此外,本修改不会影响系统健壮性与安全性,毕竟初始的uid-qq对应关系本就是无权鉴的,且本修改涉及的变量均只影响setUidInfo函数的uidType参数,该参数只涉及对应qq号的更新逻辑。