Skip to content

Commit

Permalink
feat: 完善车牌转发机制
Browse files Browse the repository at this point in the history
  • Loading branch information
WindowsSov8forUs committed May 18, 2024
1 parent 5fdce7b commit 433a230
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 9 deletions.
32 changes: 25 additions & 7 deletions nonebot_plugin_tsugu_bangdream_bot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
player_info,
search_card,
search_song,
forward_room,
search_event,
search_gacha,
search_lsycx,
Expand All @@ -46,7 +47,7 @@
)

import tsugu_api_async
from tsugu_api_core._typing import _ServerId
from tsugu_api_core._typing import _ServerId, _TsuguUser

class NoSpaceExtension(Extension):
@property
Expand Down Expand Up @@ -129,28 +130,45 @@ async def send_wrapper(self, bot: Bot, event: Event, send: Union[str, Message, U

extension = NoSpaceExtension(config.tsugu_reply, config.tsugu_at, config.tsugu_no_space)

async def _get_tsugu_user(event: Event) -> _TsuguUser:
response = await tsugu_api_async.get_user_data("red", event.get_user_id())

if response["status"] == "failed":
raise ValueError(response["data"])

if not isinstance(response["data"], dict):
raise RuntimeError("Unexpected /getUserData response.data type.")

return response["data"]

car_forwarding = on_regex(r"(^(\d{5,6})(.*)$)")

@car_forwarding.handle()
async def _(bot: Bot, event: Event, group: Tuple[Any, ...] = RegexGroup()) -> None:
user_info = await get_user_info(bot, event, event.get_user_id())

try:
response = await tsugu_api_async.station_submit_room_number(
tsugu_user = await _get_tsugu_user(event)
except Exception as exception:
logger.warning(f"Failed to get user data: {exception}")
car_forwarding.skip()

try:
is_forwarded = await forward_room(
int(group[1]),
group[0],
tsugu_user,
"red",
user_info.user_id if user_info is not None else event.get_user_id(),
user_info.user_name if user_info is not None else event.get_user_id(),
config.tsugu_bandori_station_token
)
except Exception as exception:
logger.error(f"Failed to submit room number: {exception}")
await car_forwarding.finish()
logger.warning(f"Failed to submit room number: {exception}")
car_forwarding.skip()

if response["status"] == "failed":
logger.warning(f"Failed to submit room number: {response['data']}")
await car_forwarding.finish()
if is_forwarded:
logger.debug(f"Submitted room number: {group[0]}")

open_forward = Command("开启车牌转发", "开启车牌转发").build(aliases=config.tsugu_open_forward_aliases, extensions=[extension])

Expand Down
52 changes: 51 additions & 1 deletion nonebot_plugin_tsugu_bangdream_bot/_commands.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,61 @@
from base64 import b64decode
from typing import List, Tuple, Union, Optional, Sequence

from nonebot import logger

import tsugu_api_async
from tsugu_api_core._typing import _Server, _ServerId, _DifficultyText
from tsugu_api_core._typing import _Server, _ServerId, _TsuguUser, _DifficultyText

from .config import CAR, FAKE

from ._utils import server_id_to_full_name

async def forward_room(
room_number: int,
raw_message: str,
tsugu_user: _TsuguUser,
platform: str,
user_id: str,
user_name: str,
bandori_station_token: Optional[str]
) -> bool:
if not tsugu_user["car"]:
logger.debug("User is disabled to forward room number")
return False

is_car: bool = False
for _car in CAR:
if _car in raw_message:
is_car = True
break

if not is_car:
return False

for _fake in FAKE:
if _fake in raw_message:
logger.debug(f"Invalid keyword in message: {_fake}")
return False

try:
response = await tsugu_api_async.station_submit_room_number(
room_number,
raw_message,
platform,
user_id,
user_name,
bandori_station_token
)
except Exception as exception:
logger.warning(f"Failed to submit room number: {exception}")
return False

if response["status"] == "success":
return True
else:
logger.warning(f"Failed to submit room number: {response['data']}")
return False

async def switch_forward(user_id: str, mode: bool) -> str:
try:
response = await tsugu_api_async.change_user_data(
Expand Down
68 changes: 68 additions & 0 deletions nonebot_plugin_tsugu_bangdream_bot/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,74 @@

from pydantic import BaseModel

CAR = [
"q1",
"q2",
"q3",
"q4",
"Q1",
"Q2",
"Q3",
"Q4",
"缺1",
"缺2",
"缺3",
"缺4",
"差1",
"差2",
"差3",
"差4",
"3火",
"三火",
"3把",
"三把",
"打满",
"清火",
"奇迹",
"中途",
"大e",
"大分e",
"exi",
"大分跳",
"大跳",
"大a",
"大s",
"大分a",
"大分s",
"长途",
"生日车",
"军训",
"禁fc"
]

FAKE = [
"114514",
"野兽",
"恶臭",
"1919",
"下北泽",
"粪",
"糞",
"臭",
"11451",
"xiabeize",
"雀魂",
"麻将",
"打牌",
"maj",
"麻",
"[",
"]",
"断幺",
"qq.com",
"腾讯会议",
"master",
"疯狂星期四",
"离开了我们",
"日元",
"av",
"bv"
]

class Config(BaseModel):
"""Plugin Config Here"""
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "nonebot-plugin-tsugu-bangdream-bot"
version = "0.1.4"
version = "0.1.5"
description = "Koishi-Plugin-Tsugu-BanGDream-Bot 的 NoneBot2 实现"
authors = [
{name = "WindowsSov8forUs", email = "[email protected]"},
Expand Down

0 comments on commit 433a230

Please sign in to comment.