
Java实现telegram机器人的自动回复
要实现机器人的自动回复,首先要创建一个机器人,并获取机器人TOKEN。
·
效果演示:
- 输入/help
机器人自动回复支持的功能:
<1> /help 帮助文档
<2> /getUser 获取用户信息
<3> /getChatId 获取chatId
- 输入/getUser
机器人:返回发送消息用户的基本信息
要实现机器人的自动回复,首先要创建一个机器人,并获取机器人TOKEN。
1. 创建 Telegram 机器人
创建步骤:
- 找到BotFather:打开你的Telegram 应用:在 Telegram 上搜索 BotFather,它是官方用于创建和管理 Telegram 机器人的机器人。
- 创建新机器人: 向 BotFather 发送 /newbot 命令。
按照指示输入机器人名称(可以随便取名)和用户名(必须以 bot 结尾,例如:my_example_bot)。- 获取 API 密钥: 创建完机器人后,BotFather 会返回一个 API 密钥(token),格式类似:123456789:ABCDEFghijklmnopQRstuvWXYz1234567890.
记下这个 API 密钥,因为它将用于后续与 Telegram 服务器的交互。
2. 机器人自动回复服务端开发
有了机器人Token我们就可以进行后台服务开发了。
- 首先我们在项目中引入telegram的maven依赖
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.3.0</version>
</dependency>
</dependencies>
- 机器人初始化: 编写一个继承自 TelegramLongPollingBot 的类来实现你的机器人。
**onUpdateReceived()方法:**这个是自动回复的关键方法,该方法可以收到机器人所在群组的消息,我们可以通过这个方法知道群组里面发了什么消息,并对应的回复。
**sendMsg()方法:**发送消息,参数text为你需要发送的内容,chatId为发送内容到所在的群组。
import com.wds.codebook.common.utils.JacksonUtils;
import lombok.extern.slf4j.Slf4j;
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Message;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.User;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
/**
* telegram机器人初始化
* @author: wds
* @DateTime: 2024/11/22 10:13
*/
@Slf4j
public class TelegramBot extends TelegramLongPollingBot {
private String mToken;
private String mUsername;
public TelegramBot(String token, String username, DefaultBotOptions options) {
super(options);
mToken = token;
mUsername = username;
}
@Override
public String getBotUsername() {
return mUsername;
}
@Override
public String getBotToken() {
return mToken;
}
@Override
public void onUpdateReceived(Update update) {
// 检查是否是消息更新
if (update.hasMessage() && update.getMessage().hasText()) {
Message message = update.getMessage();
log.info("message:" + JacksonUtils.toJson(message));
Long chatId = message.getChatId();
String text = message.getText();
String autoReplyMsg = "自动回复消息";
if (text.startsWith("/help")) {
autoReplyMsg = "<1> /help 帮助文档 \n"
+ "<2> /getUser 获取用户信息 \n"
+ "<3> /getChatId 获取chatId \n";
}
if (text.startsWith("/getChatId")) {
autoReplyMsg = "ChatId:" + chatId;
}
if (text.startsWith("/getUser")) {
User user = update.getMessage().getFrom();
autoReplyMsg = JacksonUtils.toJson(user);
}
sendMsg(autoReplyMsg, chatId);
}
}
//发送消息
public void sendMsg(String text, Long chatId) {
if (null == mUsername || null == mToken) {
log.error("TelegramInit sendMsg no set token or username!");
return;
}
SendMessage response = new SendMessage();
response.setChatId(String.valueOf(chatId));
response.setText(text);
try {
execute(response);
} catch (TelegramApiException e) {
log.debug("TelegramInit sendMsg error:" + e.getLocalizedMessage());
}
}
}
- 启动机器人: 实现springboot的InitializingBean接口来启动
还可以设置代理的方式在本地IDEA启动该服务。可以将本地代理设置DefaultBotOptions对应参数,代理支持 HTTP 或 SOCKS5两种模式。
import com.wds.codebook.telegram.config.TelegramBot;
import com.wds.codebook.telegram.config.TelegramConfig;
import com.wds.codebook.telegram.config.TelegramProxyConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
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;
import java.util.Objects;
/**
* telegram 发送消息
* @author: wds
* @DateTime: 2024/11/22 10:12
*/
@Slf4j
@Component
public class TelegramSender implements InitializingBean {
private TelegramBot mTelegramBot;
@Resource
TelegramConfig telegramConfig;
@Resource
TelegramProxyConfig telegramProxyConfig;
@Override
public void afterPropertiesSet(){
// 配置代理
DefaultBotOptions botOptions = new DefaultBotOptions();
// 设置代理类型和地址
botOptions.setProxyHost(telegramProxyConfig.getHost()); // 替换为您的代理地址
botOptions.setProxyPort(telegramProxyConfig.getPort()); // 替换为您的代理端口
botOptions.setProxyType(DefaultBotOptions.ProxyType.SOCKS5); // 支持 HTTP 或 SOCKS5
try {
log.debug("TelegramInit afterPropertiesSet start!");
TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
mTelegramBot = new TelegramBot(telegramConfig.getToken(), telegramConfig.getUsername(),botOptions);
telegramBotsApi.registerBot(mTelegramBot);
log.debug("TelegramInit afterPropertiesSet start!");
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
@Data
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "telegram.config.proxy")
public class TelegramProxyConfig {
private String host = "127.0.0.1";
private Integer port = 21881;
}
@Data
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "telegram.config")
public class TelegramConfig {
private String token = "xxx:xxxxx";
private String username ="xxx_bot";
}
更多推荐
所有评论(0)