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

频道成员 QGMember

公告

站点迁移啦~!

为什么迁移?

作为由我们官方维护的组件库,分散在各自的文档站点中的确有好处:它们可以各自维护自己所需的东西、互不干扰。

但是缺点也很明显: 太过分散。

组件库与核心库之间的关系是比较紧密的, 我们希望你能够在一个站点内就可以查阅或搜索到所有你想要得知的信息。

      频道成员,即 Member ,存在于频道服务器(Guild )中。

      API中的频道成员

      在API模块中存在一些用来获取 Member 的API。

      比如你可以通过 GetMemberApi 获取 SimpleMember 类型结果的成员信息、 DeleteMemberApi 删除(踢出)一个成员等。

      Stdlib模块中的频道成员

      当你直接使用标准库模块时,你可以在一些与频道成员相关的事件中得到它的信息。

      比如当你处理 GuildMemberAdd 类型事件时,可以通过 data 获取到 EventMember

      bot.subscribe<GuildMemberAdd> { val member: EventMember = data }
      bot.subscribe(EventProcessors.async(GuildMemberAdd.class, (event, raw) -> { var member = event.getData(); // ... return CompletableFuture.completedFuture(null); }));
      bot.subscribe(EventProcessors.block(GuildMemberAdd.class, (event, raw) -> { var member = event.getData(); }));

      组件库中的频道成员

      组件中 QGMember 类型实现了simbot标准API中的 Member 类型,并提供与频道成员相关的功能。 如果你想要获取一个 QGChannel ,你可以在 QGBotQGGuild 或一个与子频道相关的事件中获取。

      QGBot 中获取子频道你可以前往参考 频道操作

      QGGuild 中获取频道成员你可以前往参考 获取成员

      在事件中获取,那么这个事件应当与频道成员有所关联。 它们通常使用 member 属性获取。

      QGMemberAddEvent 事件为例:

      val event: QGMemberAddEvent = ... val member = event.member()
      QGMemberAddEvent event = ... event.getMemberAsync() .thenAccept(member -> { ... })
      QGMemberAddEvent event = ... var member = event.getMemberBlocking()
      QGChannelCreateEvent event = ... event.getMemberReserve() // 例如转为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(member -> { ... })

      私聊消息

      QGMember 实现simbot标准API中的 Channel ,而它又支持 SendSupport, 也就是说 QGMember 支持向某个频道成员发送私聊消息。

      val member: QGMember = ... member.send("消息内容") member.send("消息内容".toText() + At("user id".ID))
      QGMember member = ... var sendTask1 = member.sendAsync("消息内容"); var sendTask2 = member.sendAsync(Messages.of( Text.of("文本消息"), At.of(Identifies.of("user id")) ));
      QGMember member = ... member.sendBlocking("消息内容"); member.sendBlocking(Messages.of( Text.of("文本消息"), At.of(Identifies.of("user id")) ));
      QGTextChannel member = ... member.sendReserve("消息内容") .transform(SuspendReserves.mono()) .subscribe(receipt -> { ... }); member.sendReserve(Messages.of( Text.of("文本消息"), At.of(Identifies.of("user id")) )).transform(SuspendReserves.mono()) .subscribe(receipt -> { ... });

      角色操作

      QGMember 拥有一些获取或操作自身角色 (QGMemberRole) 的API。

      获取角色

      val member: QGMember = ... // 获取当前用户拥有的角色集合 val roles = member.roles
      QGmember member = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope member.getRoles().collectAsync(GlobalScope.INSTANCE, member -> { }); // 可以使用 Collectables.toListAsync / collectAsync var rolesCollectable = member.getRoles(); Collectables.toListAsync(rolesCollectable) .thenAccept(role -> {});
      QGmember member = ... // 可以使用 SuspendReserves.list 转为 List var roleList = member.getRoles().transform(SuspendReserves.list()); // 可以使用 Collectables 转成 Stream 或 List var rolesCollectable = member.getRoles(); Collectables.asStream(rolesCollectable) .forEach(role -> {});
      QGmember member = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope member.getRoles().collectAsync(GlobalScope.INSTANCE, role -> { }); var rolesCollectable = guild.getRoles(); // 可以使用 Collectables 转为 Flux Collectables.asFlux(rolesCollectable) .subscribe(role -> { });
      Last modified: 15 July 2024