.
.
.
例如:กิิิิิิิิิิิิิิิิิิิิก้้้้้้้้้้้้้้้้้้้้ก็็็็็็็็็็็็็็็็็็็็ก็็็็็็็็็็็็็็็็็็็็กิิิิิิิิิิิิิิิิิิิิก้้้้้้้้้้้้้้้้้้้้ก็็็็็็็็็็็็็็็็็็็็กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้กิิิิิิิิิิิิิิิิิิิิก้้้้้้้้้้้้้้้้้้้้ก็็็็็็็็็็็็็็็็็็็็ก็็็็็็็็็็็็็็็็็็็็กิิิิิิิิิิิิิิิิิิิิก้้้้้้้้้้้้้้้้้้้้ก็็็็็็็็็ ็็็็็็็็็็กิิิิิิิิิิิิิิิิิิิิก้้้้้้้้้้้้้้้้้้้้(或任何"zalgo"文本)
我还没有找到任何方法来检查这些.我正在制作一种反垃圾邮件,我认为不需要保留这些反垃圾邮件,因为它们可能会滞后于用户,而且通常只是垃圾邮件.
我想做的是
if (getMessage().getRawContent().contains(combined character).delete();
Run Code Online (Sandbox Code Playgroud)
如果有人知道检查组合字符的简单方法,请发布!
如果您对我的要求感到困惑,我可以进一步解释,并在需要时显示更多示例.
我正在开发 JDA Discord 机器人,每次运行它时,我都会遇到此异常。
java.lang.NullPointerException: Cannot read the array length because "<local3>" is null
at com.houseofkraft.handler.CommandHandler.scanIndex(CommandHandler.java:42)
at com.houseofkraft.core.DiscordBot.<init>(DiscordBot.java:68)
at com.houseofkraft.Stratos.main(Stratos.java:13)
Run Code Online (Sandbox Code Playgroud)
我试图制作一个基本的命令处理程序,这是它的代码:
public void scanIndex(Index index) throws IOException, InvalidLevelException {
String[] commandList = index.indexClass;
for (String classPath : commandList) {
if (classPath.startsWith("com.houseofkraft")) {
String[] classPathSplit = classPath.split("\\.");
String commandName = classPathSplit[classPathSplit.length-1].toLowerCase();
commandPaths.put(commandName, classPath);
DiscordBot.logger.log("Added " + commandName + " / " + classPath + " to path.", Logger.DEBUG);
}
}
}
Run Code Online (Sandbox Code Playgroud)
索引.java:
package com.houseofkraft.command;
public class Index {
public String[] indexClass; …
Run Code Online (Sandbox Code Playgroud) 我目前正在介绍 Java 编程课程,最近开始尝试使用 JDA 工具为我的服务器制作一个基本的 Discord 机器人。理想情况下,我希望我的机器人在有人说“你好苹果!”时做出回应。通过询问他们的名字,然后回答“嗨!” 如果此消息是由说“Hello Apples!”的同一个人发送的 现在我的机器人无法等待任何用户输入超过最初的“Hello Apples!” 消息,并立即溢出所有文本。我相信我当前的代码设置正确,以确保机器人只会响应“嗨!” 如果它收到来自最初发送“Hi Apples!”的同一个人的消息,但我不能完全确定,因为它不会等待其他消息,
你好!告诉我你的名字,或者说“停止”!
嗨嗨苹果!!
等待轮到你
我真的很想知道如何创建某种“停止”,或者一种方法,它会导致机器人等待最初问候机器人的用户的额外用户输入,如果可能的话,一种设置时间的方法限制,以便机器人在他们不回复时不会保持无法操作。
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
public class Main {
public static void main(String[] args) throws Exception {
try {
JDA api = new JDABuilder(AccountType.BOT).setToken("NTQxMTMxMDc4MTY1ODU2MjYw.DzbGoQ.oFIM_py pLMOc60qU1PgeeUXU8Qo").build();
api.addEventListener(new MyEventListener());
} catch (Exception e) {
e.printStackTrace();
}
}
}
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageChannel;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
public class MyEventListener extends ListenerAdapter {
public void onMessageReceived(MessageReceivedEvent …
Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个不和谐的机器人,它正在过滤消息。当尝试过滤包含在其他单词中的单词时,会出现问题,从而触发重复消息。
\n这是我的filter.txt:
\nsad\nsadness\nsadnesses\n
Run Code Online (Sandbox Code Playgroud)\n由于“悲伤”也可以在“悲伤”中找到,因此每当写“悲伤”时,我都会得到“悲伤”的误报。
\n是否可以仅检测消息中的确切字符串?就像:I want to be happy, because sadness is bad
\xe2\x86\x92 '只检测悲伤'
我希望你明白我的意思。
\n代码:
\npublic void onGuildMessageReceived(GuildMessageReceivedEvent e) {\n File file = new File("src/filter.txt");\n try {\n BufferedReader br = new BufferedReader(new FileReader(file));\n String line;\n while ((line = br.readLine()) != null) {\n if(!line.startsWith("#")) {\n if(e.getMessage().getContentRaw().contains(line)) {\n User user = e.getJDA().getUserById(e.getAuthor().getIdLong());\n e.getMessage().delete().queue();\n user.openPrivateChannel().queue(privateChannel -> {\n privateChannel.sendMessage("Bitte achte auf deine Sprache!").queue();\n });\n } \n }\n }\n } catch (IOException e1) {}\n}\n …
Run Code Online (Sandbox Code Playgroud) 我只是开始用IntelliJ IDEA在Java中用一些简单的函数来编写Discord Bot。现在我确实有一个问题,我必须为特定功能使用语言级别8,但是当我这样做时,它给我一个错误,以前没有任何工作现在可以正常工作。
码:
package main;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceJoinEvent;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.User;
import java.util.List;
import javax.security.auth.login.LoginException;
public class Main extends ListenerAdapter {
public static void main(String[] args) throws LoginException {
JDABuilder builder = new JDABuilder(AccountType.BOT);
String token = "Token of bot which i dont want to show here";
builder.setToken(token);
builder.addEventListener(new main.Main());
builder.buildAsync();
}
@Override
public void onMessageReceived(MessageReceivedEvent event) {
System.out.println("We received a message from " +
event.getAuthor().getName()+": "+ event.getMessage().getContentDisplay());
if(event.getMessage().getContentRaw().equals("!ping")) …
Run Code Online (Sandbox Code Playgroud) 我正在使用JDA lib 创建我的不和谐机器人,但遇到了一个问题:为了使用文件发送消息,我应该使用现有消息:
RestAction<Message> sendFile(File file, Message message)
RestAction<Message> sendFile(File file, String fileName, Message message)
RestAction<Message> sendFile(InputStream data, String fileName, Message message)
Run Code Online (Sandbox Code Playgroud)
没有使用简单字符串消息发送文件的实现。因此,当我尝试发送文件并向其传递消息时,我收到了重复的消息。
所以问题是:如何Message
在不重复消息的情况下创建附加文件?
如何要求bot向另一个与bot接收命令不同的通道(特定通道)发送消息?
假设 bot!ban @xxx
在 channel 中接收消息#a
,如果操作完成,bot 发送ban to user @xxx is given
到 channel #b
。
代码Main.java
:
import net.dv8tion.jda.core.*;
public class Main {
private static String token = "NDk0MjI2Mjk2OTY5MjMyMzk0.DowgCA.j0sQHnBV3wm70rzz7Q78rX0NVPU";
public static void main(String[] args) throws Exception{
try {
JDA api = new JDABuilder(AccountType.BOT).setToken(token).build();
api.addEventListener(new MyEventListner() );
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码MyEventListner.java
:
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageChannel;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
public …
Run Code Online (Sandbox Code Playgroud) 有没有办法只通过他的ID和他的TextChannel
ID来获取消息?
我找到了这个 :
Message message = TextChannel.getHistory().getMessageById(String id);
Run Code Online (Sandbox Code Playgroud)
但它只是抛出一个错误: net.dv8tion.jda.api.exceptions.ErrorResponseException: 10008: Unknown Message
我正在创建一个 Discord 机器人并遇到了一个奇怪的问题。我需要遍历服务器上的每个用户并执行条件操作。但是当收到所有成员的列表时,它只包含我和机器人本身。
public class Bot extends ListenerAdapter {
public void onGuildMessageReceived(GuildMessageReceivedEvent Event) {
String Message = Event.getMessage().getContentRaw();
if(Message.charAt(0) == Globals.BOT_PREFIX) {
String[] Args = Message.split("\\s+");
if(Args[0].equalsIgnoreCase(CommandType.COMMAND_DEV_TEST)) {
List<Member> MemberList = Event.getGuild().getMembers();
for(int i = 0; i < MemberList.size(); i++)
System.out.println(MemberList.get(i));
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果另一个人写,那么仍然只显示我和机器人。
为了从不同用户中删除角色,我使用以下代码行:
Member member = e.getMember();
Guild guild = member.getGuild();
for (Role role : guild.getRoles()) {
System.out.println("getting em!");
System.out.println(role.getId());
if (role.getId().equals("496415978603675658")) {
System.out.println("he has it, boss");
guild.getController().removeSingleRoleFromMember(member, role)
.complete();
guild.getController().addSingleRoleToMember(member, jda.getRoleById("496415995569766410"))
.complete();
}
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但问题是它只适用于 Member 对象 ( e.getMember
),否则我不知道如何检索 Member 对象。我将另一个用户存储为用户对象,但我不知道如何将他转换为成员。