处理无法向用户发送私人消息的最佳方法是什么?
What's the best way to handle not being able to send a private message to a user?
我正在开发一个 discord 机器人,如果用户收到版主的警告,它会使用私人消息通知用户。在处理此问题时,我发现存在一种边缘情况,即由于用户的隐私设置,机器人无法向用户发送消息。如何编写我的代码来打开私人频道,尝试发送消息,并处理无法发送的问题?
发送消息的代码如下:
public static void sendNotification(Warning warning, TextChannel alt) {
User target = jda.getUserById(warning.getuId());
if(target == null)
return;
target.openPrivateChannel().queue(c -> c.sendMessage(WarningUtil.generateWarningMessage(warning)).queue());
}
您可以使用 flatMap
and onErrorFlatMap
:
的组合
public RestAction<Message> sendMessage(User user, TextChannel context, String content) {
return user.openPrivateChannel() // RestAction<PrivateChannel>
.flatMap((channel) -> channel.sendMessage(content)) // RestAction<Message>
.onErrorFlatMap(CANNOT_SEND_TO_USER::test,
(error) -> context.sendMessage("Cannot send direct message to " + user.getAsMention())
); // RestAction<Message> (must be the same as above)
}
或者,您也可以使用 ErrorHandler
public static void sendMessage(User user, String content) {
user.openPrivateChannel()
.flapMap(channel -> channel.sendMessage(content))
.queue(null, new ErrorHandler()
.handle(ErrorResponse.CANNOT_SEND_TO_USER,
(ex) -> System.out.println("Cannot send message to user")));
}
我正在开发一个 discord 机器人,如果用户收到版主的警告,它会使用私人消息通知用户。在处理此问题时,我发现存在一种边缘情况,即由于用户的隐私设置,机器人无法向用户发送消息。如何编写我的代码来打开私人频道,尝试发送消息,并处理无法发送的问题?
发送消息的代码如下:
public static void sendNotification(Warning warning, TextChannel alt) {
User target = jda.getUserById(warning.getuId());
if(target == null)
return;
target.openPrivateChannel().queue(c -> c.sendMessage(WarningUtil.generateWarningMessage(warning)).queue());
}
您可以使用 flatMap
and onErrorFlatMap
:
public RestAction<Message> sendMessage(User user, TextChannel context, String content) {
return user.openPrivateChannel() // RestAction<PrivateChannel>
.flatMap((channel) -> channel.sendMessage(content)) // RestAction<Message>
.onErrorFlatMap(CANNOT_SEND_TO_USER::test,
(error) -> context.sendMessage("Cannot send direct message to " + user.getAsMention())
); // RestAction<Message> (must be the same as above)
}
或者,您也可以使用 ErrorHandler
public static void sendMessage(User user, String content) {
user.openPrivateChannel()
.flapMap(channel -> channel.sendMessage(content))
.queue(null, new ErrorHandler()
.handle(ErrorResponse.CANNOT_SEND_TO_USER,
(ex) -> System.out.println("Cannot send message to user")));
}