Simple Robot | QQ频道 v4.0.0-beta5 Help

使用simbot核心库

通过core模块配合simbot核心库来使用强大而简单的事件调度能力。

前提准备

首先你应当准备至少一个可用的 QQ频道机器人

安装

// simbot core starter implementation("love.forte.simbot:simbot-core:3.3.0") // 版本请参考下文的参考链接 // QQ频道组件 implementation("love.forte.simbot.component:simbot-component-qq-guild-core:3.2.0.0") // 或参考下文的参考链接
// simbot core starter implementation 'love.forte.simbot:simbot-core:3.3.0' // 版本请参考下文的参考链接 // QQ频道组件 implementation 'love.forte.simbot.component:simbot-component-qq-guild-core:3.2.0.0' // 或参考下文的参考链接
<!-- simbot core --> <dependency> <groupId>love.forte.simbot</groupId> <artifactId>simbot-core</artifactId> <version>\${SIMBOT_VERSION}</version><!-- 版本请参考下文的参考链接 --> </dependency> <!-- QQ频道组件 --> <dependency> <groupId>love.forte.simbot.component</groupId> <artifactId>simbot-component-qq-guild-core</artifactId> <version>3.2.0.0</version><!-- 或参考下文的参考链接 --> </dependency>

构建Application

首先构建一个 simbot 的 Application ,这里以 SimpleApplication (也就是最基础的实现) 为例:

val application = createSimpleApplication { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 install(QQGuildComponent) install(QQGuildBotManager) } application.join() // 挂起直到被关闭

或使用扩展函数来简化上述代码:

val application = createSimpleApplication { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 useQQGuild() } application.join() // 挂起直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application SimpleApplication application = launcher.launchBlocking(); application. joinBlocking(); // 阻塞直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application, 结束后转化为 Future 并阻塞直到完成(application被关闭) launcher. launchAsync(). thenCompose(SimpleApplication::asFuture). join();

监听函数

完成对Application的构建之后,我们便可以开始注册监听函数用以处理事件了。

下面我们实现如此功能: 当收到一个**(公域)子频道消息**,且内容为 "你好",则引用回复一句 "你也好"。 流程大致为:

用户: @BOT 你好 BOT: > 用户: @BOT 你好 你也好
val application = createSimpleApplication { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 install(QQGuildComponent) install(QQGuildBotManager) } // 获取 eventListenerManager 并注册监听函数 application.eventListenerManager.listeners { // highlight-start ChannelMessageEvent { event -> // 当下述条件满足,则此处才被执行,并引用回复一句 '你也好' event.reply("你也好") } onMatch { event -> // 匹配判断: 当消息中存在任何 AT 消息,且at的目标是bot,且消息文本为 '你好' 时 val bot = event.bot event.messageContent.messages.any { it is At && bot.isMe(it.target) } && event.messageContent.plainText.trim() == "你好" } // highlight-end } application.join() // 挂起直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application SimpleApplication application = launcher.launchBlocking(); // 获取 EventListenerManager 并用于注册监听函数 EventListenerManager eventListenerManager = application.getEventListenerManager(); // 注册一个 EventListener 实例,此实例通过 SimpleListeners.listener(...) 构建而得。 // highlight-start eventListenerManager. register(SimpleListeners.listener(ChannelMessageEvent.Key, (context, event) ->{ // 匹配判断: 当消息中存在任何 AT 消息,且at的目标是bot,且消息文本为 '你好' 时 Bot bot = event.getBot(); boolean atBot = false; MessageContent messageContent = event.getMessageContent(); for( Message.Element<?> message :messageContent. getMessages()){ if(message instanceof At at &&bot. isMe(at.getTarget())){ atBot =true; break; } } return atBot &&"你好". equals(messageContent.getPlainText(). trim()); },(context,event)->{ // 当上面的匹配通过,则此处才被执行,并引用回复一句 '你也好' event. replyBlocking("你也好"); })); // highlight-end application. joinBlocking(); // 阻塞直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application 结束后转化为 Future 并阻塞直到完成(application被关闭) launcher. launchAsync(). thenCompose(application ->{ SimpleEventListenerManager eventListenerManager = application.getEventListenerManager(); // highlight-start eventListenerManager. register(SimpleListeners.listener(ChannelMessageEvent.Key, (context, event) ->{ // 匹配判断: 当消息中存在任何 AT 消息,且at的目标是bot,且消息文本为 '你好' 时 Bot bot = event.getBot(); boolean atBot = false; MessageContent messageContent = event.getMessageContent(); for( Message.Element<?> message :messageContent. getMessages()){ if(message instanceof At at &&bot. isMe(at.getTarget())){ atBot =true; break; } } return atBot &&"你好". equals(messageContent.getPlainText(). trim()); },(context,event)->{ // 当上面的匹配通过,则此处才被执行,并引用回复一句 '你也好' CompletableFuture<? extends MessageReceipt> replyAsync = event.replyAsync("你也好"); return EventResult. of(replyAsync); // 通过 EventResult.of(future) 将你的异步结果返回,事件处理器会挂起并处理此异步结果 })); // highlight-end return application. asFuture(); }). join();

注册bot

当监听函数注册完了之后,我们就需要注册bot了。当bot被注册并启动后,它们收到的事件就会流入到Application中的事件处理器中被统一处理。

val application = createSimpleApplication { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 install(QQGuildComponent) install(QQGuildBotManager) } application.eventListenerManager.listeners { // 注册事件... } // 寻找到一个 QQGuildBotManager 并注册bot // highlight-start val qqGuildBotManager = application.botManagers.first { it is QQGuildBotManager } as QQGuildBotManager val bot: QGBot = qqGuildBotManager.register("APP ID", "secret", "token") { // this: QGBotComponentConfiguration // **组件BOT**的额外配置信息 this.cacheConfig = CacheConfig(enable = true, TransmitCacheConfig(enable = true)) // 启用 '传递性缓存', 此缓存配置默认启用 // 其他额外配置... botConfig { // **此处为对应 stdlib bot 的配置信息 } } bot.start() // 启用bot // highlight-end application.join() // 挂起直到被关闭

或者通过扩展函数来简化上述代码:

val application = createSimpleApplication { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 install(QQGuildComponent) install(QQGuildBotManager) } application.eventListenerManager.listeners { // 注册监听函数... } // 寻找到一个 QQGuildBotManager 并注册bot // highlight-start application.qgGuildBots { val bot: QGBot = register("APP ID", "secret", "token") { // this: QGBotComponentConfiguration // **组件BOT**的额外配置信息 this.cacheConfig = CacheConfig(enable = true, TransmitCacheConfig(enable = true)) // 启用 '传递性缓存', 此缓存配置默认启用 // 其他额外配置... botConfig { // **此处为对应 stdlib bot 的配置信息 } } bot.start() // 启用bot } // highlight-end application.join() // 挂起直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application SimpleApplication application = launcher.launchBlocking(); // 注册监听函数... // highlight-start for( BotManager<?> botManager :application. getBotManagers()){ // 找到第一个 QQGuildBotManager 并对其进行操作 if(botManager instanceof QQGuildBotManager qqGuildBotManager){ QGBot bot = qqGuildBotManager.register("APP ID", "secret", "token", configuration -> { // **组件BOT**的额外配置信息 configuration.setCacheConfig(...); configuration.botConfig(botConfig -> { // **此处为对应 stdlib bot 的配置信息 return Unit.INSTANCE; // 结束配置 }); return Unit.INSTANCE; // 结束配置 }); bot. startBlocking(); // 阻塞启动 break; } } // highlight-end application. joinBlocking(); // 阻塞直到被关闭
final ApplicationLauncher<SimpleApplication> launcher = Applications.simbotApplication(Simple.INSTANCE, c -> { /* Application配置 */ }, (builder, configuration) -> { // 安装QQ频道相关的组件和Bot管理器,并暂且忽略配置 builder.install(QQGuildComponent.Factory, (__, ___) -> Unit.INSTANCE); builder.install(QQGuildBotManager.Factory, (__, ___) -> Unit.INSTANCE); }); // 启动 application 结束后转化为 Future 并阻塞直到完成(application被关闭) launcher. launchAsync(). thenCompose(application ->{ // 注册监听函数... // highlight-start for( BotManager<?> botManager :application. getBotManagers()){ // 找到第一个 QQGuildBotManager 并操作 if(botManager instanceof QQGuildBotManager qqGuildBotManager){ QGBot bot = qqGuildBotManager.register("APP ID", "secret", "token", configuration -> { // **组件BOT**的额外配置信息 configuration.setCacheConfig(...); configuration.botConfig(botConfig -> { // **此处为对应 stdlib bot 的配置信息 return Unit.INSTANCE; // 结束配置 }); return Unit.INSTANCE; // 结束配置 }); bot. startAsync(); // 异步启动。此处异步直接放养,如果需要处理异常等则需要进行操作。 break; } } // highlight-end return application. asFuture(); }). join();

启动

接下来,启动程序并在你的沙箱频道中@它试试看吧。

当然,如果遇到了预期外的问题也不要慌,积极反馈问题才能使我们变得更好,可以前往 Issues 反馈问题、 社区 提出疑问。

Last modified: 15 July 2024