首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bot (net.dv8tion)权限问题

Bot (net.dv8tion)权限问题
EN

Stack Overflow用户
提问于 2022-09-02 10:35:44
回答 2查看 66关注 0票数 1

我试图制造一个不和谐的机器人,它可以添加/删除用户的角色,但遗憾的是,我遇到了一些权限问题。

API可以找到:https://github.com/DV8FromTheWorld/JDA/

我很想听到有人知道该怎么做。我没有发现有同样问题的人。

错误的“退出”部分如下所示:

代码语言:javascript
复制
net.dv8tion.jda.api.exceptions.HierarchyException: Can't modify a role with higher or equal highest role than yourself! Role: R:unverified(1014845515776671764)
at net.dv8tion.jda.internal.entities.GuildImpl.checkPosition(GuildImpl.java:1866)
at net.dv8tion.jda.internal.entities.GuildImpl.addRoleToMember(GuildImpl.java:1535)
at Verify.onMessageReceived(Verify.java:29)

我已经查过了:

  • https://discord.com/developers/applications - bot部分中,我标记了特权网关在服务器上为我的机器人设置的邀请中的内容
  • ,在invite中我检查了管理员权限
  • ,除了bot和application.commands作用域之外,我还检查了与公会相关的作用域(但是如果我只是检查所有的作用域,邀请链接不起作用,所以我把注意力集中在那些我认为很重要的范围上……无论如何,在源代码中我启用了
  • (见下面的源代码),但我认为它不需要,因为我已经在前面的
  • 编辑中设置了它们:我还尝试使用一个在服务器上完全没有角色的新帐户来完成addRoleThingy:->收到了完全相同的错误
  • 编辑:当我想用bot启动另一个帐户时,它的工作方式与预期的一样,尽管您需要更高的权限.

Main.java:

代码语言:javascript
复制
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;
import javax.security.auth.login.LoginException;


public class Main extends ListenerAdapter {
    public static Channel verifyingChannel = null;
    public static Role unverified = null;
    public static Role verified = null;

    public static void main(String[] args) throws LoginException {

        String token = "MTAxNDc5NDM3NTc5ODIwNjU2NA.GbfY1_.xBGsGKK5Ox1jzFVYwIp_cMU3kMcOvNnq2dKOQM";
        JDABuilder builder = JDABuilder.createDefault(token);

        builder.enableIntents(GatewayIntent.GUILD_MEMBERS, GatewayIntent.MESSAGE_CONTENT,GatewayIntent.GUILD_PRESENCES);
        builder.setStatus(OnlineStatus.ONLINE);
        builder.setActivity(Activity.listening("the sound of life"));

        builder.setMemberCachePolicy(MemberCachePolicy.ALL);
        builder.setChunkingFilter(ChunkingFilter.ALL);
        builder.enableCache(CacheFlag.ROLE_TAGS);
        JDA bot = builder.build().awaitReady();
        bot.addEventListener(new Verify());

        // don't worry about the next one, it adds some commands that just work already
        bot.addEventListener(new Commander(bot));

        System.out.println("Bot is online!");

    }

}

Verify.java

代码语言:javascript
复制
import net.dv8tion.jda.api.entities.Channel;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

public class Verify extends ListenerAdapter {

    public Verify(){}

    @Override
    public void onGuildMemberJoin(GuildMemberJoinEvent event) {
        // later: implement the addRoleToMember funtion here
    }

    @Override
    public void onMessageReceived(MessageReceivedEvent event){
        // The Role Main.unverified is first set with a setup command in the Commander-Class, that part is not the problem
        event.getGuild().addRoleToMember(event.getMember(),Main.unverified).queue();
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-18 12:12:04

因此,为了最终解决我的问题,我只需重新安排服务器上的角色。在服务器属性中,bot角色必须高于我想要应用的角色。

票数 0
EN

Stack Overflow用户

发布于 2022-09-02 13:29:53

简单地说,不能像错误日志中所示那样修改具有更高或同等权限的用户。

我假设您是测试机器人的服务器上的管理员。

因此,您和机器人拥有相同/平等的权限,这违背了以下事实:.

.“您不能修改具有更高或同等权限的用户,如错误日志中所示”

我建议您邀请另一个用户到服务器,并给予他较低的权限。如果这样做,机器人应该能够在没有问题的情况下修改新用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73581297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档