Bot

一个 Bot. 同时, Bot 也属于一个用户 User。

Bot 是一个活动个体,通过 BotManager 构建而来。 其作为一个 CoroutineScope 来持有自己的协程上下文。

社交关系容器

Bot 会默认实现部分 社交关系容器:ContactsContainer、GroupsContainer、GuildsContainer。 有关它们的信息请参考对应的注释说明。

值得一提的是,Bot 不会默认实现 FriendsContainer, 因为并非所有组件中的 bot 都存在“好友”的概念,取而代之的则是 ContactsContainer。

Author

ForteScarlet

See also

Functions

Link copied to clipboard
abstract suspend override fun cancel(reason: Throwable?): Boolean

关闭此Bot。

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
abstract suspend fun contact(id: ID): Contact?

通过唯一标识获取对应的 Contact 实例。当且仅当因标识对应联系人不存在而导致无法获取时得到null。

Link copied to clipboard
open suspend fun contactCount(): Int

得到当前容器中所有联系人的总数量。

Link copied to clipboard
open fun delay(duration: JavaDuration, runnable: Runnable): DelayableCompletableFuture<Void?>

延时 duration 时间后执行回调函数 runnable,得到一个 DelayableCompletableFuture。

open fun delay(millis: Long, runnable: Runnable): DelayableCompletableFuture<Void?>

延迟 millis 毫秒后执行 runnable,得到一个 DelayableCompletableFuture。

open fun delay(time: Long, timeUnit: TimeUnit, runnable: Runnable): DelayableCompletableFuture<Void?>

延迟时间单位为 timeUnit 的 time 时长后执行 runnable,得到一个 DelayableCompletableFuture。

Link copied to clipboard

延迟 duration 时间后,执行 supplier, 并将 supplier 得到结果通过得到的 DelayableCompletableFuture 向下传递。

open fun <V> delayAndCompute(millis: Long, supplier: Supplier<V>): DelayableCompletableFuture<V>

延迟 millis 毫秒的时长后执行 supplier, 并将 supplier 得到结果通过得到的 DelayableCompletableFuture 向下传递。

open fun <V> delayAndCompute(time: Long, timeUnit: TimeUnit, supplier: Supplier<V>): DelayableCompletableFuture<V>

延迟时间单位为 timeUnit 的 time 时长后执行 supplier, 并将 supplier 得到结果通过得到的 DelayableCompletableFuture 向下传递。

Link copied to clipboard
abstract suspend fun group(id: ID): Group?

通过唯一标识获取这个bot对应的某个群,获取不到则为null。

Link copied to clipboard
open suspend fun groupCount(): Int

得到当前容器中所有群的总数量。

Link copied to clipboard
abstract suspend fun guild(id: ID): Guild?

通过唯一标识获取这个bot对应的某个频道,获取不到则为null。

Link copied to clipboard
open suspend fun guildCount(): Int

得到当前容器中所有频道服务器的总数量。

Link copied to clipboard
open override fun invokeOnCompletion(handler: CompletionHandler)

当完成(或被cancel)时执行一段处理。

Link copied to clipboard
abstract infix fun isMe(id: ID): Boolean

用于检测一个 ID 是否属于当前BOT。一个bot可能会存在多个领域的ID,例如作为bot的client ID和作为user的普通ID。

Link copied to clipboard
abstract suspend override fun join()

让当前bot挂起当前协程直至其被 cancel

Link copied to clipboard
abstract suspend fun resolveImage(id: ID): Image<*>

尝试通过解析一个 ID 并得到对应的可用于发送的图片实例。 这个 Image 不一定是真正远端图片结果,它有可能只是一个预处理类型。 在执行 resolveImage 的过程中也不一定出现真正地挂起行为,具体细节请参考具体实现。

Link copied to clipboard
abstract suspend override fun start(): Boolean

真正的启动这个BOT。 但是已经关闭的 Bot 无法再次 start.

Link copied to clipboard
open fun waiting()

阻塞当前线程并等待 join 的挂起结束。

Properties

Link copied to clipboard
abstract override val avatar: String

这个账户的头像。 这年头了,应该不会有什么聊天平台的用户没有头像信息了吧。

Link copied to clipboard
open override val bot: Bot

当前 Objective 来自的bot。

Link copied to clipboard
open val category: Category?

此用户(对于bot来讲)的"分组"。 通常情况下,FriendInfo 能够支持 "分组" 概念的概率会更大一些, 但是无法保证存在分组概念或支持分组的获取。

Link copied to clipboard
abstract override val component: Component

每个Bot都有一个所属组件。

Link copied to clipboard
abstract val contacts: Items<Contact>

得到当前容器中能够获取到的联系人序列。

Link copied to clipboard
abstract override val coroutineContext: CoroutineContext
Link copied to clipboard

对于一个Bot,其应当存在一个事件处理器。

Link copied to clipboard
abstract val groups: Items<Group>

获取当前bot所处的群聊序列。

Link copied to clipboard
abstract val guilds: Items<Guild>

获取当前的所有频道服务器序列。

Link copied to clipboard
abstract override val id: ID

Bot的唯一标识。此处的唯一标识通常指的是在其所属的 BotManager 中的唯一标识, 而不代表其在对应平台系统内的唯一标识。

Link copied to clipboard
abstract override val isActive: Boolean

是否正在运行,即启动后尚未关闭。

Link copied to clipboard
abstract override val isCancelled: Boolean

是否已经被取消。

Link copied to clipboard

是否支持contacts相关的获取操作。当 contacts 和 contact 都不被支持时得到 false。 默认情况下视其为 true,由实现者重写此属性来决定其可用性。

Link copied to clipboard

是否支持groups相关的获取操作。当 groups 和 group 都不被支持时得到 false。 默认情况下视其为 true,由实现者重写此属性来决定其可用性。

Link copied to clipboard

是否支持guilds相关的获取操作。当 guilds 和 guild 都不被支持时得到 false。 默认情况下视其为 true,由实现者重写此属性来决定其可用性。

Link copied to clipboard
abstract override val isStarted: Boolean

是否已经启动过了。

Link copied to clipboard
abstract override val logger: Logger

当前目标内存在的日志对象。

Link copied to clipboard
abstract val manager: BotManager<out Bot>

每个bot都肯定会由一个 BotManager 进行管理。

Link copied to clipboard
abstract override val username: String

这个账号的用户名。

Inheritors

Link copied to clipboard

Extensions

Link copied to clipboard
fun <A : Application> CoroutineScope.applicationLauncher(create: suspend () -> A): ApplicationLauncher<A>

通过一个协程作用域并提供构建函数来得到一个 ApplicationLauncher 实例。

Link copied to clipboard
inline operator fun UserInfo.component1(): ID

对 UserInfo 的结构解构, 第1个值。相当于 UserInfo.id。

Link copied to clipboard
inline operator fun UserInfo.component2(): String

对 UserInfo 的结构解构, 第2个值。相当于 UserInfo.username。

Link copied to clipboard
inline operator fun UserInfo.component3(): String

对 UserInfo 的结构解构, 第3个值。相当于 UserInfo.avatar。

Link copied to clipboard
inline fun <T> CoroutineScope.effectedFlowItems(crossinline block: suspend FlowCollector<T>.() -> Unit): Items<T>

以构建 Flow 的方式构建 Items.

Link copied to clipboard
inline fun <T> CoroutineScope.effectedItemsByFlow(crossinline flowFactory: () -> Flow<T>): Items<T>

提供 CoroutineScope 和构建 Flow 的函数 flowFactory 来构建 Items.

Link copied to clipboard
inline fun <T> CoroutineScope.flowItems(crossinline block: suspend FlowCollector<T>.(Items.PreprocessingProperties) -> Unit): Items<T>

以构建 Flow 的方式构建 Items.

Link copied to clipboard
infix fun Bot.isNotMe(id: ID): Boolean

Bot.isMe 的取反。

Link copied to clipboard
inline fun <T> CoroutineScope.itemsByFlow(crossinline flowFactory: (Items.PreprocessingProperties) -> Flow<T>): Items<T>

提供 CoroutineScope 和构建 Flow 的函数 flowFactory 来构建 Items.

Link copied to clipboard
fun <T> CoroutineScope.lazyValue(init: Boolean = false, initializer: suspend () -> T): LazyValue<T>
Link copied to clipboard
inline fun <T> CoroutineScope.produceItems(context: CoroutineContext = EmptyCoroutineContext, capacity: Int = 0, crossinline block: suspend ProducerScope<T>.(Items.PreprocessingProperties) -> Unit): Items<T>

通过 produce 构建 ChannelIterator 来得到一个 Items 实例。

Link copied to clipboard

比较两个 IDContainer 的 IDContainer.id 是否一致。