mirror of
https://github.com/ChenXu233/nonebot_plugin_dialectlist.git
synced 2025-02-21 18:16:05 +08:00
⚡ 异步优化
还有个httpx的client启动优化没解决,准备后期用uninfo解决了。
This commit is contained in:
parent
7aaddb98f5
commit
65dc67c6ac
@ -248,47 +248,14 @@ async def handle_rank(
|
|||||||
|
|
||||||
rank = got_rank(raw_rank)
|
rank = got_rank(raw_rank)
|
||||||
logger.debug(rank)
|
logger.debug(rank)
|
||||||
rank2: List[UserRankInfo] = []
|
|
||||||
ids = await persist_id2user_id([int(i[0]) for i in rank])
|
ids = await persist_id2user_id([int(i[0]) for i in rank])
|
||||||
for i in range(len(rank)):
|
for i in range(len(rank)):
|
||||||
rank[i][0] = str(ids[i])
|
rank[i][0] = str(ids[i])
|
||||||
logger.debug(rank[i])
|
logger.debug(rank[i])
|
||||||
|
|
||||||
total = sum([i[1] for i in rank])
|
t1 = t.time()
|
||||||
index = 1
|
rank2 = await get_user_infos(bot, event, rank)
|
||||||
user_infos = await get_user_infos(bot, event, user_ids=[str(i[0]) for i in rank])
|
logger.debug(f"获取用户信息花费时间:{t.time() - t1}")
|
||||||
for user_info,i in zip(user_infos,rank):
|
|
||||||
if user_info:
|
|
||||||
logger.debug(user_info)
|
|
||||||
user_nickname = (
|
|
||||||
user_info.user_displayname
|
|
||||||
if user_info.user_displayname
|
|
||||||
else user_info.user_name if user_info.user_name else user_info.user_id
|
|
||||||
)
|
|
||||||
user_avatar = (
|
|
||||||
await user_info.user_avatar.get_image()
|
|
||||||
if user_info.user_avatar
|
|
||||||
else open(
|
|
||||||
os.path.dirname(os.path.abspath(__file__))
|
|
||||||
+ "/template/avatar/default.jpg",
|
|
||||||
"rb",
|
|
||||||
).read()
|
|
||||||
)
|
|
||||||
user = UserRankInfo(
|
|
||||||
**model_dump(user_info),
|
|
||||||
user_bnum=i[1],
|
|
||||||
user_proportion=round(i[1] / total * 100, 2),
|
|
||||||
user_index=index,
|
|
||||||
user_nickname=user_nickname,
|
|
||||||
user_avatar_bytes=user_avatar,
|
|
||||||
)
|
|
||||||
user.user_gender = (
|
|
||||||
"♀"
|
|
||||||
if user_info.user_gender == "female"
|
|
||||||
else "♂" if user_info.user_gender == "male" else ""
|
|
||||||
)
|
|
||||||
rank2.append(user)
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
string: str = ""
|
string: str = ""
|
||||||
for i in rank2:
|
for i in rank2:
|
||||||
|
@ -18,6 +18,7 @@ class UserRankInfo(UserInfo):
|
|||||||
# class MsgCountDayData(BaseModel):
|
# class MsgCountDayData(BaseModel):
|
||||||
# session_id: str
|
# session_id: str
|
||||||
# session_bnum: int
|
# session_bnum: int
|
||||||
|
|
||||||
class MessageCountCache(Model):
|
class MessageCountCache(Model):
|
||||||
__table_args__ = {"extend_existing": True}
|
__table_args__ = {"extend_existing": True}
|
||||||
id: Mapped[int] = mapped_column(primary_key=True)
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
|
@ -8,6 +8,7 @@ from sqlalchemy.sql import ColumnElement
|
|||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.params import Depends
|
from nonebot.params import Depends
|
||||||
|
from nonebot.compat import model_dump
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.adapters import Bot, Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
@ -183,7 +184,64 @@ async def get_rank_image(rank: List[UserRankInfo]) -> bytes:
|
|||||||
},
|
},
|
||||||
pages={"viewport": {"width": 1000, "height": 10}},
|
pages={"viewport": {"width": 1000, "height": 10}},
|
||||||
)
|
)
|
||||||
|
def _get_user_nickname(user_info:UserInfo)->str:
|
||||||
|
user_nickname = (
|
||||||
|
user_info.user_displayname
|
||||||
|
if user_info.user_displayname
|
||||||
|
else user_info.user_name if user_info.user_name else user_info.user_id
|
||||||
|
)
|
||||||
|
return user_nickname
|
||||||
|
|
||||||
async def get_user_infos(bot:Bot,event:Event,user_ids:List[str],use_cache: bool = True)-> List[Optional[UserInfo]]:
|
async def _get_user_default_avatar()->bytes:
|
||||||
|
img = open(
|
||||||
|
os.path.dirname(os.path.abspath(__file__))
|
||||||
|
+ "/template/avatar/default.jpg",
|
||||||
|
"rb",
|
||||||
|
).read()
|
||||||
|
return img
|
||||||
|
|
||||||
|
def get_default_user_info()->UserInfo:
|
||||||
|
user_info = UserInfo(
|
||||||
|
user_id="114514",
|
||||||
|
user_name="鬼知道这谁,bot获取不了",
|
||||||
|
)
|
||||||
|
return user_info
|
||||||
|
|
||||||
|
async def get_user_infos(bot:Bot,event:Event,rank:List,use_cache: bool = True)-> List[UserRankInfo]:
|
||||||
|
|
||||||
|
user_ids = [i[0] for i in rank]
|
||||||
pool = [get_user_info(bot, event, id, use_cache) for id in user_ids]
|
pool = [get_user_info(bot, event, id, use_cache) for id in user_ids]
|
||||||
return (await asyncio.gather(*pool))
|
user_infos = (await asyncio.gather(*pool))
|
||||||
|
|
||||||
|
pool = []
|
||||||
|
for i in user_infos:
|
||||||
|
if not i:
|
||||||
|
pool.append(_get_user_default_avatar())
|
||||||
|
continue
|
||||||
|
if i.user_avatar:
|
||||||
|
pool.append(i.user_avatar.get_image())
|
||||||
|
user_avatars = await asyncio.gather(*pool)
|
||||||
|
for i in user_avatars:
|
||||||
|
if not i:
|
||||||
|
user_avatars[user_avatars.index(i)] = await(_get_user_default_avatar())
|
||||||
|
|
||||||
|
total = sum([i[1] for i in rank])
|
||||||
|
rank2 = []
|
||||||
|
for i in range(len(rank)):
|
||||||
|
|
||||||
|
user_info = user_infos[i]
|
||||||
|
if not user_info:
|
||||||
|
user_info = get_default_user_info()
|
||||||
|
|
||||||
|
user = UserRankInfo(
|
||||||
|
**model_dump(user_info),
|
||||||
|
user_bnum=rank[i][1],
|
||||||
|
user_proportion=round(rank[i][1] / total * 100, 2),
|
||||||
|
user_index=i+1,
|
||||||
|
user_nickname=_get_user_nickname(user_info),
|
||||||
|
user_avatar_bytes=user_avatars[i],
|
||||||
|
)
|
||||||
|
rank2.append(user)
|
||||||
|
|
||||||
|
return rank2
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user