mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
perf👌: 优化好友群组更新
This commit is contained in:
parent
aa68553539
commit
88bda9ce2c
@ -4,8 +4,7 @@ from nonebot_plugin_apscheduler import scheduler
|
|||||||
from zhenxun.models.friend_user import FriendUser
|
from zhenxun.models.friend_user import FriendUser
|
||||||
from zhenxun.models.group_console import GroupConsole
|
from zhenxun.models.group_console import GroupConsole
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
|
from zhenxun.utils.platform import PlatformManage
|
||||||
# TODO: 其他平台更新
|
|
||||||
|
|
||||||
|
|
||||||
# 自动更新群组信息
|
# 自动更新群组信息
|
||||||
@ -19,21 +18,7 @@ async def _():
|
|||||||
_used_group = []
|
_used_group = []
|
||||||
for bot in bots.values():
|
for bot in bots.values():
|
||||||
try:
|
try:
|
||||||
group_list = await bot.get_group_list()
|
await PlatformManage.update_group(bot)
|
||||||
gl = [g["group_id"] for g in group_list if g["group_id"] not in _used_group]
|
|
||||||
for g in gl:
|
|
||||||
_used_group.append(g)
|
|
||||||
group_info = await bot.get_group_info(group_id=g)
|
|
||||||
await GroupConsole.update_or_create(
|
|
||||||
group_id=str(group_info["group_id"]),
|
|
||||||
defaults={
|
|
||||||
"group_name": group_info["group_name"],
|
|
||||||
"max_member_count": group_info["max_member_count"],
|
|
||||||
"member_count": group_info["member_count"],
|
|
||||||
"group_flag": 1,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
logger.debug("自动更新群组信息成功", "自动更新群组", group_id=g)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Bot: {bot.self_id} 自动更新群组信息", e=e)
|
logger.error(f"Bot: {bot.self_id} 自动更新群组信息", e=e)
|
||||||
logger.info("自动更新群组成员信息成功...")
|
logger.info("自动更新群组成员信息成功...")
|
||||||
@ -47,22 +32,9 @@ async def _():
|
|||||||
)
|
)
|
||||||
async def _():
|
async def _():
|
||||||
bots = nonebot.get_bots()
|
bots = nonebot.get_bots()
|
||||||
for key in bots:
|
for bot in bots.values():
|
||||||
try:
|
try:
|
||||||
bot = bots[key]
|
await PlatformManage.update_friend(bot)
|
||||||
fl = await bot.get_friend_list()
|
|
||||||
for f in fl:
|
|
||||||
if FriendUser.exists(user_id=str(f["user_id"])):
|
|
||||||
await FriendUser.create(
|
|
||||||
user_id=str(f["user_id"]), user_name=f["nickname"]
|
|
||||||
)
|
|
||||||
logger.debug(
|
|
||||||
f"更新好友信息成功", "自动更新好友", session=f["user_id"]
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
logger.debug(
|
|
||||||
f"好友信息已存在", "自动更新好友", session=f["user_id"]
|
|
||||||
)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"自动更新好友信息错误", "自动更新好友", e=e)
|
logger.error(f"自动更新好友信息错误", "自动更新好友", e=e)
|
||||||
logger.info("自动更新好友信息成功...")
|
logger.info("自动更新好友信息成功...")
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
from nonebot.adapters import Bot
|
from nonebot.adapters import Bot
|
||||||
from nonebot.adapters.kaiheila.exception import ApiNotAvailable
|
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
@ -8,11 +7,9 @@ from nonebot_plugin_saa import Text
|
|||||||
from nonebot_plugin_session import EventSession
|
from nonebot_plugin_session import EventSession
|
||||||
|
|
||||||
from zhenxun.configs.utils import PluginExtraData
|
from zhenxun.configs.utils import PluginExtraData
|
||||||
from zhenxun.models.friend_user import FriendUser
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
|
from zhenxun.utils.platform import PlatformManage
|
||||||
from ._data_source import FgUpdateManage
|
|
||||||
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
__plugin_meta__ = PluginMetadata(
|
||||||
name="更新群组/好友信息",
|
name="更新群组/好友信息",
|
||||||
@ -57,7 +54,7 @@ async def _(
|
|||||||
arparma: Arparma,
|
arparma: Arparma,
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
num = await FgUpdateManage.update_group(bot, session.platform)
|
num = await PlatformManage.update_group(bot)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"更新群聊信息完成,共更新了 {num} 个群组的信息!",
|
f"更新群聊信息完成,共更新了 {num} 个群组的信息!",
|
||||||
arparma.header_result,
|
arparma.header_result,
|
||||||
@ -78,7 +75,7 @@ async def _(
|
|||||||
arparma: Arparma,
|
arparma: Arparma,
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
num = await FgUpdateManage.update_friend(bot, session.platform)
|
num = await PlatformManage.update_friend(bot, session.platform)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"更新好友信息完成,共更新了 {num} 个好友的信息!",
|
f"更新好友信息完成,共更新了 {num} 个好友的信息!",
|
||||||
arparma.header_result,
|
arparma.header_result,
|
||||||
@ -10,21 +10,21 @@ from zhenxun.models.group_console import GroupConsole
|
|||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
|
|
||||||
|
|
||||||
class FgUpdateManage:
|
class PlatformManage:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def update_group(cls, bot: Bot, platform: str) -> int:
|
async def update_group(cls, bot: Bot) -> int:
|
||||||
"""更新群组信息
|
"""更新群组信息
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
bot: Bot
|
bot: Bot
|
||||||
platform: 平台
|
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
int: 更新个数
|
int: 更新个数
|
||||||
"""
|
"""
|
||||||
create_list = []
|
create_list = []
|
||||||
if group_list := await cls.__get_group_list(bot):
|
group_list, platform = await cls.__get_group_list(bot)
|
||||||
|
if group_list:
|
||||||
exists_group_list = await GroupConsole.all().values_list(
|
exists_group_list = await GroupConsole.all().values_list(
|
||||||
"group_id", "channel_id"
|
"group_id", "channel_id"
|
||||||
)
|
)
|
||||||
@ -42,7 +42,7 @@ class FgUpdateManage:
|
|||||||
return len(create_list)
|
return len(create_list)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def __get_group_list(cls, bot: Bot) -> list[GroupConsole]:
|
async def __get_group_list(cls, bot: Bot) -> tuple[list[GroupConsole], str]:
|
||||||
"""获取群组列表
|
"""获取群组列表
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@ -61,7 +61,7 @@ class FgUpdateManage:
|
|||||||
member_count=g["member_count"],
|
member_count=g["member_count"],
|
||||||
)
|
)
|
||||||
for g in group_list
|
for g in group_list
|
||||||
]
|
], "qq"
|
||||||
if isinstance(bot, v12Bot):
|
if isinstance(bot, v12Bot):
|
||||||
group_list = await bot.get_group_list()
|
group_list = await bot.get_group_list()
|
||||||
return [
|
return [
|
||||||
@ -70,7 +70,7 @@ class FgUpdateManage:
|
|||||||
user_name=g.group_name, # type: ignore
|
user_name=g.group_name, # type: ignore
|
||||||
)
|
)
|
||||||
for g in group_list
|
for g in group_list
|
||||||
]
|
], "qq"
|
||||||
if isinstance(bot, DodoBot):
|
if isinstance(bot, DodoBot):
|
||||||
island_list = await bot.get_island_list()
|
island_list = await bot.get_island_list()
|
||||||
source_id_list = [
|
source_id_list = [
|
||||||
@ -88,28 +88,41 @@ class FgUpdateManage:
|
|||||||
)
|
)
|
||||||
for c in channel_list
|
for c in channel_list
|
||||||
]
|
]
|
||||||
return group_list
|
return group_list, "dodo"
|
||||||
if isinstance(bot, KaiheilaBot):
|
if isinstance(bot, KaiheilaBot):
|
||||||
# TODO: kaiheila群组列表
|
group_list = []
|
||||||
pass
|
guilds = await bot.guild_list()
|
||||||
|
if guilds.guilds:
|
||||||
|
for guild_id, name in [(g.id_, g.name) for g in guilds.guilds if g.id_]:
|
||||||
|
view = await bot.guild_view(guild_id=guild_id)
|
||||||
|
group_list.append(GroupConsole(group_id=guild_id, group_name=name))
|
||||||
|
if view.channels:
|
||||||
|
group_list += [
|
||||||
|
GroupConsole(
|
||||||
|
group_id=guild_id, group_name=c.name, channel_id=c.id_
|
||||||
|
)
|
||||||
|
for c in view.channels
|
||||||
|
if c.type != 0
|
||||||
|
]
|
||||||
|
return group_list, "kaiheila"
|
||||||
if isinstance(bot, DiscordBot):
|
if isinstance(bot, DiscordBot):
|
||||||
# TODO: discord群组列表
|
# TODO: discord群组列表
|
||||||
pass
|
pass
|
||||||
return []
|
return [], ""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def update_friend(cls, bot: Bot, platform: str) -> int:
|
async def update_friend(cls, bot: Bot) -> int:
|
||||||
"""更新好友信息
|
"""更新好友信息
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
bot: Bot
|
bot: Bot
|
||||||
platform: 平台
|
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
int: 更新个数
|
int: 更新个数
|
||||||
"""
|
"""
|
||||||
create_list = []
|
create_list = []
|
||||||
if friend_list := await cls.__get_friend_list(bot):
|
friend_list, platform = await cls.__get_friend_list(bot)
|
||||||
|
if friend_list:
|
||||||
user_id_list = await FriendUser.all().values_list("user_id", flat=True)
|
user_id_list = await FriendUser.all().values_list("user_id", flat=True)
|
||||||
for friend in friend_list:
|
for friend in friend_list:
|
||||||
friend.platform = platform
|
friend.platform = platform
|
||||||
@ -120,7 +133,7 @@ class FgUpdateManage:
|
|||||||
return len(create_list)
|
return len(create_list)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def __get_friend_list(cls, bot: Bot) -> list[FriendUser]:
|
async def __get_friend_list(cls, bot: Bot) -> tuple[list[FriendUser], str]:
|
||||||
"""获取好友列表
|
"""获取好友列表
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@ -134,7 +147,7 @@ class FgUpdateManage:
|
|||||||
return [
|
return [
|
||||||
FriendUser(user_id=str(f["user_id"]), user_name=f["nickname"])
|
FriendUser(user_id=str(f["user_id"]), user_name=f["nickname"])
|
||||||
for f in friend_list
|
for f in friend_list
|
||||||
]
|
], "qq"
|
||||||
if isinstance(bot, v12Bot):
|
if isinstance(bot, v12Bot):
|
||||||
friend_list = await bot.get_friend_list()
|
friend_list = await bot.get_friend_list()
|
||||||
return [
|
return [
|
||||||
@ -143,7 +156,7 @@ class FgUpdateManage:
|
|||||||
user_name=f.user_displayname or f.user_remark or f.user_name, # type: ignore
|
user_name=f.user_displayname or f.user_remark or f.user_name, # type: ignore
|
||||||
)
|
)
|
||||||
for f in friend_list
|
for f in friend_list
|
||||||
]
|
], "qq"
|
||||||
if isinstance(bot, DodoBot):
|
if isinstance(bot, DodoBot):
|
||||||
# TODO: dodo好友列表
|
# TODO: dodo好友列表
|
||||||
pass
|
pass
|
||||||
@ -153,4 +166,4 @@ class FgUpdateManage:
|
|||||||
if isinstance(bot, DiscordBot):
|
if isinstance(bot, DiscordBot):
|
||||||
# TODO: discord好友列表
|
# TODO: discord好友列表
|
||||||
pass
|
pass
|
||||||
return []
|
return [], ""
|
||||||
Loading…
Reference in New Issue
Block a user