nonebot-bison/tests/utils.py
suyiiyii d6205867b8
无权限用户尝试添加订阅时返回提示信息 (#617)
*  无权限用户尝试添加订阅时返回提示信息

*  添加no_permission_matcher相关的单元测试

* 🐛 优化无权限提示的排版

* 🐛 移除没有必要的命令
2024-09-01 22:32:47 +08:00

162 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import TYPE_CHECKING, Literal, TypedDict
from nonebot.compat import PYDANTIC_V2, ConfigDict
if TYPE_CHECKING:
from nonebot.adapters.onebot.v11 import GroupMessageEvent, PrivateMessageEvent
class AppReq(TypedDict, total=False):
refresh_bot: bool
no_init_db: bool
def fake_group_message_event(**field) -> "GroupMessageEvent":
from pydantic import create_model
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent
_Fake = create_model("_Fake", __base__=GroupMessageEvent)
class FakeEvent(_Fake):
time: int = 1000000
self_id: int = 1
post_type: Literal["message"] = "message"
sub_type: str = "normal"
user_id: int = 10
message_type: Literal["group"] = "group"
group_id: int = 10000
message_id: int = 1
message: Message = Message("test")
raw_message: str = "test"
font: int = 0
sender: Sender = Sender(
card="",
nickname="test",
role="member",
)
to_me: bool = False
if PYDANTIC_V2:
model_config = ConfigDict(extra="forbid")
else:
class Config:
extra = "forbid"
return FakeEvent(**field)
def fake_private_message_event(**field) -> "PrivateMessageEvent":
from pydantic import create_model
from nonebot.adapters.onebot.v11.event import Sender
from nonebot.adapters.onebot.v11 import Message, PrivateMessageEvent
_Fake = create_model("_Fake", __base__=PrivateMessageEvent)
class FakeEvent(_Fake):
time: int = 1000000
self_id: int = 1
post_type: Literal["message"] = "message"
sub_type: str = "friend"
user_id: int = 10
message_type: Literal["private"] = "private"
message_id: int = 1
message: Message = Message("test")
raw_message: str = "test"
font: int = 0
sender: Sender = Sender(nickname="test")
to_me: bool = False
if PYDANTIC_V2:
model_config = ConfigDict(extra="forbid")
else:
class Config:
extra = "forbid"
return FakeEvent(**field)
from nonebot.adapters.onebot.v11.event import Sender
fake_admin_user = Sender(nickname="test", role="admin")
fake_superuser = Sender(user_id=10001, nickname="superuser")
add_reply_on_id_input_search = (
"https://nonebot-bison.netlify.app/usage/#%E6%89%80%E6%94%AF%E6%8C%81%E5%B9%B3%E5%8F%B0%E7%9A%84-uid"
)
class BotReply:
@staticmethod
def add_reply_on_platform(platform_manager, common_platform):
return (
"请输入想要订阅的平台,目前支持,请输入冒号左边的名称:\n"
+ "".join(
[f"{platform_name}: {platform_manager[platform_name].name}\n" for platform_name in common_platform]
)
+ "要查看全部平台请输入:“全部”\n中止订阅过程请输入:“取消”"
)
@staticmethod
def add_reply_on_platform_input_allplatform(platform_manager):
return "全部平台\n" + "\n".join(
[f"{platform_name}: {platform.name}" for platform_name, platform in platform_manager.items()]
)
@staticmethod
def add_reply_on_id_input_search_ob11():
from nonebot.adapters.onebot.v11 import MessageSegment
search_title = "Bison所支持的平台UID"
search_content = "查询相关平台的uid格式或获取方式"
search_image = "https://s3.bmp.ovh/imgs/2022/03/ab3cc45d83bd3dd3.jpg"
return MessageSegment.share(
url=add_reply_on_id_input_search,
title=search_title,
content=search_content,
image=search_image,
)
@staticmethod
def add_reply_on_target_confirm(platform, name, id):
return f"即将订阅的用户为:{platform} {name} {id}\n如有错误请输入“取消”重新订阅"
@staticmethod
def add_reply_on_cats(platform_manager, platform: str):
return (
"请输入要订阅的类别,以空格分隔,"
f"支持的类别有:{' '.join(list(platform_manager[platform].categories.values()))}"
)
@staticmethod
def add_reply_on_cats_input_error(cat: str):
return f"不支持 {cat}"
@staticmethod
def add_reply_subscribe_success(name):
return f"添加 {name} 成功"
@staticmethod
def add_reply_on_id(platform: object) -> str:
target_promot: str = platform.parse_target_promot # type: ignore
base_text = "请输入订阅用户的id\n查询id获取方法请回复:“查询”"
extra_text = ("1." + target_promot + "\n2.") if target_promot else ""
return extra_text + base_text
@staticmethod
def add_reply_platform_unavailable(platform: str, reason: str) -> str:
return f"无法订阅 {platform}{reason}"
add_reply_on_id_input_error = "id输入错误"
add_reply_on_target_parse_input_error = "不能从你的输入中提取出id请检查你输入的内容是否符合预期"
add_reply_on_platform_input_error = "平台输入错误"
add_reply_on_tags = (
'请输入要订阅/屏蔽的标签(不含#号)\n多个标签请使用空格隔开\n订阅所有标签输入"全部标签"\n具体规则回复"详情"'
)
add_reply_on_tags_need_more_info = "订阅标签直接输入标签内容\n屏蔽标签请在标签名称前添加~号\n详见https://nonebot-bison.netlify.app/usage/#%E5%B9%B3%E5%8F%B0%E8%AE%A2%E9%98%85%E6%A0%87%E7%AD%BE-tag"
add_reply_abort = "已中止订阅"
no_permission = "您没有权限进行此操作,请联系 Bot 管理员"