在 khl.py 中,指令的第一个参数固定是 TextMsg
类型,这个 TextMsg 代表着用户触发指令的那条消息:
- 比如我们在 ex01 中用到的
!hello
- 还有 ex03 中的
!roll 1 100
- 这些消息都会被包装成
TextMsg
类型,传递给指令
有来就有往,既然用户给我们发消息了,那很自然的,我们也经常需要把指令的运行结果用消息发送给用户
khl.py 也为大家包装好了一些发送消息的便利方法,这些便利方法就像菜盘一样,一个好看的菜盘装菜,肯定是要香的:
在 TextMsg
中有一系列的 reply_xxxx()
方法:
reply()
: 对应客户端中的「回复」功能,最简单、最直接、最好用的回复方法reply_temp()
: temp 代表这是给用户回复一个「临时消息」- 问:临时消息是个啥?
- 答:临时消息是开黑啦特有的一个功能,有以下特性:
- 在重启客户端、刷新网页后就消失
- 仅特定(可自行指定)的人可见
- 试试就懂了,收到临时消息之后重开下客户端/刷新下网页,你就会发现消息马上就不见
reply_card()
: 给用户回复一个「卡片消息」- 问:卡片消息又是个啥?这菜盘里的新东西好多!
- 答:卡片消息其实只是一种「更好看、更好玩的消息」
- 大家不用急着学,之后会专门讲的,有兴趣的话可以先看看官方文档:卡片消息
reply_card_temp()
: 顾名思义,这就是给用户回复一个临时的卡片消息- 因为这是一个缝合怪方法,所以这里就不再展开了,大家用一用就懂
哎,reply
这个菜盘看起来很能装啊,为啥又来了一个 send
?是不是有点重叠?
其实这两个的使用情景是不同的:
reply
是针对一条特定的消息进行回复,这是一个有明确对象、有依赖关系的动作- 而
send
则是向一个频道进行发送消息,没有指向对象、不需要依赖其他消息
说完了区别,我们来看看怎么用:
send_xxxx()
系列方法其实不在 TextMsg
中,而是在 TextMsg.ctx
中
- 问:多出来的这个
ctx
是什么? - 答:
ctx
是context (上下文)
的缩写,代表了一条TextMsg
所处在的环境ctx
中记录了一些很好用的东西,比如:- 消息所在的频道
channel
- 消息所在的服务器
guild
- 消息的发送者
author
- 消息的接收者
bot
- 注意!bot 是被放在这里的,如果你不使用闭包特性写指令的话,会经常用到这个
- 我们教程都是用闭包特性的,大家不用担心,闭包相关的内容后面也会讲
- 消息所在的频道
讲完了位置,我们来看看咋用:
ctx.send()
: 最简单、最直接、最好用的发消息方法ctx.send_temp()
: 向ctx
发一个临时消息(临时消息的说明请看上面~)- 注意!因为
send
没有指向对象,所以要手动指定临时消息的接收者,这是和reply_temp()
不同的地方
- 注意!因为
ctx.send_card()
: 向ctx
发一个卡片消息(卡片消息的说明请看上面~)ctx.send_card_temp()
: 向ctx
发一个临时卡片消息(同样见上)
大家可以直接看 ex04.py
第 22~32 行,当然也推荐自己动手试试看!只看菜谱不动手的人,等锅都生锈了都学不会做饭