import json
from typing_extensions import Any, Iterable, Literal, Optional, TypedDict
from melobot.adapter import Action as RootAction
from melobot.handle import try_get_event
from ..const import PROTOCOL_IDENTIFIER
from .segment import NodeSegment, Segment, TextSegment
[文档]
class Action(RootAction):
[文档]
def __init__(self, type: str, params: dict[str, Any]) -> None:
self.time: int
super().__init__(protocol=PROTOCOL_IDENTIFIER, trigger=try_get_event())
self.type = type
self.params = params
self.need_echo = False
def __repr__(self) -> str:
return f"{self.__class__.__name__}(type={self.type}, echo={self.need_echo})"
[文档]
def set_echo(self, status: bool) -> None:
self.need_echo = status
[文档]
def flatten(self) -> str:
return json.dumps(self.extract(), ensure_ascii=False)
def msgs_to_dicts(
msgs: str | Segment | Iterable[Segment] | dict | Iterable[dict],
) -> list[dict]:
if isinstance(msgs, str):
return [TextSegment(msgs).to_dict(force_str=True)]
if isinstance(msgs, Segment):
return [msgs.to_dict(force_str=True)]
if isinstance(msgs, dict):
return [msgs]
return [msg.to_dict(force_str=True) if isinstance(msg, Segment) else msg for msg in msgs]
[文档]
class SendMsgAction(Action):
[文档]
def __init__(
self,
msgs: str | Segment | Iterable[Segment] | dict | Iterable[dict],
user_id: Optional[int] = None,
group_id: Optional[int] = None,
) -> None:
type = "send_msg"
_msgs = msgs_to_dicts(msgs)
if group_id is None:
assert user_id is not None, "group_id 为空时,user_id 必须为非空"
params = {
"message_type": "private",
"user_id": user_id,
"message": _msgs,
"auto_escape": False,
}
else:
params = {
"message_type": "group",
"group_id": group_id,
"message": _msgs,
"auto_escape": False,
}
super().__init__(type, params)
[文档]
class SendForwardMsgAction(Action):
[文档]
def __init__(
self,
msgs: Iterable[NodeSegment] | Iterable[dict],
user_id: Optional[int] = None,
group_id: Optional[int] = None,
) -> None:
_msgs = msgs_to_dicts(msgs)
if group_id is None:
type = "send_private_forward_msg"
params = {"user_id": user_id, "messages": _msgs, "auto_escape": False}
else:
type = "send_group_forward_msg"
params = {"group_id": group_id, "messages": _msgs, "auto_escape": False}
super().__init__(type, params)
[文档]
class DeleteMsgAction(Action):
[文档]
def __init__(self, msg_id: int) -> None:
type = "delete_msg"
params = {
"message_id": msg_id,
}
super().__init__(type, params)
[文档]
class GetMsgAction(Action):
[文档]
def __init__(self, msg_id: int) -> None:
type = "get_msg"
params = {"message_id": msg_id}
super().__init__(type, params)
[文档]
class GetForwardMsgAction(Action):
[文档]
def __init__(self, forward_id: str) -> None:
type = "get_forward_msg"
params = {"id": forward_id}
super().__init__(type, params)
[文档]
class SendLikeAction(Action):
[文档]
def __init__(self, user_id: int, times: int = 1) -> None:
type = "send_like"
params = {"user_id": user_id, "times": times}
super().__init__(type, params)
[文档]
class SetGroupKickAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, later_reject: bool = False) -> None:
type = "set_group_kick"
params = {
"group_id": group_id,
"user_id": user_id,
"reject_add_request": later_reject,
}
super().__init__(type, params)
[文档]
class SetGroupBanAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, duration: int = 30 * 60) -> None:
type = "set_group_ban"
params = {
"group_id": group_id,
"user_id": user_id,
"duration": duration,
}
super().__init__(type, params)
[文档]
class SetGroupAnonymousBanAction(Action):
[文档]
class AnonymousDict(TypedDict):
id: int
name: str
flag: str
[文档]
def __init__(
self,
group_id: int,
anonymous: AnonymousDict,
anonymous_flag: str,
duration: int = 30 * 60,
) -> None:
type = "set_group_anonymous_ban"
params = {
"group_id": group_id,
"anonymous": anonymous,
"anonymous_flag": anonymous_flag,
"duration": duration,
}
super().__init__(type, params)
[文档]
class SetGroupWholeBanAction(Action):
[文档]
def __init__(self, group_id: int, enable: bool = True) -> None:
type = "set_group_whole_ban"
params = {"group_id": group_id, "enable": enable}
super().__init__(type, params)
[文档]
class SetGroupAdminAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, enable: bool = True) -> None:
type = "set_group_admin"
params = {"group_id": group_id, "user_id": user_id, "enable": enable}
super().__init__(type, params)
[文档]
class SetGroupAnonymousAction(Action):
[文档]
def __init__(self, group_id: int, enable: bool = True) -> None:
type = "set_group_anonymous"
params = {"group_id": group_id, "enable": enable}
super().__init__(type, params)
[文档]
class SetGroupCardAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, card: str = "") -> None:
type = "set_group_card"
params = {"group_id": group_id, "user_id": user_id, "card": card}
super().__init__(type, params)
[文档]
class SetGroupNameAction(Action):
[文档]
def __init__(self, group_id: int, name: str) -> None:
type = "set_group_name"
params = {"group_id": group_id, "group_name": name}
super().__init__(type, params)
[文档]
class SetGroupLeaveAction(Action):
[文档]
def __init__(self, group_id: int, is_dismiss: bool = False) -> None:
type = "set_group_leave"
params = {"group_id": group_id, "is_dismiss": is_dismiss}
super().__init__(type, params)
[文档]
class SetGroupSpecialTitleAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, title: str = "", duration: int = -1) -> None:
type = "set_group_special_title"
params = {
"group_id": group_id,
"user_id": user_id,
"special_title": title,
"duration": duration,
}
super().__init__(type, params)
[文档]
class SetFriendAddRequestAction(Action):
[文档]
def __init__(self, add_flag: str, approve: bool = True, remark: str = "") -> None:
type = "set_friend_add_request"
params = {"flag": add_flag, "approve": approve, "remark": remark}
super().__init__(type, params)
[文档]
class SetGroupAddRequestAction(Action):
[文档]
def __init__(
self,
add_flag: str,
add_type: Literal["add", "invite"],
approve: bool = True,
reason: str = "",
) -> None:
type = "set_group_add_request"
params = {
"flag": add_flag,
"sub_type": add_type,
"approve": approve,
}
if reason:
self.params["reason"] = reason
super().__init__(type, params)
[文档]
class GetLoginInfoAction(Action):
[文档]
def __init__(self) -> None:
type = "get_login_info"
params: dict = {}
super().__init__(type, params)
[文档]
class GetStrangerInfoAction(Action):
[文档]
def __init__(self, user_id: int, no_cache: bool = False) -> None:
type = "get_stranger_info"
params = {"user_id": user_id, "no_cache": no_cache}
super().__init__(type, params)
[文档]
class GetFriendlistAction(Action):
[文档]
def __init__(self) -> None:
type = "get_friend_list"
params: dict = {}
super().__init__(type, params)
[文档]
class GetGroupInfoAction(Action):
[文档]
def __init__(self, group_id: int, no_cache: bool = False) -> None:
type = "get_group_info"
params = {"group_id": group_id, "no_cache": no_cache}
super().__init__(type, params)
[文档]
class GetGrouplistAction(Action):
[文档]
def __init__(self) -> None:
type = "get_group_list"
params: dict = {}
super().__init__(type, params)
[文档]
class GetGroupMemberInfoAction(Action):
[文档]
def __init__(self, group_id: int, user_id: int, no_cache: bool = False) -> None:
type = "get_group_member_info"
params = {"group_id": group_id, "user_id": user_id, "no_cache": no_cache}
super().__init__(type, params)
[文档]
class GetGroupMemberlistAction(Action):
[文档]
def __init__(self, group_id: int) -> None:
type = "get_group_member_list"
params = {"group_id": group_id}
super().__init__(type, params)
[文档]
class GetGroupHonorInfoAction(Action):
[文档]
def __init__(
self,
group_id: int,
type: Literal["talkative", "performer", "legend", "strong_newbie", "emotion", "all"],
) -> None:
_type = "get_group_honor_info"
params = {"group_id": group_id, "type": type}
super().__init__(_type, params)
[文档]
class GetCookiesAction(Action):
[文档]
def __init__(self, domain: str = "") -> None:
type = "get_cookies"
params = {"domain": domain}
super().__init__(type, params)
[文档]
class GetCsrfTokenAction(Action):
[文档]
def __init__(self) -> None:
type = "get_csrf_token"
params: dict = {}
super().__init__(type, params)
[文档]
class GetCredentialsAction(Action):
[文档]
def __init__(self, domain: str = "") -> None:
type = "get_credentials"
params = {"domain": domain}
super().__init__(type, params)
[文档]
class GetRecordAction(Action):
[文档]
def __init__(self, file: str, out_format: str) -> None:
type = "get_record"
params = {"file": file, "out_format": out_format}
super().__init__(type, params)
[文档]
class GetImageAction(Action):
[文档]
def __init__(self, file: str) -> None:
type = "get_image"
params = {"file": file}
super().__init__(type, params)
[文档]
class CanSendImageAction(Action):
[文档]
def __init__(self) -> None:
type = "can_send_image"
params: dict = {}
super().__init__(type, params)
[文档]
class CanSendRecordAction(Action):
[文档]
def __init__(self) -> None:
type = "can_send_record"
params: dict = {}
super().__init__(type, params)
[文档]
class GetStatusAction(Action):
[文档]
def __init__(self) -> None:
type = "get_status"
params: dict = {}
super().__init__(type, params)
[文档]
class GetVersionInfoAction(Action):
[文档]
def __init__(self) -> None:
type = "get_version_info"
params: dict = {}
super().__init__(type, params)
[文档]
class SetRestartAction(Action):
[文档]
def __init__(self, delay: int = 0) -> None:
type = "set_restart"
params = {"delay": delay}
super().__init__(type, params)
[文档]
class CleanCacheAction(Action):
[文档]
def __init__(self) -> None:
type = "clean_cache"
params: dict = {}
super().__init__(type, params)