前提
导入依赖
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>4.9</version>
</dependency>
开发教程
首先我们在application.properties中添加
bot.api-key=机器人token,请找BotFather获取
bot.username=机器人昵称
接着,我们创建一个服务层继承TelegramWebhookBot(由于我设置了WebHook,由官方POST数据过来),调用properties里的数据
@Value("${bot.api-key}")
private String botToken;
@Value("${bot.username}")
private String userName;
并实现
public BotApiMethod onWebhookUpdateReceived(Update update)
public String getBotUsername()
public String getBotToken()
public String getBotPath()
底下三个没什么好说的,直接返回
@Override
public String getBotUsername() {
return userName;
}
@Override
public String getBotToken() {
return botToken;
}
@Override
public String getBotPath() {
return userName;
}
重点讲讲onWebhookUpdateReceived这个方法
public BotApiMethod onWebhookUpdateReceived
这个方法只能返回BotApiMethod里的对象
发送消息直接用SendMessage方法即可,而发送图片你仔细观察会发现没有这个方法,那么它藏在哪里?
逛了一晚上Github的相关项目,在TelegramBotsExample中发现
e x e c u t e ()
方法频繁出现(这里出现空格是因为我防火墙限制了这个单词)
一输入首当其冲的就是SendPhoto方法,那么事情就简单了
SendPhoto sendPhoto = new SendPhoto();
sendPhoto.setChatId(update.getMessage().getChat().getId());
sendPhoto.setPhoto(title,getPicBytes(uri));
e x e c u t e(sendPhoto);
WebHook
由于我设置了Webhook,得有能够接收telegram官方Post过来的Controller层才行
@RestController
@RequestMapping("public")
public class PublicController {
@Autowired
private WebHook webhook;
@RequestMapping(method = RequestMethod.POST, value = "msg", produces = MediaType.APPLICATION_JSON_VALUE)
public BotApiMethod getMsg(@RequestBody Update update) {
return webhook.onWebhookUpdateReceived(update);
}
}
这里的webhook其实就是之前继承了TelegramWebhookBot的类
那么我的连接就是https://domin.com/public/msg
注意这里的域名必须得有SSL证书,这是官方限制的
附加
如果你想根据命令来调用不同方法,在onWebhookUpdateReceived匹配就行了
@SneakyThrows
@Override
public BotApiMethod onWebhookUpdateReceived(Update update) {
if ("xxx".contains(update.getMessage().getText())){
xxx(update);
}
return null;
}
案例
版权属于:牧瀬くりす
本文链接:https://hcyacg.com/tutorial/Telegrambot.html
本站文章采用知识共享署名4.0 国际许可协议进行许可,允许非商业转载,但必须注明出处!
6 条评论
在继承webhook之后要设置相对应的地址,但是我现在是开发环境,应该怎么做呢
接收post过来的数据要有一个域名,你可以用ngrok之类的软件来将内网开放到外网。
作者大姐姐看到评论 能帮我个忙嘛 我QQ您应该能看见 关于telegram的一些问题
一个小女生做的网站就是好玩
看不懂,但还是要夸夸