mirror of
https://github.com/LiteyukiStudio/LiteyukiBot.git
synced 2024-11-27 07:35:09 +08:00
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
import nonebot
|
|
|
|
from nonebot.adapters import satori
|
|
from nonebot.adapters.satori.models import User
|
|
|
|
|
|
class UserInfo:
|
|
user_infos: dict = {}
|
|
|
|
async def load_friends(self, bot: satori.Bot):
|
|
nonebot.logger.info("Update user info from friends")
|
|
friend_response = await bot.friend_list()
|
|
while friend_response.next is not None:
|
|
for i in friend_response.data:
|
|
i: User = i
|
|
self.user_infos[str(i.id)] = i
|
|
friend_response = await bot.friend_list(next_token=friend_response.next)
|
|
|
|
for i in friend_response.data:
|
|
i: User = i
|
|
self.user_infos[str(i.id)] = i
|
|
|
|
nonebot.logger.info("Finish update user info")
|
|
|
|
async def get(self, uid: int | str) -> User | None:
|
|
try:
|
|
return self.user_infos[str(uid)]
|
|
except KeyError:
|
|
return None
|
|
|
|
async def put(self, user: User) -> bool:
|
|
"""
|
|
向用户信息数据库中添加/修改一项,返回值仅代表数据是否变更,不代表操作是否成功
|
|
Args:
|
|
user: 要加入数据库的用户
|
|
|
|
Returns: 当数据库中用户信息发生变化时返回 True, 否则返回 False
|
|
|
|
"""
|
|
try:
|
|
old_user: User = self.user_infos[str(user.id)]
|
|
attr_edited = False
|
|
if user.name is not None:
|
|
if old_user.name != user.name:
|
|
attr_edited = True
|
|
self.user_infos[str(user.id)].name = user.name
|
|
if user.nick is not None:
|
|
if old_user.nick != user.nick:
|
|
attr_edited = True
|
|
self.user_infos[str(user.id)].nick = user.nick
|
|
if user.avatar is not None:
|
|
if old_user.avatar != user.avatar:
|
|
attr_edited = True
|
|
self.user_infos[str(user.id)].avatar = user.avatar
|
|
return attr_edited
|
|
except KeyError:
|
|
self.user_infos[str(user.id)] = user
|
|
return True
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
|
|
user_infos = UserInfo()
|