Skip to content

Commit db09145

Browse files
committed
add plotting
1 parent d83f086 commit db09145

File tree

4 files changed

+89
-23
lines changed

4 files changed

+89
-23
lines changed

src/main/java/org/example/project/configuration/BotKeyboardConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public ReplyKeyboardMarkup mainMenuKeyboard() {
2626

2727
KeyboardRow row3 = new KeyboardRow();
2828
row3.add(new KeyboardButton("/leetcode"));
29+
row3.add(new KeyboardButton("/investplot"));
2930

3031
keyboard.add(row1);
3132
keyboard.add(row2);
Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
1-
//package org.example.project.service;
2-
//
3-
//import org.springframework.stereotype.Service;
4-
//
5-
//import java.net.URI;
6-
//import java.net.URISyntaxException;
7-
//import java.net.http.HttpClient;
8-
//import java.net.http.HttpRequest;
9-
//
10-
//@Service
11-
//public class StoncksPlotService {
12-
//
13-
// public String getPlotImage(String period) throws URISyntaxException {
14-
// HttpClient client = HttpClient.newHttpClient();
15-
// String pythonServiceUrl = "http://localhost:8000/plot?period=" + period;
16-
// HttpRequest request = HttpRequest.newBuilder()
17-
// .uri(new URI(pythonServiceUrl))
18-
// .GET()
19-
// .build();
20-
// RestTemplate restTemplate = new RestTemplate();
21-
// return restTemplate.getForObject(pythonServiceUrl, String.class);
22-
// }
23-
//}
1+
package org.example.project.service;
2+
3+
import org.springframework.stereotype.Service;
4+
5+
import java.net.URI;
6+
import java.net.http.HttpClient;
7+
import java.net.http.HttpRequest;
8+
import java.net.http.HttpResponse;
9+
10+
@Service
11+
public class StoncksPlotService {
12+
13+
public String getPlotImage(String period) {
14+
try {
15+
HttpClient client = HttpClient.newHttpClient();
16+
String pythonServiceUrl = "http://zealous_grothendieck:8000/plot?period=week";
17+
HttpRequest request = HttpRequest.newBuilder()
18+
.uri(new URI(pythonServiceUrl))
19+
.GET()
20+
.build();
21+
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
22+
return response.body();
23+
} catch (Exception e) {
24+
e.printStackTrace();
25+
}
26+
return "";
27+
}
28+
}

src/main/java/org/example/project/service/TelegramMessageSender.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66
import org.telegram.telegrambots.meta.api.methods.ParseMode;
77
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
88
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
9+
import org.telegram.telegrambots.meta.api.methods.send.SendPhoto;
10+
import org.telegram.telegrambots.meta.api.objects.InputFile;
911
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup;
1012
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
1113

14+
import java.io.ByteArrayInputStream;
15+
import java.util.Base64;
16+
1217
@Slf4j
1318
@Component
1419
public class TelegramMessageSender implements MessageSender{
@@ -79,4 +84,27 @@ private String[] splitString(String str, int length) {
7984

8085
}
8186

87+
public void sendPlotToUser(Long chatId, String htmlResponse) {
88+
try {
89+
String base64Prefix = "data:image/png;base64,";
90+
int startIndex = htmlResponse.indexOf(base64Prefix) + base64Prefix.length();
91+
int endIndex = htmlResponse.indexOf("\"", startIndex);
92+
String base64Image = htmlResponse.substring(startIndex, endIndex);
93+
94+
byte[] imageBytes = Base64.getDecoder().decode(base64Image);
95+
96+
InputFile photo = new InputFile(new ByteArrayInputStream(imageBytes), "plot.png");
97+
98+
SendPhoto sendPhoto = SendPhoto.builder()
99+
.chatId(chatId.toString())
100+
.photo(photo)
101+
.caption("График изменения портфеля")
102+
.build();
103+
104+
bot.execute(sendPhoto);
105+
} catch (TelegramApiException e) {
106+
e.printStackTrace();
107+
}
108+
}
109+
82110
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.example.project.service.command.main;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import lombok.extern.slf4j.Slf4j;
5+
import org.example.project.domain.Users;
6+
import org.example.project.service.StoncksPlotService;
7+
import org.example.project.service.TelegramMessageSender;
8+
import org.example.project.service.UserService;
9+
import org.example.project.service.command.CommandHandler;
10+
import org.springframework.stereotype.Component;
11+
import org.telegram.telegrambots.meta.api.objects.Update;
12+
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup;
13+
14+
@Slf4j
15+
@Component
16+
@RequiredArgsConstructor
17+
public class InvestPlotHandler implements MainCommandHandler, CommandHandler {
18+
private final ReplyKeyboardMarkup mainMenuKeyboard;
19+
private final TelegramMessageSender messageSender;
20+
private final StoncksPlotService stoncksPlotService;
21+
22+
@Override
23+
public boolean canHandle(String command) {
24+
return command.equals("/investplot");
25+
}
26+
27+
@Override
28+
public void handleCommand(long chatId, Update update) {
29+
String plot = stoncksPlotService.getPlotImage("week");
30+
messageSender.sendPlotToUser(chatId, plot);
31+
}
32+
}

0 commit comments

Comments
 (0)