Разговор с TelegramBOT на JAVA - PullRequest
0 голосов
/ 01 мая 2020

Я сейчас работаю над Java TelegramBot, после программирования в Python. Прямо сейчас я борюсь за то, чтобы сделать поток ответов с ботом. Вот часть исходного кода:

public void reply (Update update) {

    String text = update.getMessage().getText();
    long chat_id = update.getMessage().getChatId();
    int message_id = update.getMessage().getMessageId();


    if (text.equals("/reply")) {

        SendMessage send = new SendMessage();

        send.setText("Reply to the message that you want to be responsed.")
                .setChatId(chat_id);

        try {
            execute(send);
        } catch (TelegramApiException e) {
            e.printStackTrace();
            System.out.println("Oops");
        }

        if (update.hasMessage() && update.getMessage().hasText() && message_id != update.getMessage().getMessageId()) {

            Message reply = new Message();

            if (reply.hasReplyMarkup()) {
                String response = reply.getText();
                send
                        .setText(response)
                        .setChatId(chat_id);
            }
            try {
                execute(send);
            } catch (TelegramApiException e) {
                e.printStackTrace();
                System.out.println("Oops");
            }
        }
    }
}

Вопрос в том, как зарегистрировать следующее сообщение в чате? Чтобы создать разговор с помощью простых сообщений. У меня есть json со словами, которые совпадают с возможными пользовательскими вводами.

Вот пример того же потока, но на python.

@bot.message_handler(commands=['conversor'])
def conversor(message):
    chat_id = message.chat.id

    text = ('Puedo convertir las siguientes unidades:\n'
            '1 - m --> cm\n'
            '2 - m --> mm\n'
            '3 - ft --> yardas\n'
            '4 - ft --> in\n'
            '5 - ft --> cm\n'
            '6 - ft --> m\n'

            'Solo respondeme al mensaje el numero de opción, separado del valor a convertir.\n')

    msg = bot.send_message(chat_id, text=text)
    bot.register_next_step_handler(msg, operacion)


def operacion(message):
    chat_id = message.chat.id
    msg = message.text

    answer = str.split(msg)

    option = int(answer[0])
    value = int(answer[1])

    result = functions.bot_conversor(option, value)

    bot.send_message(chat_id, result)

Я использую этот API :

https://github.com/pengrad/java-telegram-bot-api

Спасибо

1 Ответ

0 голосов
/ 04 мая 2020

Каждое сообщение в чате имеет свой номер c ID. Для простого способа работы с «будущими» сообщениями вы можете использовать message.chat.id+1, но поскольку программа некоторое время его не получит - используйте потоки с необходимыми флагами (или, если это довольно просто, то обычные sleep с ожидаемым временем получения сообщения, но тогда остальная часть кода не будет работать)

...