Skip to content

Commit

Permalink
✨ 使用 plugin-user 跨平台绑定
Browse files Browse the repository at this point in the history
  • Loading branch information
KomoriDev committed Aug 1, 2024
1 parent 6838811 commit 0211192
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 537 deletions.
27 changes: 15 additions & 12 deletions nonebot_plugin_wakatime/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
from nonebot.rule import Rule
from nonebot.log import logger
from httpx import ConnectTimeout
from nonebot.internal.adapter import Event
from nonebot.plugin import PluginMetadata, inherit_supported_adapters

require("nonebot_plugin_orm")
require("nonebot_plugin_user")
require("nonebot_plugin_alconna")
require("nonebot_plugin_htmlrender")
from nonebot_plugin_user import UserSession
from nonebot_plugin_orm import async_scoped_session
from nonebot_plugin_alconna.uniseg import At, Button, UniMessage, FallbackStrategy
from nonebot_plugin_alconna import Args, Match, Option, Alconna, MsgTarget, on_alconna
Expand Down Expand Up @@ -70,7 +71,7 @@ def _rule() -> bool:


@wakatime.assign("$main")
async def _(event: Event, target: Match[At | int]):
async def _(user_session: UserSession, target: Match[At | int]):
if target.available:
if isinstance(target.result, At):
target_name = "他"
Expand All @@ -80,7 +81,7 @@ async def _(event: Event, target: Match[At | int]):
target_id = target.result
else:
target_name = "你"
target_id = event.get_user_id()
target_id = user_session.user_id

try:
user_info_task = API.get_user_info(target_id)
Expand Down Expand Up @@ -110,10 +111,13 @@ async def _(event: Event, target: Match[At | int]):

@wakatime.assign("bind")
async def _(
code: Match[str], event: Event, msg_target: MsgTarget, session: async_scoped_session
code: Match[str],
user_session: UserSession,
msg_target: MsgTarget,
session: async_scoped_session,
):

if await session.get(User, event.get_user_id()):
if await session.get(User, user_session.user_id):
await UniMessage("已绑定过 wakatime 账号").finish(at_sender=True)

if not msg_target.private:
Expand All @@ -136,30 +140,29 @@ async def _(
if resp.status_code == 200:
parsed_data = parse_qs(resp.text)
user = User(
user_id=event.get_user_id(),
platform=msg_target.adapter,
id=user_session.user_id,
access_token=parsed_data["access_token"][0],
)
session.add(user)
await session.commit()
await UniMessage("绑定成功").finish(at_sender=True)

logger.error(f"用户 {event.get_user_id()} 绑定失败。状态码:{resp.status_code}")
logger.error(f"用户 {user_session.user_id} 绑定失败。状态码:{resp.status_code}")
await UniMessage("绑定失败").finish(at_sender=True)


@wakatime.assign("revoke")
async def _(event: Event, session: async_scoped_session):
if not (user := await session.get(User, event.get_user_id())):
async def _(user_session: UserSession, session: async_scoped_session):
if not (user := await session.get(User, user_session.user_id)):
await UniMessage.text(
"还没有绑定 Wakatime 账号!请私聊我并使用 /wakatime bind 命令进行绑定"
).finish(at_sender=True)

resp = await API.revoke_user_token(event.get_user_id())
resp = await API.revoke_user_token(user_session.user_id)
if resp.status_code == 200:
await session.delete(user)
await session.commit()
await UniMessage("已解绑").finish(at_sender=True)

logger.error(f"用户 {event.get_user_id()} 解绑失败。状态码:{resp.status_code}")
logger.error(f"用户 {user_session.user_id} 解绑失败。状态码:{resp.status_code}")
await UniMessage("解绑失败").finish(at_sender=True)
2 changes: 1 addition & 1 deletion nonebot_plugin_wakatime/apis/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ async def get_access_token(cls, user_id: str) -> str:

session = get_session()
async with session.begin():
stmt = select(User).where(User.user_id == user_id)
stmt = select(User).where(User.id == user_id)
user = (await session.execute(stmt)).scalar()

if not user:
Expand Down
52 changes: 52 additions & 0 deletions nonebot_plugin_wakatime/migrations/87c3a8ac9bf5_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"""empty message
迁移 ID: 87c3a8ac9bf5
父迁移:
创建时间: 2024-08-01 09:44:19.285320
"""

from __future__ import annotations

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op

revision: str = "87c3a8ac9bf5"
down_revision: str | Sequence[str] | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade(name: str = "") -> None:
if name:
return
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("wakatime", schema=None) as batch_op:
batch_op.add_column(sa.Column("id", sa.String(), nullable=False))
batch_op.alter_column(
"access_token",
existing_type=sa.INTEGER(),
type_=sa.String(),
nullable=False,
)
batch_op.drop_column("user_id")
batch_op.drop_column("platform")

# ### end Alembic commands ###


def downgrade(name: str = "") -> None:
if name:
return
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("wakatime", schema=None) as batch_op:
batch_op.add_column(sa.Column("platform", sa.INTEGER(), nullable=True))
batch_op.add_column(sa.Column("user_id", sa.INTEGER(), nullable=True))
batch_op.alter_column(
"access_token", existing_type=sa.String(), type_=sa.INTEGER(), nullable=True
)
batch_op.drop_column("id")

# ### end Alembic commands ###
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""remove platform and rename user_id to id
迁移 ID: cf6ccefd1d7a
父迁移:
创建时间: 2024-08-01 08:58:54.835575
"""

from __future__ import annotations

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op

revision: str = "cf6ccefd1d7a"
down_revision: str | Sequence[str] | None = None
branch_labels: str | Sequence[str] | None = ("wakatime",)
depends_on: str | Sequence[str] | None = None


def upgrade(name: str = "") -> None:
if name:
return
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("wakatime", schema=None) as batch_op:
batch_op.add_column(sa.Column("id", sa.String(), nullable=False))
batch_op.drop_column("user_id")
batch_op.drop_column("platform")

# ### end Alembic commands ###


def downgrade(name: str = "") -> None:
if name:
return
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("wakatime", schema=None) as batch_op:
batch_op.add_column(sa.Column("platform", sa.VARCHAR(), nullable=False))
batch_op.add_column(sa.Column("user_id", sa.VARCHAR(), nullable=False))
batch_op.drop_column("id")

# ### end Alembic commands ###
4 changes: 1 addition & 3 deletions nonebot_plugin_wakatime/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ class User(Model):

__tablename__ = "wakatime"

user_id: Mapped[str] = mapped_column(primary_key=True)
id: Mapped[str] = mapped_column(primary_key=True)
"""User ID"""
platform: Mapped[str]
"""User Account Platform"""
access_token: Mapped[str]
"""Wakatime Access Token"""
Loading

0 comments on commit 0211192

Please sign in to comment.