mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
130 lines
4.3 KiB
Python
130 lines
4.3 KiB
Python
from nonebot.adapters import Bot
|
||
from nonebot.plugin import PluginMetadata
|
||
from nonebot_plugin_alconna import (
|
||
Alconna,
|
||
Args,
|
||
Arparma,
|
||
Option,
|
||
on_alconna,
|
||
store_true,
|
||
)
|
||
from nonebot_plugin_saa import Text
|
||
from nonebot_plugin_session import EventSession
|
||
|
||
from zhenxun.configs.utils import PluginExtraData
|
||
from zhenxun.services.log import logger
|
||
|
||
from ._data_source import uid_pid_exists
|
||
from ._model.pixiv import Pixiv
|
||
from ._model.pixiv_keyword_user import PixivKeywordUser
|
||
|
||
__plugin_meta__ = PluginMetadata(
|
||
name="PIX添加",
|
||
description="PIX关键词/UID/PID添加管理",
|
||
usage="""
|
||
指令:
|
||
添加pix关键词 [Tag]: 添加一个pix搜索收录Tag
|
||
pix添加 uid [uid]: 添加一个pix搜索收录uid
|
||
pix添加 pid [pid]: 添加一个pix收录pid
|
||
""".strip(),
|
||
extra=PluginExtraData(
|
||
author="HibiKier",
|
||
version="0.1",
|
||
).dict(),
|
||
)
|
||
|
||
_add_matcher = on_alconna(
|
||
Alconna("添加pix关键词", Args["keyword", str]), priority=5, block=True
|
||
)
|
||
|
||
_uid_matcher = on_alconna(
|
||
Alconna(
|
||
"pix添加",
|
||
Args["add_type", ["uid", "pid"]]["id", str],
|
||
Option("-f", action=store_true, help_text="强制收录不检查是否存在"),
|
||
),
|
||
priority=5,
|
||
block=True,
|
||
)
|
||
|
||
_black_matcher = on_alconna(
|
||
Alconna("添加pix黑名单", Args["pid", str]), priority=5, block=True
|
||
)
|
||
|
||
|
||
@_add_matcher.handle()
|
||
async def _(bot: Bot, session: EventSession, keyword: str, arparma: Arparma):
|
||
group_id = session.id3 or session.id2 or -1
|
||
if not await PixivKeywordUser.exists(keyword=keyword):
|
||
await PixivKeywordUser.create(
|
||
user_id=str(session.id1),
|
||
group_id=str(group_id),
|
||
keyword=keyword,
|
||
is_pass=str(session.id1) in bot.config.superusers,
|
||
)
|
||
text = f"已成功添加pixiv搜图关键词:{keyword}"
|
||
if session.id1 not in bot.config.superusers:
|
||
text += ",请等待管理员通过该关键词!"
|
||
await Text(text).send(reply=True)
|
||
logger.info(
|
||
f"添加了pixiv搜图关键词: {keyword}", arparma.header_result, session=session
|
||
)
|
||
else:
|
||
await Text(f"该关键词 {keyword} 已存在...").send()
|
||
|
||
|
||
@_uid_matcher.handle()
|
||
async def _(bot: Bot, session: EventSession, arparma: Arparma, add_type: str, id: str):
|
||
group_id = session.id3 or session.id2 or -1
|
||
exists_flag = True
|
||
if arparma.find("f") and session.id1 in bot.config.superusers:
|
||
exists_flag = False
|
||
word = None
|
||
if add_type == "uid":
|
||
word = f"uid:{id}"
|
||
else:
|
||
word = f"pid:{id}"
|
||
if await Pixiv.get_or_none(pid=int(id), img_p="p0"):
|
||
await Text(f"该PID:{id}已存在...").finish(reply=True)
|
||
if not await uid_pid_exists(word) and exists_flag:
|
||
await Text("画师或作品不存在或搜索正在CD,请稍等...").finish(reply=True)
|
||
if not await PixivKeywordUser.exists(keyword=word):
|
||
await PixivKeywordUser.create(
|
||
user_id=session.id1,
|
||
group_id=str(group_id),
|
||
keyword=word,
|
||
is_pass=session.id1 in bot.config.superusers,
|
||
)
|
||
text = f"已成功添加pixiv搜图UID/PID:{id}"
|
||
if session.id1 not in bot.config.superusers:
|
||
text += ",请等待管理员通过该关键词!"
|
||
await Text(text).send(reply=True)
|
||
else:
|
||
await Text(f"该UID/PID:{id} 已存在...").send()
|
||
|
||
|
||
@_black_matcher.handle()
|
||
async def _(bot: Bot, session: EventSession, arparma: Arparma, pid: str):
|
||
img_p = ""
|
||
if "p" in pid:
|
||
img_p = pid.split("p")[-1]
|
||
pid = pid.replace("_", "")
|
||
pid = pid[: pid.find("p")]
|
||
if not pid.isdigit:
|
||
await Text("PID必须全部是数字!").finish(reply=True)
|
||
if not await PixivKeywordUser.exists(
|
||
keyword=f"black:{pid}{f'_p{img_p}' if img_p else ''}"
|
||
):
|
||
await PixivKeywordUser.create(
|
||
user_id=114514,
|
||
group_id=114514,
|
||
keyword=f"black:{pid}{f'_p{img_p}' if img_p else ''}",
|
||
is_pass=session.id1 in bot.config.superusers,
|
||
)
|
||
await Text(f"已添加PID:{pid} 至黑名单中...").send()
|
||
logger.info(
|
||
f" 添加了pixiv搜图黑名单 PID:{pid}", arparma.header_result, session=session
|
||
)
|
||
else:
|
||
await Text(f"PID:{pid} 已添加黑名单中,添加失败...").send()
|