不和谐的JDA。 Bot等待用户回应(针对多个问题)

时间:2018-09-26 04:25:05

标签: java discord

我正在使用JDA library编写Discord机器人,但遇到了一个相当普遍的问题。

我需要编写一种方法,该方法将读取/addperson命令(/addperson之后没有任何其他信息),然后将消息“您叫什么名字”发送到同一聊天室

目前,该漫游器会期望用户的响应(不会干扰其他用户使用其他 TextChannels 中的漫游器功能)。

可能发生的事件:

  1. 如果用户向机器人发送了正确的名称(例如Tony),则机器人应移至下一个问题。
  2. 如果用户发送给机器人的错误名称(例如21324),则机器人会反复询问用户名或等待/end命令。 / li>
  3. 如果用户在X秒内未响应该漫游器,则漫游器将停止等待该用户的响应,并通知他该漫游器不再期望该用户的响应。
  4. li>

更新№1

我将ExampleBot中的代码添加到了我的项目中。很难在JDA-Utilities库中找到信息,因此我为以下几个问题编写了示例代码:

public class TestLoop extends Command {

    private EventWaiter waiter;
    private Database database;

    public TestLoop(Database database, EventWaiter waiter) {
        this.waiter = waiter;
        this.name = "addperson";
        this.help = "add person to server";
        this.database = database;
    }

    @Override
    protected void execute(CommandEvent event)
    {
        // ask what is the user's name
        event.reply("What is your name?");

        // wait for a response
        waiter.waitForEvent(MessageReceivedEvent.class,
                e -> e.getAuthor().equals(event.getAuthor()) && e.getChannel().equals(event.getChannel()),

                e -> {
                    e.getChannel().sendMessage("Thank you, `" + e.getMessage().getContentRaw() + "`. What is your age?").queue();
                    waiter.waitForEvent(MessageReceivedEvent.class,
                            w -> w.getAuthor().equals(e.getAuthor()) && w.getChannel().equals(e.getChannel()),
                            w -> w.getChannel().sendMessage("So, you,re `" + e.getMessage().getContentRaw() + "` and your age is `" + w.getMessage().getContentRaw() + "`").queue());
                },

            // if the user takes more than a minute, time out
            10, TimeUnit.SECONDS, () -> event.reply("Sorry, you took too long."));
    }
}

我有两个问题: -我该如何写多个问题并给出答案? -如何防止漫游器在执行当前命令时读取命令?

0 个答案:

没有答案