我正在使用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)。