【问题标题】:Ban command not working JDA please help debuged and everything禁止命令不起作用 JDA 请帮助调试和一切
【发布时间】:2021-02-13 09:02:52
【问题描述】:

你好,所以我在 JDA 中制作了一个机器人,我刚刚发出了一个禁令命令,但它并没有禁止代码所在的任何人 我提到了用户,还写了一个理由,写了用户 ID,仍然没有区别

package me.programmer.CodeDevelopment.Commands;

import me.programmer.CodeDevelopment.Bot;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import java.util.List;

public class Ban extends ListenerAdapter {


    public void onMessageGuildReceived(List<String> args, GuildMessageReceivedEvent e){
        String msg = e.getMessage().getContentRaw();
        if(msg.equalsIgnoreCase(Bot.PREFIX + "ban")){
            TextChannel channel = e.getChannel();
            Member member = e.getMember();
            List<Member> mentionedMembers = e.getMessage().getMentionedMembers();

            if (mentionedMembers.isEmpty() || args.size() < 2) {
                channel.sendMessage("Missing Arguments").queue();
                return;
            }

            Member target = mentionedMembers.get(0);
            String reason = String.join(" ", args.subList(1, args.size()));

            if (!member.hasPermission(Permission.BAN_MEMBERS) && !member.canInteract(target)){
                channel.sendMessage("You dont have pmerission to run this command").queue();
                return;
            }

            target.ban(1)
                    .reason(String.format("Ban by: %#s, with reason: %s", e.getAuthor(), reason)).queue();
        }

    }



}

请帮助我在这个问题上停留了一段时间。

【问题讨论】:

  • 您没有正确覆盖 ListenerAdapter 的方法。名称和参数列表必须匹配。
  • 已经试过了,还是不行

标签: discord-jda


【解决方案1】:

就像 Minn 提到的,您没有正确覆盖 ListenerAdapter 的方法。名称和参数列表必须匹配。

此外,您正在检查整个消息是否等于 {PREFIX}ban,但您的禁令命令的结构类似于 {PREFIX}ban (user),因此您的代码总是停在这一行:

    if(msg.equalsIgnoreCase(Bot.PREFIX + "ban"))

因为正确使用命令时永远不会这样。

这应该可以代替(我已将 msg 检查更改为从 equals 开始,我已将方法名称更改为正确的名称,并使用来自 ListenerAdapter 的正确参数,然后我保留了您对 args 的使用通过拆分msg 字符串并将其放入列表中):

public class Ban extends ListenerAdapter {

    @Override
    public void onGuildMessageReceived(GuildMessageReceivedEvent e) {
        String msg = e.getMessage().getContentRaw();
        if (msg.startsWith(Bot.PREFIX + "ban")) {
            TextChannel channel = e.getChannel();
            Member member = e.getMember();
            List<Member> mentionedMembers = e.getMessage().getMentionedMembers();

            List<String> args = Arrays.asList(msg.split(" "));
            if (mentionedMembers.isEmpty() || args.size() < 2) {
                channel.sendMessage("Missing Arguments").queue();
                return;
            }

            Member target = mentionedMembers.get(0);
            String reason = String.join(" ", args.subList(1, args.size()));

            if (!member.hasPermission(Permission.BAN_MEMBERS) && !member.canInteract(target)) {
                channel.sendMessage("You dont have pmerission to run this command").queue();
                return;
            }

            target.ban(1)
                    .reason(String.format("Ban by: %#s, with reason: %s", e.getAuthor(), reason)).queue();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2011-11-27
    • 2018-07-28
    • 2020-11-14
    • 2014-01-28
    • 2020-08-07
    • 2014-09-15
    • 2012-11-22
    • 2020-11-22
    相关资源
    最近更新 更多