Springboot TelegramBots 机器人

本文介绍了如何使用SpringBoot创建一个Telegram机器人,包括设置代理、配置BotOptions和BotSession,以及实现自定义消息处理逻辑。重点在于通过@TelegramLongPollingBot类集成Telegram API,并展示了如何响应特定指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TelegramBots 机器人

  1. 申请机器人
    telegram网页版
    扫码登录,再搜索 @BotFather
    在这里插入图片描述
    搜索到后打开会话
    在这里插入图片描述
  2. 自定义机器人
    我们需要创建一个springboot项目,并引入依赖,下面是GitHub的地址:
    TelegramBots
    <dependency>
        <groupId>org.telegram</groupId>
        <artifactId>telegrambots</artifactId>
        <version>5.7.1</version>
    </dependency>

创建配置类

package com.ddz.demo20220329.config;

import lombok.SneakyThrows;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;

/**
 * @author Administrator
 * @version V1.0
 * @date 2022/4/9
 */
@Configuration
public class BotConfig {
	// 梯子的IP,我的是本地的
    public static final String proxyHost = "127.0.0.1";
    // 本地监听的端口
    public static final int proxyPort = 10801;

    @Bean
    public DefaultBotOptions defaultBotOptions() {
        DefaultBotOptions botOptions = new DefaultBotOptions();
        botOptions.setProxyHost(proxyHost);
        botOptions.setProxyPort(proxyPort);
        //ProxyType是个枚举
        botOptions.setProxyType(DefaultBotOptions.ProxyType.SOCKS5);
        return botOptions;
    }

    @Bean
    public DefaultBotSession DefaultBotSession() {
        DefaultBotSession defaultBotSession = new DefaultBotSession();
        defaultBotSession.setOptions(defaultBotOptions());
        return defaultBotSession;
    }

    @SneakyThrows
    @Bean
    public TelegramBotsApi telegramBotsApi() {
        return new TelegramBotsApi(DefaultBotSession().getClass());
    }
}

创建自定义机器人,继承 TelegramLongPollingBot 类

	 //填你自己的token和username
    private final String token = "*****";
    private final String username = "*****";

    public DdzBot(DefaultBotOptions options) {
        super(options);
    }

    @Override
    public String getBotToken() {
        return this.token;
    }

    @Override
    public String getBotUsername() {
        return this.username;
    }

    /**
     * 监听机器人的消息
     */
    @SneakyThrows
    @Override
    public void onUpdateReceived(Update update) {
        if (update.hasMessage()) {
            Message message = update.getMessage();
            Long chatId = message.getChatId();
            String text = message.getText();
            switch (text) {
                case "/a":
                    text = "AAAAAAAAAA";
                    break;
                case "/b":
                    text = "BBBBBBBBBB";
                    break;
                case "/c":
                    text = "CCCCCCCCCC";
                    break;
                default:
                    text = "不处理该类指令";
                    break;
            }
            this.sendTextMsg(text, chatId.toString());
        }
    }


    /**
     * 发送文本消息
     *
     * @param text   内容
     * @param chatId 内容ID
     */
    @SneakyThrows
    @Async
    public void sendTextMsg(String text, String chatId) {
        SendMessage response = new SendMessage();
        response.setDisableNotification(false);
        response.setChatId(chatId);
        response.setText(text);
        executeAsync(response);
    }
}

创建控制器启动服务

package com.ddz.demo20220329.controller;

import com.ddz.demo20220329.bot.DdzBot;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;

import javax.annotation.Resource;

/**
 * @author Administrator
 * @version V1.0
 * @date 2022/4/9
 */
@RestController
public class BotController {
    @Resource
    private TelegramBotsApi telegramBotsApi;
    @Resource
    private DefaultBotOptions defaultBotOptions;

    @GetMapping("start")
    public String start() {
        try {
            DdzBot ddzBot = new DdzBot(defaultBotOptions);
            telegramBotsApi.registerBot(ddzBot);
        } catch (TelegramApiException e) {
            return "启动失败";
        }
        return "启动成功";
    }
}

要在Spring Boot中注册Telegram机器人,你需要遵循以下步骤: 1. 首先,你需要创建一个Telegram Bot账号,可以通过联系BotFather创建。 2. 在Spring Boot应用程序中,你需要添加Telegram Bot库。可以使用TelegramBots库来实现这一点。 3. 在你的应用程序中添加Telegram Bot的配置,包括Bot的token和Webhook URL。可以使用@BotConfiguration注释来实现这一点。 4. 创建一个WebhookController类并添加一个@PostMapping方法。该方法应该处理来自Telegram的所有请求。 5. 在你的应用程序中,启动Webhook并将其链接到Telegram Bot API。可以使用TelegramBots库中的WebhookUtils类来实现这一点。 6. 最后,你需要启动你的Spring Boot应用程序。 下面是一个简单的示例代码,演示如何在Spring Boot中注册Telegram机器人: ``` @BotConfiguration public class TelegramBotConfig { @Value("${telegram.bot.token}") private String botToken; @Value("${telegram.bot.webhook-url}") private String webhookUrl; @Bean public TelegramBot telegramBot() { TelegramBotsApi telegramBotsApi = new TelegramBotsApi(); try { TelegramBot telegramBot = new MyTelegramBot(botToken); telegramBotsApi.registerBot(telegramBot); telegramBot.setWebhook(webhookUrl); return telegramBot; } catch (TelegramApiException e) { e.printStackTrace(); return null; } } } @RestController public class WebhookController { @PostMapping("${telegram.bot.webhook-url}") public ResponseEntity<Object> handleUpdate(@RequestBody Update update) { // 处理来自Telegram的请求 return ResponseEntity.ok().build(); } } @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在这个例子中,我们创建了一个名为MyTelegramBot的TelegramBot类,并将它注册到Telegram Bot API中。我们还创建了一个名为WebhookController的类,用于处理来自Telegram的请求。最后,我们在Spring Boot应用程序中启动Webhook,并将它链接到Telegram Bot API中。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LOVE_DDZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值