// 准备 bot 的必要信息
val botId = "xxxx"
val botSecret = "" // secret 如果用不到可使用空字符串
val botToken = "xxxx"
// 用于注册 bot 的 “票据” 信息。
val ticket = Bot.Ticket(botId, botSecret, botToken)
// 构建一个 Bot,并可选的进行一些配置。
val bot = BotFactory.create(ticket) {
// 各种配置...
// 比如切换服务地址为沙箱频道的服务地址
useSandboxServerUrl()
// 指定需要订阅的事件的 intents,默认会订阅:
// - 频道相关事件
// - 频道成员相关事件
// - 公域消息相关事件
intents // = xxx
// 自定义一个 shard,默认是 Shard.FULL
shard = Shard.FULL
// 其他各种配置...
}
// 注册事件有一些不同但类似的方式
// 1️⃣ 通过 subscribe 注册一个普通的事件处理器,此处理器会接收并处理所有类型的事件
// subscribe 是最基本的注册方式,也是其他方式的最终汇集点
bot.subscribe { raw ->
// raw 代表事件的原始JSON字符串
// this: Signal.Dispatch, 也就是解析出来的事件结构体
println("event: $this")
println("event.data: $data")
println("raw: $raw")
}
// 2️⃣ 通过 processEvent<DispatchType> 注册一个针对具体 Signal.Dispatch 事件类型的事件处理器,
// 它只有在接收到的 Signal.Dispatch 与目标类型一致时才会处理。
// 此示例展示处理 AtMessageCreate 也就公域是消息事件,并在对方发送了包含 'stop' 的文本时终止 bot。
bot.process<AtMessageCreate> {
println("event message: $data")
if ("stop" in data.content) {
// 终止 bot
bot.cancel()
}
}
// 启动 bot, 此时会开始获取ws、连接并接收消息。
bot.start()
// 挂起 bot,直到它结束(被终止)
bot.join()
// 准备 bot 的必要信息
var botId = "xxxx";
var botSecret = ""; // secret 如果用不到可使用空字符串
var botToken = "xxxx";
// 用于注册 bot 的 “票据” 信息。
var ticket = new Bot.Ticket(botId, botSecret, botToken);
// 构建一个 Bot,并可选的进行一些配置。
Bot bot = BotFactory.create(ticket, config -> {
// 各种配置...
// 比如切换服务地址为沙箱频道的服务地址
config.useSandboxServerUrl();
// 指定需要订阅的事件的 intents,默认会订阅:
// - 频道相关事件
// - 频道成员相关事件
// - 公域消息相关事件
// config.setIntentsValue(...);
// 自定义一个 shard,默认是 Shard.FULL
config.setShard(Shard.FULL);
// 其他各种配置...
});
// 通过 subscribe 注册一个普通的事件处理器,
// 此处理器会接收并处理所有类型的事件
bot.subscribe(EventProcessors.async((event, raw) -> {
// raw 代表事件的原始JSON字符串
// event: Signal.Dispatch, 也就是解析出来的事件结构体
System.out.println("event: " + event);
System.out.println("event.data: " + event.getData());
System.out.println("raw: " + raw);
// 异步处理器必须返回 CompletableFuture
return CompletableFuture.completedFuture(null);
}));
// 通过 subscribe 注册一个普通的事件处理器,
// 此处理器会接收并处理指定的类型 AtMessageCreate 的事件
// 此示例展示处理 AtMessageCreate 也就公域是消息事件,并在对方发送了包含 'stop' 的文本时终止 bot。
bot.subscribe(EventProcessors.async(AtMessageCreate.class, (event, raw) -> {
System.out.println("event message: $data");
if (event.getData().getContent().contains("stop")) {
// 终止 bot
bot.cancel();
}
// 异步处理器必须返回 CompletableFuture
return CompletableFuture.completedFuture(null);
}));
// 异步地启动bot,并在 bot 启动完成后,
// 将 bot 转化为 future,这个 future 会在 bot 被终止时完成
// 其实也可以把 startAsync 和 asFuture 拆开写,效果相同。
var future = bot.startAsync()
.thenCompose(unit -> bot.asFuture());
// 阻塞当前线程,直到 bot 被终止。
future.join();
// 准备 bot 的必要信息
var botId = "xxxx";
var botSecret = ""; // secret 如果用不到可使用空字符串
var botToken = "xxxx";
// 用于注册 bot 的 “票据” 信息。
var ticket = new Bot.Ticket(botId, botSecret, botToken);
// 构建一个 Bot,并可选的进行一些配置。
Bot bot = BotFactory.create(ticket, config -> {
// 各种配置...
// 比如切换服务地址为沙箱频道的服务地址
config.useSandboxServerUrl();
// 指定需要订阅的事件的 intents,默认会订阅:
// - 频道相关事件
// - 频道成员相关事件
// - 公域消息相关事件
// config.setIntentsValue(...);
// 自定义一个 shard,默认是 Shard.FULL
config.setShard(Shard.FULL);
// 其他各种配置...
});
// 通过 subscribe 注册一个普通的事件处理器,
// 此处理器会接收并处理所有类型的事件
bot.subscribe(EventProcessors.block((event, raw) -> {
// raw 代表事件的原始JSON字符串
// event: Signal.Dispatch, 也就是解析出来的事件结构体
System.out.println("event: " + event);
System.out.println("event.data: " + event.getData());
System.out.println("raw: " + raw);
}));
// 通过 subscribe 注册一个普通的事件处理器,
// 此处理器会接收并处理指定的类型 AtMessageCreate 的事件
// 此示例展示处理 AtMessageCreate 也就公域是消息事件,并在对方发送了包含 'stop' 的文本时终止 bot。
bot.subscribe(EventProcessors.block(AtMessageCreate.class, (event, raw) -> {
System.out.println("event message: $data");
if (event.getData().getContent().contains("stop")) {
// 终止 bot
bot.cancel();
}
}));
// 启动bot
bot.startBlocking();
// 阻塞当前线程,直到 bot 被终止。
bot.joinBlocking();