Simple Robot v4.6.0 Help

实现事件

相比较于上一篇的实现 Bot 相关的内容, 实现一个 事件 Event 则会简单的多。

事件 Event 定义

什么是 事件 Event? 在 simbot标准库中定义的 Event 接口就是事件。 我们先来看看 Event 的定义:

/** * 一个 **事件**。 */ public interface Event : IDContainer { public override val id: ID public val time: Timestamp }

可以看到, Event 的接口中约束还是蛮少的:一个唯一标识,以及一个时间戳。

但这并非全部。simbot标准库提供了一些常见的、拥有更进一步含义的事件子类型定义,例如 BotEventChannelEvent 等, 你可以在 API 文档、 或文档章节: 事件 Event 中找到更全面的列举与说明,此处不再赘述。

实现事件

实现一个事件,听上去没有什么难度。

假设:我们有一个事件类型 FooEvent ,它具有一个字符串格式的"事件主体",用来代表一个"名称"。 而后经过思考与调研,我们决定使这个类型实现 ContentEvent, 也就是 "具有一个主体(content )" 的事件类型。

首先,我们来定义这个事件类型的接口:

@STP interface FooEvent : ContentEvent { /** 得到事件的 '主体' */ override suspend fun content(): String // 修改返回类型为字符串 }

然后,我们在内部的某个地方实现它:

internal class FooEventImpl( override val id: ID, // 此事件的 ID val name: String, // 上文提到的用来作为 '事件主体 `content`' 的 '名称' ): FooEvent { /** 假设事件戳就是这个类实例被构建的事件 */ override val time: Timestamp = Timestamp.now() /** 让 '事件主体' 返回 '名称' */ override suspend fun content(): String = name }

至此为止,一个普通且常见的事件类型便实现完成了。

Last modified: 19 September 2024