mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-02 09:26:12 +08:00
♻️ cookie 组件不再与 user 关联
This commit is contained in:
parent
c828fd94e4
commit
1cd778c2e0
@ -259,14 +259,9 @@ class DBConfig:
|
||||
)
|
||||
return res
|
||||
|
||||
async def get_cookie(
|
||||
self, user: PlatformTarget = None, platform_name: str = None, target: T_Target = None
|
||||
) -> list[Cookie]:
|
||||
async def get_cookie(self, platform_name: str = None, target: T_Target = None) -> list[Cookie]:
|
||||
async with create_session() as sess:
|
||||
query = select(Cookie).distinct().join(User)
|
||||
if user:
|
||||
user_id = await sess.scalar(select(User.id).where(User.user_target == model_dump(user)))
|
||||
query = query.where(Cookie.user_id == user_id)
|
||||
query = select(Cookie).distinct()
|
||||
if platform_name:
|
||||
query = query.where(Cookie.platform_name == platform_name)
|
||||
query = query.outerjoin(CookieTarget).options(selectinload(Cookie.targets))
|
||||
@ -277,24 +272,9 @@ class DBConfig:
|
||||
res = [cookie for cookie in res if cookie.id in ids]
|
||||
return res
|
||||
|
||||
async def get_cookie_by_user_and_platform(self, user: PlatformTarget, platform_name: str) -> list[Cookie]:
|
||||
async def add_cookie(self, platform_name: str, content: str) -> int:
|
||||
async with create_session() as sess:
|
||||
res = await sess.scalar(
|
||||
select(User)
|
||||
.where(User.user_target == model_dump(user))
|
||||
.join(Cookie)
|
||||
.where(Cookie.platform_name == platform_name)
|
||||
.outerjoin(CookieTarget)
|
||||
.options(selectinload(User.cookies))
|
||||
)
|
||||
if not res:
|
||||
return []
|
||||
return res.cookies
|
||||
|
||||
async def add_cookie(self, user: PlatformTarget, platform_name: str, content: str) -> int:
|
||||
async with create_session() as sess:
|
||||
user_obj = await sess.scalar(select(User).where(User.user_target == model_dump(user)))
|
||||
cookie = Cookie(user=user_obj, platform_name=platform_name, content=content)
|
||||
cookie = Cookie(platform_name=platform_name, content=content)
|
||||
sess.add(cookie)
|
||||
await sess.commit()
|
||||
await sess.refresh(cookie)
|
||||
|
@ -20,7 +20,6 @@ class User(Model):
|
||||
user_target: Mapped[dict] = mapped_column(JSON().with_variant(JSONB, "postgresql"))
|
||||
|
||||
subscribes: Mapped[list["Subscribe"]] = relationship(back_populates="user")
|
||||
cookies: Mapped[list["Cookie"]] = relationship(back_populates="user")
|
||||
|
||||
@property
|
||||
def saa_target(self) -> PlatformTarget:
|
||||
@ -73,14 +72,12 @@ class Subscribe(Model):
|
||||
|
||||
class Cookie(Model):
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey("nonebot_bison_user.id"))
|
||||
platform_name: Mapped[str] = mapped_column(String(20))
|
||||
content: Mapped[str] = mapped_column(String(1024))
|
||||
last_usage: Mapped[datetime.datetime] = mapped_column(DateTime, default=datetime.datetime(1970, 1, 1))
|
||||
status: Mapped[str] = mapped_column(String(20), default="")
|
||||
tags: Mapped[dict[str, Any]] = mapped_column(JSON().with_variant(JSONB, "postgresql"), default={})
|
||||
|
||||
user: Mapped[User] = relationship(back_populates="cookies")
|
||||
targets: Mapped[list["CookieTarget"]] = relationship(back_populates="cookie")
|
||||
|
||||
|
||||
|
59
nonebot_bison/config/migrations/590dc2911ea7_add_cookie.py
Normal file
59
nonebot_bison/config/migrations/590dc2911ea7_add_cookie.py
Normal file
@ -0,0 +1,59 @@
|
||||
"""empty message
|
||||
|
||||
Revision ID: 590dc2911ea7
|
||||
Revises: f9baef347cc8
|
||||
Create Date: 2024-08-31 23:06:02.123932
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
from sqlalchemy import Text
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "590dc2911ea7"
|
||||
down_revision = "f9baef347cc8"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table(
|
||||
"nonebot_bison_cookie",
|
||||
sa.Column("id", sa.Integer(), nullable=False),
|
||||
sa.Column("platform_name", sa.String(length=20), nullable=False),
|
||||
sa.Column("content", sa.String(length=1024), nullable=False),
|
||||
sa.Column("last_usage", sa.DateTime(), nullable=False),
|
||||
sa.Column("status", sa.String(length=20), nullable=False),
|
||||
sa.Column("tags", sa.JSON().with_variant(postgresql.JSONB(astext_type=Text()), "postgresql"), nullable=False),
|
||||
sa.PrimaryKeyConstraint("id", name=op.f("pk_nonebot_bison_cookie")),
|
||||
)
|
||||
op.create_table(
|
||||
"nonebot_bison_cookietarget",
|
||||
sa.Column("id", sa.Integer(), nullable=False),
|
||||
sa.Column("target_id", sa.Integer(), nullable=False),
|
||||
sa.Column("cookie_id", sa.Integer(), nullable=False),
|
||||
sa.ForeignKeyConstraint(
|
||||
["cookie_id"],
|
||||
["nonebot_bison_cookie.id"],
|
||||
name=op.f("fk_nonebot_bison_cookietarget_cookie_id_nonebot_bison_cookie"),
|
||||
ondelete="CASCADE",
|
||||
),
|
||||
sa.ForeignKeyConstraint(
|
||||
["target_id"],
|
||||
["nonebot_bison_target.id"],
|
||||
name=op.f("fk_nonebot_bison_cookietarget_target_id_nonebot_bison_target"),
|
||||
ondelete="CASCADE",
|
||||
),
|
||||
sa.PrimaryKeyConstraint("id", name=op.f("pk_nonebot_bison_cookietarget")),
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table("nonebot_bison_cookietarget")
|
||||
op.drop_table("nonebot_bison_cookie")
|
||||
# ### end Alembic commands ###
|
@ -1,21 +1,18 @@
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.matcher import Matcher
|
||||
from nonebot.params import Arg, ArgPlainText
|
||||
from nonebot_plugin_saa import PlatformTarget
|
||||
from nonebot.adapters import Message, MessageTemplate
|
||||
|
||||
from ..types import Target
|
||||
from ..config import config
|
||||
from ..platform import platform_manager
|
||||
from ..apis import check_sub_target_cookie
|
||||
from .utils import common_platform, ensure_user_info, gen_handle_cancel
|
||||
from .utils import common_platform, gen_handle_cancel
|
||||
|
||||
|
||||
def do_add_cookie(add_cookie: type[Matcher]):
|
||||
handle_cancel = gen_handle_cancel(add_cookie, "已中止添加cookie")
|
||||
|
||||
add_cookie.handle()(ensure_user_info(add_cookie))
|
||||
|
||||
@add_cookie.handle()
|
||||
async def init_promote(state: T_State):
|
||||
state["_prompt"] = (
|
||||
@ -56,8 +53,8 @@ def do_add_cookie(add_cookie: type[Matcher]):
|
||||
state["name"] = await check_sub_target_cookie(state["platform"], Target(""), cookie_text)
|
||||
|
||||
@add_cookie.handle()
|
||||
async def add_cookie_process(state: T_State, user: PlatformTarget = Arg("target_user_info")):
|
||||
await config.add_cookie(user, state["platform"], state["cookie"])
|
||||
async def add_cookie_process(state: T_State):
|
||||
await config.add_cookie(state["platform"], state["cookie"])
|
||||
await add_cookie.finish(
|
||||
f"已添加 Cookie: {state['cookie']} 到平台 {state['platform']}" + "\n请使用“关联cookie”为 Cookie 关联订阅"
|
||||
)
|
||||
|
@ -1,25 +1,21 @@
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.matcher import Matcher
|
||||
from nonebot.params import Arg, ArgPlainText
|
||||
from nonebot.params import ArgPlainText
|
||||
from nonebot_plugin_saa import MessageFactory
|
||||
from nonebot.internal.adapter import MessageTemplate
|
||||
from nonebot_plugin_saa import MessageFactory, PlatformTarget
|
||||
|
||||
from ..config import config
|
||||
from ..utils import parse_text
|
||||
from ..apis import get_cookie_friendly_name
|
||||
from .utils import ensure_user_info, gen_handle_cancel, generate_sub_list_text
|
||||
from .utils import gen_handle_cancel, generate_sub_list_text
|
||||
|
||||
|
||||
def do_add_cookie_target(add_cookie_target_matcher: type[Matcher]):
|
||||
handle_cancel = gen_handle_cancel(add_cookie_target_matcher, "已中止关联 cookie")
|
||||
|
||||
add_cookie_target_matcher.handle()(ensure_user_info(add_cookie_target_matcher))
|
||||
|
||||
@add_cookie_target_matcher.handle()
|
||||
async def init_promote(state: T_State, user_info: PlatformTarget = Arg("target_user_info")):
|
||||
res = await generate_sub_list_text(
|
||||
add_cookie_target_matcher, state, user_info, is_index=True, is_show_cookie=True
|
||||
)
|
||||
async def init_promote(state: T_State):
|
||||
res = await generate_sub_list_text(add_cookie_target_matcher, state, is_index=True, is_show_cookie=True)
|
||||
res += "请输入要关联 cookie 的订阅的序号\n输入'取消'中止"
|
||||
await MessageFactory(await parse_text(res)).send()
|
||||
|
||||
@ -34,11 +30,8 @@ def do_add_cookie_target(add_cookie_target_matcher: type[Matcher]):
|
||||
@add_cookie_target_matcher.handle()
|
||||
async def init_promote_cookie(state: T_State):
|
||||
|
||||
cookies = await config.get_cookie(
|
||||
user=state["target_user_info"], platform_name=state["target"]["platform_name"]
|
||||
)
|
||||
cookies = await config.get_cookie(platform_name=state["target"]["platform_name"])
|
||||
associated_cookies = await config.get_cookie(
|
||||
user=state["target_user_info"],
|
||||
target=state["target"]["target"],
|
||||
platform_name=state["target"]["platform_name"],
|
||||
)
|
||||
@ -62,7 +55,7 @@ def do_add_cookie_target(add_cookie_target_matcher: type[Matcher]):
|
||||
await add_cookie_target_matcher.reject("序号错误")
|
||||
|
||||
@add_cookie_target_matcher.handle()
|
||||
async def add_cookie_target_process(state: T_State, user: PlatformTarget = Arg("target_user_info")):
|
||||
async def add_cookie_target_process(state: T_State):
|
||||
await config.add_cookie_target(state["target"]["target"], state["target"]["platform_name"], state["cookie"].id)
|
||||
await add_cookie_target_matcher.finish(
|
||||
f"已关联 Cookie: {await get_cookie_friendly_name(state['cookie'])} "
|
||||
|
@ -1,5 +1,7 @@
|
||||
import contextlib
|
||||
from typing import Annotated
|
||||
from itertools import groupby
|
||||
from operator import attrgetter
|
||||
|
||||
from nonebot.rule import Rule
|
||||
from nonebot.adapters import Event
|
||||
@ -66,9 +68,16 @@ def admin_permission():
|
||||
|
||||
|
||||
async def generate_sub_list_text(
|
||||
matcher: type[Matcher], state: T_State, user_info: PlatformTarget, is_index=False, is_show_cookie=False
|
||||
matcher: type[Matcher], state: T_State, user_info: PlatformTarget = None, is_index=False, is_show_cookie=False
|
||||
):
|
||||
sub_list = await config.list_subscribe(user_info)
|
||||
if user_info:
|
||||
sub_list = await config.list_subscribe(user_info)
|
||||
else:
|
||||
sub_list = await config.list_subs_with_all_info()
|
||||
sub_list = [
|
||||
next(group)
|
||||
for key, group in groupby(sorted(sub_list, key=attrgetter("target_id")), key=attrgetter("target_id"))
|
||||
]
|
||||
if not sub_list:
|
||||
await matcher.finish("暂无已订阅账号\n请使用“添加订阅”命令添加订阅")
|
||||
res = "订阅的帐号为:\n"
|
||||
@ -88,7 +97,7 @@ async def generate_sub_list_text(
|
||||
res += " {}".format(", ".join(sub.tags)) + "\n"
|
||||
if is_show_cookie:
|
||||
target_cookies = await config.get_cookie(
|
||||
user=user_info, target=sub.target.target, platform_name=sub.target.platform_name
|
||||
target=sub.target.target, platform_name=sub.target.platform_name
|
||||
)
|
||||
if target_cookies:
|
||||
res += " 关联的 Cookie:\n"
|
||||
|
Loading…
x
Reference in New Issue
Block a user