Ariadne 总览🔗
关于使用 "模型" 的提示🔗
Group Friend Member Stranger 四个类型支持 __int__ 协议获取其 id 属性.
也就是说, int(group) 等价于 group.id .
Group Friend Member 上还有 get_info modify_info get_profile modify_admin get_config modify_config send_message 等方便方法.
Member.send_temp_message 名字的不同是刻意为之的, 因为贸然使用临时消息非常容易导致风控. 谨慎使用.
MemberPerm 支持富比较操作, 也就是说你可以通过 Member.permission >= MemberPerm.Administrator 判断成员是否有管理权限.
你 不应该也不被允许 自行实例化 Group Friend Member Stranger 类型.
某些事件的额外方法🔗
RequestEvent
带有一些额外方法, 如 accept reject ignore 等, 直接在其上使用 await 即可.
生命周期管理🔗
launch_blocking() 用于启动 Ariadne 实例, stop() 用于停止 Ariadne 实例.
交互方法🔗
Ariadne 与 QQ 进行交互的方法遵循以下原则:
- 使用
snake_case小写 + 下划线的函数名. - 使用
谓词 + 名词命名. - 注: 获取数据的方法统一以
get开头. - 为
async异步函数.
其他的信息你应该可以从 doc string 里得到.
API 文档指路: [graia.ariadne][]
获取实例所管账号🔗
Ariadne 通过一个只读属性 account 来帮助用户获取当前机器人实例的 QQ 号
account = app.account
方便的消息发送方法 - send_message🔗
这个方法其实不如直接在 Group Friend Member 上使用 send_message 更方便, 但是你可以使用 action.
send_message 有一个限制: 只能从传入对象推断 (不能直接传入 int 格式的 target)
但是它可以智能地从传入对象推断: Friend Group Member MessageEvent 这四个都是合适的传入对象.
Friend 发送好友消息, Group 发送群组消息, 而 Member 发送临时私聊消息.
MessageEvent 则会推断是 GroupMessage, FriendMessage 还是 TempMessage, 并自动发给对应的对象.
同时, 在向 target 传入消息事件时, quote 可以简单地传入 True 以达到引用回复的效果.
quote 也接受 Source 与 MessageChain 对象.
send_message 的 action🔗
sendMessage 可以携带一个 action 参数,
它是一个 graia.ariadne.typing.SendMessageAction 对象, 需要实现以下方法:
-
param: 处理传入的数据并进行加工 (可用于自动携带At等消息元素) -
result: 成功发送时调用, 作为最终返回用户的数据. -
exception: 发送时发生异常则会调用, 作为最终返回用户的数据.
Ariadne 在 graia.ariadne.util.send 内建了以下 SendMessageAction, 直接传入这些类即可.
-
Strict: 发生异常时自动引发. (默认) -
Bypass: 发生异常时返回异常对象, 注意异常重生的问题. -
Ignore: 发生异常时返回None. -
Safe: 在第一次尝试失败后先移除quote, 之后每次失败时按顺序替换元素为其asDisplay:AtAll,At,Poke,Forward,MultimediaElement若最后还是失败 (AccountMuted等), 则会引发原始异常 (通过传入ignore决定)
下面是示例:
from graia.ariadne.util.send import Strict, Bypass, Ignore, Safe
act = Strict or Bypass or Ignore or Safe or Safe(ignore=False) or Safe(ignore=True) # 看你怎么选择
await app.send_message(origin, message_chain, action=act)
设置默认 action🔗
Ariadne 实例的默认 action 是 Strict, 你可以通过 Ariadne.default_send_action 属性透明地修改.