# 深入 Application(应用) 机制
在 python-mirai 中, 与无头客户端的交互主要由应用类 Mirai 暴露出的 API 完成,
这些 API 作为方法, 将输入的参数序列化后发往无头客户端以完成一次操作.
接下来, 我们将深入其 API, 并一一讲解.
TIP
在实际的代码中, Mirai 其实继承了 MiraiProtocol,
通过操作其暴露出的各式方法, 来完成一系列的操作.
你可以在 mirai.protocol 内找到 MiraiProtocol 的定义.
# 消息处理
目前, 我们支持两种消息类型的发送, 即 FriendMessage 和 GroupMessage.
# 发送群消息
Coroutine Mirai.sendGroupMessage
- 描述: 发送消息到指定目标群
- 警告: 当机器人被禁言时调用该方法, 将不会有消息发出, 同时可能抛出错误(
mirai.exceptions.NetworkError) - 参数列表:
group: Union[Group, int]: 发送消息目标群message- 可为以下类型的其中一种(
Union):MessageChain<? extend BaseMessageComponent>List[<? extend BaseMessageComponent>]str
- 可为以下类型的其中一种(
quoteSource: Optional[Union[Source, int]]: 指定回复的消息
- 返回值:
BotMessage(mirai.message.types.BotMessage) - 可能抛出的错误:
ValueError: 没有找到目标群, 无法发送EnvironmentError: 检查检查实例化Mirai时填入的信息ConnectionRefusedError: 尝试重启PermissionError: 权限不足RuntimeError: 序列化失败, 尝试联系开发者
- 样例:
await app.sendGroupMessage( 123456789, [Plain(text="发送了一条群消息")] )1
2
3
4
# 发送好友消息
Coroutine Mirai.sendFriendMessage
- 描述: 发送消息到指定目标好友
- 参数列表:
friend: Union[Friend, int]: 发送消息目标好友message- 可为以下类型的其中一种(
Union):MessageChain<? extend BaseMessageComponent>List[<? extend BaseMessageComponent>]str
- 可为以下类型的其中一种(
- 返回值:
BotMessage(mirai.message.types.BotMessage) - 可能抛出的错误:
ValueError: 没有找到目标好友, 无法发送EnvironmentError: 检查检查实例化Mirai时填入的信息ConnectionRefusedError: 你可以尝试重启应用PermissionError: 权限不足RuntimeError: 序列化失败, 尝试联系开发者
- 样例:
await app.sendFriendMessage( 123456789 [Plain(text="这是一条好友消息")] )1
2
3
4
# 撤回消息
Coroutine Mirai.revokeMessage
- 描述: 撤回自己或者群员的信息(需要管理员/群主权限)
- 参数列表:
source: T.Union[Source, int]: 需要撤回的目标消息
- 返回值:
bool - 可能抛出的错误:
ValueError: 无法找到指定目标PermissionError: 权限不足EnvironmentError: 检查检查实例化Mirai时填入的信息ConnectionRefusedError: 你可以尝试重启应用RuntimeError: 序列化失败, 尝试联系开发者
# 信息获取
# 获取机器人账号加入的群组
Coroutine Mirai.groupList
- 警告: 若你在实例化
Mirai时未显式传入参数cache_groups的值, 则不需要通过调用该API再次抓取群组列表, 请通过Mirai.cached_groups访问已经被缓存的群, 这是一个Dict[int, Group], 妥善使用. - 参数列表: 不需要传入参数
- 返回值:
List[Group]
# 获取机器人账号所拥有的好友
Coroutine Mirai.friendList
- 警告: 若你在实例化
Mirai时未显式传入参数cache_friends的值, 则不需要通过调用该API再次抓取群组列表, 请通过Mirai.cached_friends访问已经被缓存的群, 这是一个Dict[int, Friend], 妥善使用. - 参数列表: 不需要传入参数
- 返回值:
List[Friend]
# 获取特定群组的成员列表
Coroutine Mirai.memberList
- 参数列表:
target: int: 群组的群号
- 返回值:
List[Member]
# 获取特定群组的成员数量
Coroutine Mirai.groupMemberNumber
- 参数列表:
target: int: 群组的群号
- 返回值:
int
# 从已缓存的群组列表中获取 Group 对象
Mirai.getGroup
- 参数列表:
target: int: 群组的群号
- 返回值:
Optional[Group]
# 从已缓存的好友列表中获取 Friend 对象
Mirai.getFriend
- 参数列表:
target: int: 好友的QQ号
- 返回值:
Optional[Friend]
# 缓存群组列表
Coroutine Mirai.cacheBotGroups
- 描述: 若在实例化时没有设置缓存, 则从无头客户端处拉取群组列表
- 参数列表: 不需要传入参数
- 返回值: 无返回值
# 缓存好友列表
Coroutine Mirai.cacheBotFriends
- 描述: 若在实例化时没有设置缓存, 则从无头客户端处拉取好友列表
- 参数列表: 不需要传入参数
- 返回值: 无返回值
# 强制刷新群组列表缓存
Coroutine Mirai.refreshBotGroupsCache
- 描述: 强制刷新群组列表, 无论是否已经缓存
- 参数列表: 不需要传入参数
- 返回值:
List[Group]
# 强制刷新好友列表缓存
Coroutine Mirai.refreshBotFriendsCache
- 描述: 强制刷新好友列表, 无论是否已经缓存
- 参数列表: 不需要传入参数
- 返回值:
List[Friend]
# 群管理
WARNING
此部分的绝大多数内容需要机器人账号具有管理员甚至群主级的权限,
若你的程序抛出 PermissionError, 请先检查机器人账号的权限,
若仍存在该问题, 请在主项目 python-mirai 处新增一个 ISSUE.
# 全体禁言
Coroutine Mirai.muteAll
- 描述: 在指定群组处启用全体禁言
- 参数列表:
target: int: 要操作的群号
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
# 取消全体禁言
Coroutine Mirai.unmuteAll
- 描述: 在指定群组处启用全体禁言
- 参数列表:
target: int: 要操作的群号
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
# 获取群员信息
Coroutine Mirai.memberInfo
- 描述: 获取指定群组内指定群员的信息
- 参数列表:
group: Union[Group, int]: 指定群组member: Union[Member, int]: 指定群员
- 返回值:
MemberChangeableSetting - 权限限制: 无
# 修改群员信息
Coroutine Mirai.changeMemberInfo
- 描述: 修改群成员的信息(特殊头衔, 群名片)
- 参数列表:
group: Union[Group, int]: 目标群组member: Union[Member, int]: 目标成员info: MemberChangeableSetting: 要加以修改的设置
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator): 仅能更改群名片 - 群主(
Permission.Owner): 可设置特殊头衔与群名片 - 修改自身: 仅能更改群名片
- 管理员(
- 温馨提示: 因为 pydantic 无法不将值为
null的键忽略, 所以请先使用获取群员信息的接口, 并通过MemberChangeableSetting.modify更改其属性再提交.
# 获取机器人的群成员信息
Coroutine Mirai.botMemberInfo
- 描述: 获取机器人账号在目标群的成员信息
- 参数列表:
group: Union[Group, int]: 目标群组
- 返回值:
MemberChangeableSetting
# 获取群设置
Coroutine Mirai.groupConfig
- 描述: 获取指定群的设置
- 参数列表:
group: Union[Group, int]: 目标群组
- 返回值:
GroupSetting
# 修改群设置
Coroutine Mirai.changeGroupConfig
- 描述: 修改群成员的信息(特殊头衔, 群名片)
- 参数列表:
group: Union[Group, int]: 目标群组config: GroupSetting: 要加以修改的设置
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
- 温馨提示: 因为 pydantic 无法不将值为
null的键忽略, 所以请先使用获取群设置的接口, 并通过GroupSetting.modify更改其属性再提交.
# 禁言群成员
Coroutine Mirai.mute
- 描述: 禁言群成员
- 参数列表:
group: Union[Group, int]: 目标群组member: Union[Member, int]: 目标成员time: Union[timedelta, int]: 禁言时长
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
- 温馨提示:
- 由于客观原因, 你只能设置参数
time为一个 "所直接表现值小于 30 天 并且大于 1 分钟的值",
若其直接表现值大于 30 天, 将只会禁言该成员 30 天,
若其直接表现值小于 1 分钟, 将只会禁言该成员 1 分钟. - 由于客观原因, 导致管理员无法禁言群主及其他管理员, 此时会抛出
PermissionError, 请注意.
- 由于客观原因, 你只能设置参数
# 取消禁言
Coroutine Mirai.unmute
- 描述: 取消之前对指定群成员的禁言
- 参数列表:
group: Union[Group, int]: 目标群组member: Union[Member, int]: 目标成员
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
- 温馨提示:
- 由于客观原因, 导致管理员无法解禁由群主禁言的管理员或是自己, 此时会抛出
PermissionError, 请注意.
- 由于客观原因, 导致管理员无法解禁由群主禁言的管理员或是自己, 此时会抛出
# 将成员从群组中删除
Coroutine Mirai.kick
- 描述: 将指定群成员从群组中删除
- 参数列表:
group: Union[Group, int]: 目标群组member: Union[Member, int]: 目标成员
- 返回值: 返回值无意义(
bool) - 权限限制:
- 管理员(
Permission.Administrator) - 群主(
Permission.Owner)
- 管理员(
- 温馨提示:
- 由于客观原因, 导致管理员无法踢出其他管理员及群主, 此时会抛出
PermissionError, 请注意.
- 由于客观原因, 导致管理员无法踢出其他管理员及群主, 此时会抛出