使用TelegramLongPollingBot和线程

时间:2019-04-15 14:02:22

标签: java telegram-bot

我正在构建我的第一个电报机器人。它每5秒钟向用户发送一条消息。

虽然将其发送给一个用户,但无法从其他聊天中接收更新。

public void foo(msg, Update update){
    msg.setChatId(update.getMessage().getChatId());
    for (int i = 1; i < links.size(); i++){
        msg.setText(links.get(i));
        execute(msg);
    }
    Thread.sleep(wait * 1000);
}

如何使用线程?我尝试在这里创建多个线程

public static void bot(){

    ApiContextInitializer.init();
    TelegramBotsApi  telegramBotsApi = new TelegramBotsApi();
    try {
        telegramBotsApi.registerBot(new myBot());
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }

但是他尝试创建多个机器人并失败了。如果这是可运行的函数,则相同:

我该怎么办?我被卡住了我无法在其他线程中创建此功能

public void onUpdateReceived(Update update) {

    leggi(new SendMessage(), update.getMessage().getText(),  update);

    //.setChatId(update.getMessage().getChatId())


public void  leggi(SendMessage msg, String command, Update update){ 
    if(command.equals("test") {
        foo( msg, update);
    }

这里是完整代码... https://github.com/siamoInPochi/Ilsottomarinobot/tree/prova/src/main/java/Ilsottomarinobot

2 个答案:

答案 0 :(得分:0)

如果为要接收消息的每个bot用户生成线程,则在用户数量众多的情况下,您将很快失去计算机资源。因此,我认为线程不是完成任务的好主意。

在我看来,更自然的方法是:

  • 使用HTTP服务器查找库。
  • GetUpdates切换到Webhook。
  • send-message-to-user-every-5-seconds任务安排到服务器的事件循环中。
  • 每5秒钟异步发送一条消息。

答案 1 :(得分:0)

您可以使用此库https://github.com/pengrad/java-telegram-bot-api

<dependency>
  <groupId>com.github.pengrad</groupId>
  <artifactId>java-telegram-bot-api</artifactId>
  <version>4.2.0</version>
</dependency>
  1. 通过bot.setUpdatesListener订阅新更新
  2. 通过bot.execute(new SendMessage(chatId, link), callback)发送消息

完整的示例:

static String[] links = {"1", "2", "3"};

static Callback emptyCallback = new Callback() {
    @Override
    public void onResponse(BaseRequest request, BaseResponse response) {
    }

    @Override
    public void onFailure(BaseRequest request, IOException e) {
        e.printStackTrace();
    }
};

static void foo(TelegramBot bot, Update update) {
    Message message = update.message();
    if (message == null) return;

    Long chatId = message.chat().id();
    for (String link : links) {
        bot.execute(new SendMessage(chatId, link), emptyCallback);
    }
}

public static void main(String[] args) {
    TelegramBot bot = new TelegramBot(TOKEN);

    bot.setUpdatesListener(updates -> {
        for (Update update : updates) {
            foo(bot, update);
        }
        return UpdatesListener.CONFIRMED_UPDATES_ALL;
    });
}