#3 텔레그램 봇 메세지 꾸미기 & 이미지 전송
목차
Ⅰ 텔레그램 봇 메세지 꾸미기
1. 텔레그램 봇 메세지 스타일 적용
2. 텔레그램 봇 장문 메세지 전송
Ⅱ 텔레그램 봇 이미지 전송
1. SendPhoto를 이용한 이미지 전송
[Spring] 텔레그램 봇(Telegram Bot) 만들기 #2
#2 텔레그램 봇 명령어 처리 & 메세지 발송목차Ⅰ 텔레그램 봇 명령어 처리1. 텔레그램 봇 라이브러리 분석2. 텔레그램 봇 메세지 전송3. 텔레그램 봇 명령어 처리 Ⅱ 텔레그램 봇 명령어 등록1. Bot
naimjae.tistory.com
지난 포스팅에서 텔레그램 봇의 명령어 처리 및 메세지 발송을 구현해봤습니다.
이번에는 텔레그램 봇의 텍스트 스타일 적용과 이미지 전송 방법에 대해 알아보겠습니다.
Ⅰ 텔레그램 봇 메세지 꾸미기
1. 텔레그램 봇 메세지 스타일 적용
메세지 서식 종류
텔레그램에서는 기본적으로 메세지를 보낼 때 다양한 텍스트 서식을 지원합니다.
당연하게도 텔레그램 봇 라이브러리를 이용해 메세지를 전송할 때도 전송할 텍스트에 서식 지정이 가능합니다.
텔레그램의 텍스트 서식은 Markdown 과 HTML 두 가지 형식을 지원합니다.
Markdown 형식
SendMessage 객체에 setParseMode() 메서드를 이용해 "Markdown" 형식을 추가합니다.
@Override
public void onUpdateReceived(Update update) {
// commandHandle 메서드를 통한 명령어 처리
String messageText = botHandler.commandHandle(update);
if (messageText != null) {
SendMessage message = new SendMessage();
// 텍스트 스타일 형식 지정
message.setParseMode("Markdown");
message.setChatId(update.getMessage().getChatId());
message.setText(messageText);
try {
execute(message);
} catch (TelegramApiException e) {
System.out.println("Error" + e.getMessage());
}
}
}
commandHandle 메서드에 새로운 명령어를 정의하고 Markdown 문법을 적용한 메세지를 작성합니다.
@Component
public class BotHandler {
public String commandHandle(Update update) {
String message = update.getMessage().getText();
if(message.contains("/hello")) {
return "안녕하세요. 텔레그램 봇 예제입니다.";
}else if(message.contains("/style_M")) {
return "일반 스타일 \n *굵은 스타일* \n _기울임 스타일_";
}else {
return null;
}
}
}
실행 결과
위 코드를 실행하면 Markdown 스타일이 적용된 메세지가 전송되는 것을 볼 수 있습니다.
텔레그램에서 지원하는 Markdown 문법
*굵게*
_기울임_
[링크 텍스트](URL)
`고정폭`
HTML 형식
SendMessage 객체에 setParseMode() 메서드를 이용해 "HTML" 형식을 추가합니다.
@Override
public void onUpdateReceived(Update update) {
// commandHandle 메서드를 통한 명령어 처리
String messageText = botHandler.commandHandle(update);
if (messageText != null) {
SendMessage message = new SendMessage();
// 텍스트 스타일 형식 지정
message.setParseMode("HTML");
message.setChatId(update.getMessage().getChatId());
message.setText(messageText);
try {
execute(message);
} catch (TelegramApiException e) {
System.out.println("Error" + e.getMessage());
}
}
}
commandHandle 메서드에 새로운 명령어를 정의하고 HTML 문법을 적용한 메세지를 작성합니다.
@Component
public class BotHandler {
public String commandHandle(Update update) {
String message = update.getMessage().getText();
if(message.contains("/hello")) {
return "안녕하세요. 텔레그램 봇 예제입니다.";
}else if(message.contains("/style_H")) {
return "일반 스타일 \n <b>굵은 스타일</b> \n <i>기울임 스타일</i>";
}else {
return null;
}
}
}
실행 결과
위 코드를 실행하면 HTML 스타일이 적용된 메세지가 전송되는 것을 볼 수 있습니다.
텔레그램에서 지원하는 HTML 문법
<b>굵게</b>
<i>기울임꼴</i>
<u>밑줄</u>
<s>취소선</s>
<blockquote>인용</blockquote>
<code>고정폭</code>
<a href="https://example.com">링크 텍스트</a>
setParseMode() 메서드로 원하는 텍스트 스타일 형식을 지정한 후 메세지를 꾸며서 보내면 되겠습니다.
2. 텔레그램 봇 장문 메세지 전송
List<String>을 이용한 장문 메세지 전송
지금까지 짧은 텍스트만 전송하거나 가벼운 메세지만 주고받았지만, 이제 메세지가 길어지는 경우를 살펴보겠습니다.
메세지의 길이가 길어지면 개행문자를 활용하거나 별도의 List를 사용할 수 있습니다.
이번에는 List를 이용해 장문 메세지를 전송해보겠습니다.
먼저 새로운 List를 생성한 후, List에 한 줄씩 텍스트를 담고 String.join()을 이용해 List를 문자열로 변환해 줍니다.
@Component
public class BotHandler {
public String commandHandle(Update update) {
String message = update.getMessage().getText();
if(message.contains("/hello")) {
return "안녕하세요. 텔레그램 봇 예제입니다.";
}else if(message.contains("/long_text")) {
// 여러 줄의 텍스트를 담을 List 생성
List<String> long_text = new ArrayList<>();
long_text.add("Markdown을 이용한 메세지 꾸미기");
long_text.add("\\*굵게\\* : *굵은 글씨*");
long_text.add("\\_기울임\\_ : _기울임 글씨_");
long_text.add("\\[링크](URL) : [링크](https://example.com)");
long_text.add("\\`고정폭\\` : `고정폭`");
// List를 문자열로 변환
return String.join("\n", long_text);
}else {
return null;
}
}
}
일반적인 특수문자와 Markdown 문법간의 혼동을 막기 위해 특수문자 앞에 \\을 붙여주면 기본 특수문자로 인식합니다.
실행 결과
위 코드를 실행하면 List의 요소 하나를 기준으로하여 줄바꿈된 긴 문장을 전송할 수 있습니다.
Ⅱ 텔레그램 봇 이미지 전송
1. SendPhoto를 이용한 메세지 전송
프로젝트 구조
이미지 전송을 위해 프로젝트 내에 images 디렉토리를 생성 후 전송할 이미지를 넣어줍니다.
NAEXAMPLEBOT
├─ images
│ └─ test.png
├─ src
│ └─ main
│ └─ java/com/naexamplebot
│ ├─ bot
│ │ ├─ Handler
│ │ │ └─ BotHandler.java
│ │ └─ TelegramBot.java
│ ├─ config
│ └─ TelegramBotConfig.java
명령어 생성
그리고 /image 라는 새로운 명령어를 commandHandle 메서드에서 정의해줍니다.
@Component
public class BotHandler {
public String commandHandle(Update update) {
String message = update.getMessage().getText();
if(message.contains("/hello")) {
return "안녕하세요. 텔레그램 봇 예제입니다.";
}else if(message.contains("/image")) {
List<String> long_text = new ArrayList<>();
long_text.add("*이미지 전송 테스트*\n");
long_text.add("위 이미지는 테스트 이미지입니다.");
return String.join("\n", long_text);
}else {
return null;
}
}
}
메세지 처리 및 이미지 전송 구현
마지막으로 onUpdateReceived 메서드에서 사용자가 보낸 명령어에 따른 분기 처리가 필요합니다.
메세지를 전송하기 위해 SendMessage 객체를 만들었지만, 이미지를 전송하기 위해서는 SendPhoto 객체가 필요합니다.
if문을 통해 "/image" 명령어인 경우 SendPhoto 객체를 생성하도록 합니다.
SendPhoto 객체의 setPhoto() 메서드에 전송할 이미지 File 객체를 넣어줍니다.
@Override
public void onUpdateReceived(Update update) {
// commandHandle 메서드를 통한 명령어 처리
String messageText = botHandler.commandHandle(update);
if (messageText != null) {
if (update.getMessage().getText().contains("/image")) {
// 이미지를 포함한 메세지인 경우
// 현재 프로젝트의 주소
String currentDir = Paths.get("").toAbsolutePath().toString();
// 전송할 이미지의 위치와 이름
Path imagePath = Paths.get(currentDir, "images", "test.png");
File imageFile = imagePath.toFile();
SendPhoto message = new SendPhoto();
message.setParseMode("Markdown");
message.setChatId(update.getMessage().getChatId());
message.setPhoto(new InputFile(imageFile));
message.setCaption(messageText);
try {
execute(message);
} catch (TelegramApiException e) {
System.out.println("Error" + e.getMessage());
}
}else {
// 일반 메세지인 경우
SendMessage message = new SendMessage();
message.setParseMode("Markdown");
message.setChatId(update.getMessage().getChatId());
message.setText(messageText);
try {
execute(message);
} catch (TelegramApiException e) {
System.out.println("Error" + e.getMessage());
}
}
}
}
실행 결과
위 코드를 실행하면 이미지와 메세지가 함께 전송됩니다.
지금까지 텔레그램 봇의 텍스트 스타일 적용 및 이미지 전송을 해봤습니다.
4편에서는 텔레그램 봇 메세지에 버튼 기능을 구현해보겠습니다. 😁
'Programming > Spring' 카테고리의 다른 글
[Spring] 텔레그램 봇(Telegram Bot) 만들기 #5 - Scheduled 반복 작업 구현 (0) | 2024.12.24 |
---|---|
[Spring] 텔레그램 봇(Telegram Bot) 만들기 #4 - 메세지에 버튼 구현하기 (1) | 2024.12.23 |
[Spring] 텔레그램 봇(Telegram Bot) 만들기 #2 - 명령어 처리 & 메세지 발송 (1) | 2024.12.19 |
[Spring] 텔레그램 봇(Telegram Bot) 만들기 #1 - 텔레그램 봇 생성 (0) | 2024.12.19 |