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

频道 QGGuild

公告

站点迁移啦~!

为什么迁移?

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

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

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

      API模块中的Guild

      API模块中部分用于获取频道信息的API中会返回一些与 Guild 相关的数据类型。

      当你使用 GetGuildApiGetBotGuildListApi 时, 返回值类型分别为 SimpleGuildList<SimpleGuild>

      Stdlib模块中的Guild

      除了使用API主动查询、获取以外, 你还可能在stdlib模块下订阅与Guild相关的事件时获取到它。

      当你订阅 EventGuildDispatch 或它的子类型事件 GuildCreateGuildUpdateGuildDelete 时,可以通过 data 获取到 EventGuild

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

      组件库中的QGGuild

      在组件库模块中,QQ频道组件提供了一个针对 simbot标准API中的 Guild 类型的实现: QGGuild ,它基于 stdlib模块的 Guild (这个不是指simbot标准API中的 Guild) 提供更进一步的功能。

      得到QGGuild

      你可以在 QGBot 中得到 QGGuild。 这部分可以前往参考 频道操作

      除了直接在 QGBot 中获取,你也可以在与频道相关的事件中获取到它。

      如果一个频道是这个事件中的主体(例如 QGGuildCreateEvent), 那么你可以通过 content 得到 QGGuild

      val event: QGGuildCreateEvent = ... val guild = event.content()
      QGGuildCreateEvent event = ... event.getContentAsync() .thenAccept(guild -> { ... })
      QGGuildCreateEvent event = ... var guild = event.getContentBlocking()
      QGGuildCreateEvent event = ... event.getContentReserve() // 例如转为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(guild -> { ... })

      获取基本信息

      QGGuild 理所当然得可以获取到一些频道服务器的基本属性, 比如id、名称、图标等。

      guild.id guild.name guild.ownerId guild.joinTime guild.description guild.icon guild.memberCount guild.maxMembers
      guild.getId(); guild.getName(); guild.getOwnerId(); guild.getJoinTime(); guild.getDescription(); guild.getIcon(); guild.getMemberCount(); guild.getMaxMembers();

      获取子频道

      你可以在 QGGuild 中获取到子频道类型 QGChannel

      寻找指定ID的子频道

      val guild: QGGuild = ... // 假设这是某个子频道的ID val id = 1234L.ID val channel = guild.channel(id) val chatChannel = guild.chatChannel(id) val forumChannel = guild.forum(id)

      批量获取子频道

      val guild: QGGuild = ... guild.channels // .asFlow() // 也可以转成 Flow .collect { channel -> } val chatChannelList = guild.chatChannels .asFlow().toList() guild.forums.collect { forum -> }

      寻找指定ID的子频道

      QGGuild guild = ... // 假设这是某个子频道的ID var id = Identifies.of(1234L); guild.getChannelAsync(id) .thenAccept(channel -> {...}); guild.getChatChannelAsync(id) .thenAccept(channel -> {...}); guild.getForumAsync(id) .thenAccept(channel -> {...});
      QGGuild guild = ... // 假设这是某个子频道的ID var id = Identifies.of(1234L); final var channel = guild.getChannel(id); final var chatChannel = guild.getChatChannel(id); final var forum = guild.getForum(id);
      QGGuild guild = ... // 假设这是某个子频道的ID var id = Identifies.of(1234L); guild.getChannelReserve(id) // 假设转化为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(channel -> {}); guild.getChatChannelReserve(id) // 假设转化为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(channel -> {}); guild.getForumReserve(id) // 假设转化为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(channel -> {});

      批量获取子频道

      QGGuild guild = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope guild.getChannels().collectAsync(GlobalScope.INSTANCE, channel -> { }); // 可以使用 Collectables.collectAsync var chatChannelsCollectable = guild.getChatChannels(); Collectables.collectAsync(chatChannelsCollectable, Collectors.toList()) .thenAccept(chatChannelList -> {}); // 可以直接使用 Collectable的扩展 var forumsCollectable = guild.getForums(); Collectables.toListAsync(forumsCollectable); .thenAccept(forum -> {...});
      QGGuild guild = ... // 可以使用 SuspendReserves.list 转为 List var channelList = guild.getChannels().transform(SuspendReserves.list()); // 可以使用 Collectables 转成 Stream 或 List var chatChannelsCollectable = guild.getChatChannels(); Collectables.asStream(chatChannelsCollectable) .forEach(chatChannel -> {}); // 可以直接使用 Collectable的扩展 var forumsCollectable = guild.getForums(); var forumList = Collectables.toList(forumsCollectable);
      QGGuild guild = ... // 可以直接在异步中遍历 // CoroutineScope 可以选择 QGBot、QGGuild等 // 也可以选择 GlobalScope guild.getChannels().collectAsync(GlobalScope.INSTANCE, channel -> { }); // 可以使用 Collectables 转成 Flux var chatChannelsCollectable = guild.getChatChannels(); Collectables.asFlux(chatChannelsCollectable) .subscribe(chatChannel -> {}); var forumsCollectable = guild.getForums(); Collectables.asFlux(forumsCollectable) .subscribe(forum -> {});

      获取成员

      你可以在 QGGuild 中获取到成员类型 QGMember

      寻找指定ID的成员

      val guild: QGGuild = ... // 假设这是某个成员的ID val id = 1234L.ID val member = guild.member(id)

      批量获取成员

      val guild: QGGuild = ... guild.members // .asFlow() // 也可以转成 Flow .collect { member -> }

      寻找指定ID的成员

      QGGuild guild = ... // 假设这是某个成员的ID var id = Identifies.of(1234L); guild.getMemberAsync(id) .thenAccept(member -> {...});
      QGGuild guild = ... // 假设这是某个成员的ID var id = Identifies.of(1234L); var member = guild.getMember(id);
      QGGuild guild = ... // 假设这是某个成员的ID var id = Identifies.of(1234L); guild.getMemberReserve(id) // 假设转化为 Reactor 的 `Mono` .transform(SuspendReserves.mono()) .subscribe(member -> {});

      批量获取成员

      QGGuild guild = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope guild.getMembers().collectAsync(GlobalScope.INSTANCE, member -> { }); // 可以使用 Collectables.toListAsync / collectAsync var chatChannelsCollectable = guild.members(100); // batch: 内部每次查询的批次量 Collectables.toListAsync(chatChannelsCollectable) .thenAccept(chatChannelList -> {});
      QGGuild guild = ... // 可以使用 SuspendReserves.list 转为 List var memberList = guild.getMembers().transform(SuspendReserves.list()); var membersCollectable = guild.members(100); // batch: 内部每次查询的批次量 // 可以使用 Collectables 转成 Stream 或 List Collectables.asStream(membersCollectable) .forEach(member -> {});
      QGGuild guild = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope guild.getMembers().collectAsync(GlobalScope.INSTANCE, member -> { }); var membersCollectable = guild.members(100); // batch: 内部每次查询的批次量 // 可以使用 Collectables 转为 Flux Collectables.asFlux(membersCollectable) .subscribe(member -> { });

      获取权限

      你可以在 QGGuild 中获取到当前频道对 bot 的权限限制信息 ApiPermissions

      val guild: QGGuild = ... val permissions = guild.permissions()
      QGGuild guild = ... guild.getPermissionsAsync() .thenAccept(permissions -> { });
      QGGuild guild = ... var permissions = guild.getPermissions();
      QGGuild guild = ... guild.getPermissionsReserve() .transform(SuspendReserves.mono()) .subscribe(permissions -> { });

      操作角色

      QGGuild 中存在一些对 QGGuildRole 进行获取或操作的 API。

      获取角色

      你可以在 QGGuild 中获取到角色类型 QGGuildRole

      批量获取角色

      val guild: QGGuild = ... guild.roles // .asFlow() // 也可以转成 Flow .collect { member -> }

      批量获取角色

      QGGuild guild = ... // 可以直接在异步中遍历 // 第一个参数 scope 可以选择 QGGuild、QGBot 等, // 或者直接使用 GlobalScope guild.getRoles().collectAsync(GlobalScope.INSTANCE, role -> { }); // 可以使用 Collectables.toListAsync / collectAsync var rolesCollectable = guild.getRoles(); Collectables.toListAsync(rolesCollectable) .thenAccept(role -> {});
      QGGuild guild = ... // 可以使用 SuspendReserves.list 转为 List var roleList = guild.getRoles().transform(SuspendReserves.list()); // 可以使用 Collectables 转成 Stream 或 List var rolesCollectable = guild.getRoles(); Collectables.asStream(rolesCollectable) .forEach(role -> {});
      QGGuild guild = ... // 可以直接在异步中遍历 // CoroutineScope 可以选择 QGBot、QGGuild 等 // 也可以选择 GlobalScope guild.getRoles().collectAsync(GlobalScope.INSTANCE, role -> { }); // 可以使用 Collectables 转为 Flux var rolesCollectable = guild.getRoles(); Collectables.asFlux(rolesCollectable) .subscribe(role -> { });

      创建角色

      QGGuild 中可以通过 roleCreator 得到一个用来创建 QGGuildRole 的构建器。

      val guild: QGGuild = ... val creator = guild.roleCreator() // 一些属性... creator.name = ... creator.isHoist = ... creator.color = ... // 请求API创建一个新角色 val role = creator.create()

      Kotlin 中可以使用扩展函数 createRole 来简化:

      val guild: QGGuild = ... // 请求API创建一个新角色 val role = guild.createRole { name = ... isHoist = ... color = ... }
      QGGuild guild = ... var creator = guild.roleCreator(); creator.setName("123"); creator.setHoist(false); creator.setColor(0); // 请求API创建一个新角色 creator.createAsync().thenAccept(role -> {});
      QGGuild guild = ... var creator = guild.roleCreator(); creator.setName("123"); creator.setHoist(false); creator.setColor(0); // 请求API创建一个新角色 var role = creator.createBlocking();
      QGGuild guild = ... var creator = guild.roleCreator(); creator.setName("123"); creator.setHoist(false); creator.setColor(0); // 请求API创建一个新角色 creator.createReserve() .transform(SuspendReserves.mono()) .subscribe(role -> {});
      Last modified: 15 July 2024