我使用java制作了一个discord机器人,使用net.dv8tion.jda来管理机器人。 我已经做到,当新用户进入机器人时,机器人会向他发送私有(private)消息,问题是某些用户已禁用从机器人或不在 friend 列表中的用户接收消息的选项。 所以我的想法是以一种新的方式实现,当新用户加入服务器时,机器人将创建一个新的文本 channel ,例如名为“欢迎”,在该 channel 中每个人角色都没有没有查看该 channel 的权限,但新用户有查看该 channel 的权限。在这种情况下,私有(private) channel 将被删除,例如用户阅读规则并通过键入“!name example”选择名称。
我唯一的问题是我做了很多研究,我确实找到了如何使用机器人修改特定角色的权限,但我不明白如何修改文本 channel 中的权限。
我已经成功创建了一个新 channel :
event.getGuild().createTextChannel("欢迎").complete();
这将创建一个名为welcome的新文本 channel 。
我看过一些研究
event.getGuild().createTextChannel("欢迎").complete().getManager().putPermissionOverride(permHolder, 允许, 拒绝);
但仍然不确定参数是什么,“permHolder”是一个IPermissionHolder接口(interface),它有Member和Role子接口(interface),所以我假设
event.getGuild().createTextChannel("welcome").complete().getManager().putPermissionOverride(event.getMember(),allow,deny);
用于修改新用户权限在该 channel 上(事件为 OnGuildMemberJoin)
和
event.getGuild().createTextChannel("欢迎").complete().getManager().putPermissionOverride(event.getGuild().getRoleById(*每个人角色id*),允许,拒绝);
用于修改该 channel 上的每个人角色权限
PS:是的,我知道这样会创建两个不同的 channel ,名称均为“欢迎”,我应该首先创建 channel ,将其分配给一个变量,然后再对其进行处理,但这只是为了理解目的在这里。
但我仍然不知道允许和拒绝参数是什么,它们是我想要允许的权限和我想要拒绝的权限的列表吗?在 Eclypse 上,它们显示为长类型。如果是,我该如何计算它们?
很抱歉,如果我写的内容可能令人困惑,并提前感谢您。
最佳答案
您可以修改 ChannelAction
的权限由createTextChannel
返回。 addPermissionOverride方法允许添加成员和角色的覆盖。
event.getGuild().createTextChannel("welcome")
.addPermissionOverride(event.getMember(), EnumSet.of(Permission.VIEW_CHANNEL), null)
.addPermissionOverride(role, null, EnumSet.of(Permission.VIEW_CHANNEL))
.queue();
关于java - dv8tion 不和谐 java channel 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61450832/