频道成员 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
,你可以在 QGBot
、 QGGuild
或一个与子频道相关的事件中获取。
在 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