电报机器人首次启动

时间:2018-10-16 13:12:00

标签: java telegram telegram-bot

我正在使用Telegram Library for Java在Java上为Telegram做一个简单的机器人。问题是,首先启动的bot出现错误:

fun startUpdates() {
    configuration.toObservable()
        .switchMap { configuration -> MyObservable(configuration) }                  
        .subscribe { //do something }
}

我认为这是因为在第一次启动时,它会将新用户添加到数据中

SEVERE: BOTSESSION
java.lang.NullPointerException
    at BotTask.onUpdateReceived(BotTask.java:52)
    at java.base/java.util.ArrayList.forEach(Unknown Source)
    at org.telegram.telegrambots.meta.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
    at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:305)

此处为图片:它应该在第一次开始时给出最后一条消息,但仅在第二次开始时给出。我认为这意味着问题不在代码中,我该如何解决?如果您对代码有更多疑问,我可以回答。 我就是这样存储用户的:

if (update.hasMessage() && update.getMessage().hasText()) {
    Message msg = update.getMessage();
    String txt = msg.getText();
    long chat_id_num = msg.getChatId();
    String chat_id = Long.toString(chat_id_num);
    var user = this.dict.get(chat_id);
    if (user != null) {
        this.i = user.currentQuestion;
        this.currentUser = user;
        this.start = user.flag;
    } else {
        String username = msg.getChat().getUserName();
        User usr = new User(chat_id, username, 0, -1, false);
        this.dict.put(chat_id, usr);
        this.counterOfUsers++;
    }


    if (txt.equals("/start")) {
        sendMsg(msg, "Привет, меня зовут бот " + name + "!");
        showHelp(msg);
        this.currentUser.setTrue();
        this.currentUser.currentQuestion = -1;
        this.currentUser.answers = new ArrayList < String > ();
        this.currentUser.setScore(0);
        String hello = "А теперь представься:";
        sendMsg(msg, hello);
    }
}

User是一个具有以下几个字段的类:ID,名称,得分,currentQuestion,标志,答案(ArrayList)。

Picture

0 个答案:

没有答案