【问题标题】:dv8tion discord java channel permissionsdv8tion 不和谐 java 频道权限
【发布时间】:2020-08-10 12:47:31
【问题描述】:

我使用 java 制作了一个不和谐的机器人,使用 net.dv8tion.jda 来管理机器人。 我已经说过,当新用户进入机器人时,会向他发送私人消息,问题是某些用户禁用了从机器人或不在朋友列表中的用户接收消息的选项。 所以我的想法是以一种新的方式实现它,当新用户加入服务器时,机器人将创建一个名为“welcome”的新文本频道,在该频道中 everyone 角色没有有查看频道的权限,但新用户有查看权限。在这种情况下,私人频道将被删除,例如用户阅读规则并通过键入“!name example”来选择名称。

我唯一的问题是我做了很多研究,我确实找到了如何使用机器人修改特定角色的权限,但我不明白如何修改文本通道中的权限。

我设法创建了一个新频道: event.getGuild().createTextChannel("welcome").complete(); 这将创建一个名为welcome 的新文本通道。

根据我所看到的一些研究 event.getGuild().createTextChannel("welcome").complete().getManager().putPermissionOverride(permHolder, allow, deny);

但仍然不确定参数是什么,“permHolder”是一个 IPermissionHolder 接口,具有 Member 和 Role 子接口,所以我假设

event.getGuild().createTextChannel("welcome").complete().getManager().putPermissionOverride(event.getMember(), allow, deny); 用于修改该频道的新用户权限(事件为 OnGuildMemberJoin)

event.getGuild().createTextChannel("welcome").complete().getManager().putPermissionOverride(event.getGuild().getRoleById(*everyone role id*), allow, deny); 用于修改该频道的所有人角色权限

PS:是的,我知道这样会创建 2 个不同的频道,分别命名为“欢迎”,我应该先创建频道,将其分配给一个变量,然后再处理它,但这只是为了理解目的在这里。

但我仍然不知道允许和拒绝参数是什么,它们是我想要被允许的权限和我想要被拒绝的权限的列表吗?在 Eclypse 上,它们显示为长类型。如果是,我该如何计算?

抱歉,如果我写的内容可能令人困惑,请提前感谢您。

【问题讨论】:

    标签: java permissions bots discord discord-jda


    【解决方案1】:

    您可以修改createTextChannel 返回的ChannelAction 的权限。 addPermissionOverride 方法允许为成员和角色添加覆盖。

    event.getGuild().createTextChannel("welcome")
        .addPermissionOverride(event.getMember(), EnumSet.of(Permission.VIEW_CHANNEL), null)
        .addPermissionOverride(role, null, EnumSet.of(Permission.VIEW_CHANNEL))
        .queue();
    

    【讨论】:

      【解决方案2】:

      我已经解决了这个问题,经过一些研究我得出结论

      TextChannel canaleNuovo=event.getGuild().createTextChannel("welcome").complete();
      
      canaleNuovo.getManager().getChannel().createPermissionOverride(event.getMember()).setAllow(Permission.VIEW_CHANNEL).queue();
      
      canaleNuovo.getManager().getChannel().createPermissionOverride(event.getGuild().getRoleById("640568816702587041")).setDeny(Permission.VIEW_CHANNEL).queue();
      

      而且它有效!

      【讨论】:

      • channel.getManager().getChannel() 完全是多余的。
      猜你喜欢
      • 2020-05-07
      • 2019-10-11
      • 2021-02-19
      • 1970-01-01
      • 2023-04-07
      • 2021-09-15
      • 1970-01-01
      • 2021-11-23
      • 2021-06-09
      相关资源
      最近更新 更多