最近因为业务需要,研究了一下telegram 机器人,网上找了很多资料,但是关于java 方面的都很少
在这里把自己的心得分享一下

添加maven依赖

<dependency>
        <groupId>org.telegram</groupId>
        <artifactId>telegrambots</artifactId>
        <version>4.1</version>
    </dependency>

获取TOKEN 和 USERNAME

  1. 在telegram 查找 @botfather 点击 start 进入
  2. 输入 /newbot 按提示输入name,username创建机器人
  3. 记录下token和username

Telegram API的所有查询都必须通过HTTPS提供,并且需要以这种形式呈现:

https://api.telegram.org/bot+TOKEN/METHOD_NAME

例:

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

核心代码

telegram bot 接受信息有2种实现方式

  1. Long Polling Bot 长轮询的方式,每隔一段时间主动请求telegram
  2. webhook 方式,telegram 主动下发

这里我们使用第一种方式 继承 TelegramLongPollingBot

public class MyBot extends TelegramLongPollingBot {
    @Override
    public String getBotUsername() {
        // 填写username
        return "xxx";
    }

    @Override
    public String getBotToken() {
        // 填写token
        return "xxx";
    }

    @Override
    public void onUpdateReceived(Update update) {
        if (update.hasMessage() && update.getMessage().hasText()) {
            SendMessage message = new SendMessage()
                    .setChatId(update.getMessage().getChatId())
                    .setText("回复的内容");
            try {
                execute(message);
            } catch (TelegramApiException e) {
                e.printStackTrace();
            }
        }
    }

注册机器人

启动main方法机器人就可以工作啦

public class Main {
    public static void main(String[] args) {
        // 初始化Api上下文
        ApiContextInitializer.init();
        // 实例化Telegram Bots API
        TelegramBotsApi botsApi = new TelegramBotsApi();
        try {
            // 注册我们的机器人
            botsApi.registerBot(new MyBot());
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
}

其他

还有好多方法比如发送照片,音乐,设置内联button,获取group成员(首先要在@botfather处设置/setjoingroupsenable,然后把机器人拉进对应的组)等

请参考 Telegram Bot API

这里以获取group成员为例

// 获取group内成员
    private void getChatMember() throws TelegramApiException {
        DefaultAbsSender sender = new DefaultAbsSender(new DefaultBotOptions()) {
            @Override
            public String getBotToken() {
                return "xxx";
            }
        };
        GetChatMember getChatMember = new GetChatMember();
        getChatMember.setChatId("xxx").setUserId(123);
        ChatMember chatMember = sender.execute(getChatMember);
    }