事件响应器
事件响应 器(Matcher)是用于对接收到的事件进行响应的重要工具。通过定义简单的规则,事件响应器可以帮助你捕获特定类型的事件,并执行相应的操作。
在插件开发中,事件响应器是用来捕获并处理特定类型的事件的工具。它会检查事件是否满足一些条件,如果满足,就会触发预先定义的操作。这是插件与用户交互的基础。
事件响应器辅助函数
在 KiramiBot 中,我们提供了许多方便的工具,称为“事件响应器辅助函数”,来帮助你更轻松地创建事件响应器。这些辅助函数不仅简化了代码编写的过程,还提高了代码的可读性。
你可以直接从 kirami
模块中导入并使用这些辅助函数,它们能帮助你简单地创建不同类型的事件响应器,而无需手动编写复杂的代码。
接下来,我们将详细介绍这些辅助函数,并展示如何使用它们来创建你所需的事件响应器。无论你是否有编程经验,这些工具都能够帮助你更轻松地开发插件,让你专注于功能实现而不是纠结于代码细节。
创建事件响应器
在上一节创建插件中,我们创建了一个 weather
插件,现在我们来实现他的功能。
我们直接使用 on_prefix()
辅助函数来创建一个事件响应器:
from kirami import on_prefix
weather = on_prefix("天气")
这样,我们就获得一个名为 weather
的事件响应器了,这个事件响应器会对 天气
开头的消息进行响应。
如果一条消息中包含“@机器人”或以“机器人的昵称”开头,例如 @bot 天气
时,为了方便命令匹配,@bot
会被自动去除,即事件响应器收到的信息内容为 天气
。
同时,event.is_tome()
将会返回 True
,表示该事件与机器人相关。
为事件响应器添加参数
在辅助函数中,我们可以添加一些参数来更精细地调整事件响应器的行为。例如:
from kirami import on_prefix
weather = on_prefix("天气", "weather", "查天气", to_me=True)
在上述代码中,我们在 on_prefix
辅助函数中添加了两个命令,并将 to_me
设置为 True
。
这样,我们就获得了一个可以响应 天气
、weather
、查天气
三个命令,同时需要私聊或在消息中 @bot 时才会响应的事件响应器。
需要注意的是,不同的辅助函数有不同的可选参数。在使用辅助函数之前,你可以参考编辑器的提示,以了解不同函数的可选参数。
常用辅助函数
通过导入不同的辅助函数,你可以轻松创建不 同类型的事件响应器。接下来,我们将介绍一些常用的辅助函数,让你更好地掌握它们的用法。
你可以尝试使用下列的示例代码创建插件,亲身体验一下这些辅助函数的用法。
on_message
on_message
是一个消息事件响应器,它会响应所有消息事件。
from kirami import on_message
from kirami.typing import Matcher
@on_message()
async def _(matcher: Matcher):
await matcher.finish("on_message!")
on_notice
on_notice
是一个通知事件响应器,它会响应所有通知事件。
from kirami import on_notice
from kirami.typing import Matcher
@on_notice()
async def _(matcher: Matcher):
await matcher.finish("on_notice!")
on_request
on_request
是一个请求事件响应器,它会响应所有请求事件。
from kirami import on_request
from kirami.typing import Matcher
@on_request()
async def _(matcher: Matcher):
await matcher.finish("on_request!")
on_command
on_command
是一个消息事件响应器,它会响应所有以指定命令开头的消息事件。
on_command
受到配置项中的 command_start
的影响,需要在命令前额外加上 command_start
才能触发响应。
默认配置下,on_command
只会对以 /
和空命令头开头的消息事件进行响应。
from kirami import on_command
from kirami.typing import Matcher
# 响应所有以 "command" 开头的消息事件
@on_command("command")
async def _(matcher: Matcher):
await matcher.finish("on_command!")
on_shell_command
on_shell_command
是一个消息事件响应器,它会响应所有以指定命令开头的消息事件,并且支持 shell_like
解析参数。
ArgumentParser
参考文档: argparse
on_shell_command
受到配置项中的 command_start
的影响,需要在命令前额外加上 command_start
才能触发响应。
默认配置下,on_shell_command
只会对以 /
和空命令头开头的消息事件进行响应。
from kirami import on_shell_command
from kirami.rule import ArgumentParser
from kirami.typing import Matcher
# 创建一个参数解析器
parser = ArgumentParser()
parser.add_argument("arg", type=str, help="arg help")
# 响应所有以 "shell" 开头的消息事件
@on_shell_command("shell", parser=parser)
async def _(matcher: Matcher):
await matcher.finish("on_shell_command!")
on_startswith
on_startswith
是一个消息事件响应器,它会响应所有以指定内容开头的消息事件。
from kirami import on_startswith
from kirami.typing import Matcher
# 响应所有以 "start" 开头的消息事件
@on_startswith("start")
async def _(matcher: Matcher):
await matcher.finish("on_startswith!")
on_endswith
on_endswith
是一个消息事件响应器,它会响应所有以指定内容结尾的消息事件。
from kirami import on_endswith
from kirami.typing import Matcher
# 响应所有以 "end" 结尾的消息事件
@on_endswith("end")
async def _(matcher: Matcher):
await matcher.finish("on_endswith!")
on_fullmatch
on_fullmatch
是一个消息事件响应器,它会响应所有与指定内容完全一致的消息事件。
from kirami import on_fullmatch
from kirami.typing import Matcher
# 响应所有完全匹配 "full" 的消息事件
@on_fullmatch("full")
async def _(matcher: Matcher):
await matcher.finish("on_fullmatch!")
on_keyword
on_keyword
是一个消息事件响应器,它会响应所有包含指定内容的消息事件。
from kirami import on_keyword
from kirami.typing import Matcher
# 响应所有包含 "key" 的消息事件
@on_keyword("key")
async def _(matcher: Matcher):
await matcher.finish("on_keyword!")
on_regex
on_regex
是一个消息事件响应器,它会响应所有匹配指定正则表达式的消息事件。
from kirami import on_regex
from kirami.typing import Matcher
# 响应所有匹配 "regex" 的消息事件
@on_regex(r"regex")
async def _(matcher: Matcher):
await matcher.finish("on_regex!")
on_prefix
on_prefix
是一个消息事件响应器,它会响应所有以指定内容开头的消息事件。
与普通的 on_startswith
不同的是,on_prefix
会将匹配的开头从消息中去除。
from kirami import on_prefix
from kirami.typing import Matcher
# 响应所有以 "prefix" 开头的消息事件
@on_prefix("prefix")
async def _(matcher: Matcher):
await matcher.finish("on_prefix!")
on_suffix
on_suffix
是一个消息事件响应器,它会响应所有以指定内容结尾的消息事件。
与普通的 on_endswith
不同的是,on_suffix
会将匹配的结尾从消息中去除。
from kirami import on_suffix
from kirami.typing import Matcher
# 响应所有以 "suffix" 结尾的消息事件
@on_suffix("suffix")
async def _(matcher: Matcher):
await matcher.finish("on_suffix!")
on_time
on_time
是一个定时事件响应器,它会在指定时间到达时响应。
on_time
无法使用 Matcher
对象直接发送消息,因为它是由 Bot 自身事件触发,而不是外部事件。
from kirami import on_time
# 每隔 10 秒响应一次
@on_time("interval", seconds=10)
async def _():
print("on_time!")