diff --git a/nonebot_plugin_tsugu_bangdream_bot/__init__.py b/nonebot_plugin_tsugu_bangdream_bot/__init__.py index a88ab2a..0d75562 100644 --- a/nonebot_plugin_tsugu_bangdream_bot/__init__.py +++ b/nonebot_plugin_tsugu_bangdream_bot/__init__.py @@ -31,6 +31,7 @@ player_info, search_card, search_song, + forward_room, search_event, search_gacha, search_lsycx, @@ -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 @@ -129,6 +130,17 @@ 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() @@ -136,21 +148,27 @@ async def _(bot: Bot, event: Event, group: Tuple[Any, ...] = RegexGroup()) -> No 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]) diff --git a/nonebot_plugin_tsugu_bangdream_bot/_commands.py b/nonebot_plugin_tsugu_bangdream_bot/_commands.py index 31b2188..9834a2d 100644 --- a/nonebot_plugin_tsugu_bangdream_bot/_commands.py +++ b/nonebot_plugin_tsugu_bangdream_bot/_commands.py @@ -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( diff --git a/nonebot_plugin_tsugu_bangdream_bot/config.py b/nonebot_plugin_tsugu_bangdream_bot/config.py index ad33e8c..e0279b4 100644 --- a/nonebot_plugin_tsugu_bangdream_bot/config.py +++ b/nonebot_plugin_tsugu_bangdream_bot/config.py @@ -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""" diff --git a/pyproject.toml b/pyproject.toml index d920e1e..352f93b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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 = "qwertyuiop2333@hotmail.com"},