英文:
Get Name of User From ID - Discord JDA
问题
我从User.fromID(long id)
获得一个User实例。
User u = User.fromID(123456);
然后,我想获取该用户的名称。所以我使用了User.getName()
String name = u.getName();
但是随后我收到一个错误。
[JDA MainWS-ReadThread] ERROR JDA - 一个EventListener发生了未捕获的异常
java.lang.UnsupportedOperationException: 此 User 实例仅包装了一个 ID,不支持其他操作
at net.dv8tion.jda.internal.entities.UserById.unsupported(UserById.java:78)
at net.dv8tion.jda.internal.entities.UserById.getName(UserById.java:85)
at bot.Profile.<init>(Profile.java:19)
at files.Profiles.handleUser(Profiles.java:17)
at bot.Chat.onMessageReceived(Chat.java:19)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:430)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:82)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:69)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:150)
at net.dv8tion.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:122)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:948)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:835)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:813)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:986)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)
我如何在User仅包装ID的情况下获取其名称?
感谢任何帮助。
英文:
I get a User from User.fromID(long id)
User u = User.fromID(123456);
I then want to get the name of that user. So I use User.getName()
String name = u.getName();
But then I get an error.
[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.UnsupportedOperationException: This User instance only wraps an ID. Other operations are unsupported
at net.dv8tion.jda.internal.entities.UserById.unsupported(UserById.java:78)
at net.dv8tion.jda.internal.entities.UserById.getName(UserById.java:85)
at bot.Profile.<init>(Profile.java:19)
at files.Profiles.handleUser(Profiles.java:17)
at bot.Chat.onMessageReceived(Chat.java:19)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:430)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:82)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:69)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:150)
at net.dv8tion.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:122)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:948)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:835)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:813)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:986)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)
How can I get the name of a User that only wraps an ID?
Any help is appreciated.
答案1
得分: 4
你需要一个JDA实例,并使用retrieveUserById替代。
示例:
jda.retrieveUserById(userId)
.map(User::getName)
.queue(name -> {
// 在这里使用 name
System.out.println("该用户的名字为 " + name);
});
英文:
You need a JDA instance and use retrieveUserById instead.
Example:
jda.retrieveUserById(userId)
.map(User::getName)
.queue(name -> {
// use name here
System.out.println("The user has the name " + name);
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论