频道成员 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 November 2024