gpt4 book ai didi

java - 重复消费者 For 循环

转载 作者:行者123 更新时间:2023-12-02 01:27:25 25 4
gpt4 key购买 nike

我正在使用一个带有方法的库,在该方法中我调用一个方法,该方法采用事件类和消费者,以便在事件触发时调用。该方法返回一个空值。我需要在消费者中再次调用该方法,然后在该消费者中再次调用它等等(很多次)。如何将其放入 for 循环中以避免多次输入此方法?代码:

ShurikenBot.getInstance().getEventWaiter().waitForEvent(MessageReactionAddEvent.class,
t -> t.getMessageId().equals(m.getId()) && event.getAuthor().getId().equals(t.getMember().getUser().getId())
&& t.getReaction().getReactionEmote().getName().equals("\u25B6"),
t ->
t.getChannel().getMessageById(t.getMessageId()).queue(msg -> {
System.out.println("yes");
// i want to call waitForEvent() again here
msg.editMessage(builder.setTitle("Shuriken Tutorial - Step 2").setImage("https://i.615283.net/u/47794c.jpg").build()).queue();
t.getReaction().removeReaction(t.getUser()).queue();
}));

最佳答案

您可以使用通用事件监听器创建状态机,而不是使用 EventWaiter。

public class StateMachine extends ListenerAdapter {
private final long messageId;
private final long userId;
private final String emoji;

private int state = 0;

public StateMachine(...) {...}

@Override
public void onMessageReactionAdd(MessageReactionAddEvent event) {
if (event.getMessageIdLong() != messageId) return;
if (event.getUser().getIdLong() != userId) return;
if (!event.getReactionEmote().getName().equals(emoji)) return;
switch (state) {
case 0:
System.out.println("yes");
event.getChannel().editMessageById(messageId, ...).queue();
event.getReaction().removeReaction(event.getUser()).queue();
state = 1;
break;
case 1:
System.out.println("This is the next awaited event");
// do something here...
break;
}
}
}

然后您可以定义再次删除事件监听器的最终状态。

关于java - 重复消费者 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com