aboutsummaryrefslogtreecommitdiff
path: root/juick-api/src/main/java/com/juick/api/controllers
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-01-18 11:17:09 +0300
committerGravatar Vitaly Takmazov2018-01-18 11:17:09 +0300
commit8f6c6bfb65b9096ddbed73baab47249b21981cc8 (patch)
tree409f73247349e8c056851ab17ddca09655fc5a3a /juick-api/src/main/java/com/juick/api/controllers
parent3f43b6a4d61ee2d75906c7ffffc70b7f666fd34c (diff)
api: telegram bot refactoring
Diffstat (limited to 'juick-api/src/main/java/com/juick/api/controllers')
-rw-r--r--juick-api/src/main/java/com/juick/api/controllers/TelegramWebhook.java135
1 files changed, 1 insertions, 134 deletions
diff --git a/juick-api/src/main/java/com/juick/api/controllers/TelegramWebhook.java b/juick-api/src/main/java/com/juick/api/controllers/TelegramWebhook.java
index 034a8acf..31e7b4ea 100644
--- a/juick-api/src/main/java/com/juick/api/controllers/TelegramWebhook.java
+++ b/juick-api/src/main/java/com/juick/api/controllers/TelegramWebhook.java
@@ -17,42 +17,18 @@
package com.juick.api.controllers;
-import com.juick.User;
-import com.juick.api.ApiServer;
import com.juick.api.TelegramBotManager;
-import com.juick.server.util.HttpUtils;
-import com.juick.service.TelegramService;
-import com.juick.service.UserService;
-import com.pengrad.telegrambot.BotUtils;
-import com.pengrad.telegrambot.model.Message;
-import com.pengrad.telegrambot.model.MessageEntity;
-import com.pengrad.telegrambot.model.PhotoSize;
-import com.pengrad.telegrambot.model.Update;
-import com.pengrad.telegrambot.request.GetFile;
-import com.pengrad.telegrambot.response.GetFileResponse;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.util.UriComponents;
-import org.springframework.web.util.UriComponentsBuilder;
import springfox.documentation.annotations.ApiIgnore;
import javax.inject.Inject;
import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Optional;
/**
* Created by vt on 24/11/2016.
@@ -60,122 +36,13 @@ import java.util.Optional;
@ApiIgnore
@RestController
public class TelegramWebhook {
- private static Logger logger = LoggerFactory.getLogger(TelegramWebhook.class);
- @Inject
- private UserService usersService;
- @Inject
- private TelegramService telegramService;
@Inject
private TelegramBotManager telegramBotManager;
- @Inject
- private ApiServer apiServer;
- @Value("${upload_tmp_dir:/var/www/juick.com/i/tmp/}")
- private String tmpDir;
-
@RequestMapping(value = "/tlgmbtwbhk", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void processUpdate(InputStream body) throws Exception {
String data = IOUtils.toString(body, StandardCharsets.UTF_8);
- logger.info("got telegram msg: {}", data);
- Update update = BotUtils.parseUpdate(data);
- Message message = update.message();
- if (update.message() == null) {
- message = update.editedMessage();
- if (message == null) {
- logger.error("error parsing telegram update: {}", update);
- return;
- }
- }
- User user_from = usersService.getUserByUID(telegramService.getUser(message.chat().id())).orElse(new User());
- logger.info("Found juick user {}", user_from.getUid());
-
- List<Long> chats = telegramService.getChats();
- String username = message.from().username();
- if (username == null) {
- username = message.from().firstName();
- }
- if (!chats.contains(message.chat().id())) {
- telegramService.addChat(message.chat().id());
- logger.info("added chat with {}", username);
- telegramService.createTelegramUser(message.from().id(), username);
- telegramBotManager.telegramSignupNotify(message.from().id().longValue(), usersService.getSignUpHashByTelegramID(message.from().id().longValue(), username));
- } else {
- if (user_from.getUid() == 0) {
- telegramBotManager.telegramSignupNotify(message.from().id().longValue(), usersService.getSignUpHashByTelegramID(message.from().id().longValue(), username));
- } else {
- String attachment = StringUtils.EMPTY;
- if (message.photo() != null) {
- String fileId = Arrays.stream(message.photo()).max(Comparator.comparingInt(PhotoSize::fileSize))
- .orElse(new PhotoSize()).fileId();
- if (StringUtils.isNotEmpty(fileId)) {
- GetFile request = new GetFile(fileId);
- GetFileResponse response = telegramBotManager.getBot().execute(request);
- logger.info("got file {}", response.file());
- URL fileURL = new URL(telegramBotManager.getBot().getFullFilePath(response.file()));
- attachment = HttpUtils.downloadImage(fileURL, tmpDir);
- logger.info("received {}", attachment);
- }
- }
- String text = message.text();
- if (StringUtils.isBlank(text)) {
- text = message.caption();
- }
- if (StringUtils.isBlank(text)) {
- text = StringUtils.EMPTY;
- }
- if (StringUtils.isNotEmpty(text) || StringUtils.isNotEmpty(attachment)) {
- if (text.equalsIgnoreCase("/login") || text.equalsIgnoreCase("/start")
- || text.equalsIgnoreCase("/help")) {
- String msgUrl = "http://juick.com/login?" + usersService.getHashByUID(user_from.getUid());
- String msg = String.format("Hi, %s!\nYou can post messages and images to Juick there.\n" +
- "Tap to [log into website](%s) to get more info", user_from.getName(), msgUrl);
- telegramBotManager.telegramNotify(message.from().id().longValue(), msg);
- } else {
- Message replyMessage = message.replyToMessage();
- if (replyMessage != null) {
- if (replyMessage.entities() != null) {
- Optional<MessageEntity> juickLink = Arrays.stream(replyMessage.entities())
- .filter(this::isJuickLink)
- .findFirst();
- if (juickLink.isPresent()) {
- if (StringUtils.isNotEmpty(juickLink.get().url())) {
- UriComponents uriComponents = UriComponentsBuilder.fromUriString(
- juickLink.get().url()).build();
- String path = uriComponents.getPath();
- if (StringUtils.isNotEmpty(path) && path.length() > 1) {
- int mid = Integer.valueOf(path.substring(1));
- String prefix = String.format("#%d ", mid);
- if (StringUtils.isNotEmpty(uriComponents.getFragment())) {
- int rid = Integer.valueOf(uriComponents.getFragment());
- prefix = String.format("#%d/%d ", mid, rid);
- }
- apiServer.processMessage(user_from, prefix + text, attachment);
- telegramBotManager.telegramNotify(message.from().id().longValue(), "Reply sent");
- } else {
- logger.warn("invalid path: {}", path);
- }
- } else {
- logger.warn("invalid entity: {}", juickLink);
- }
- } else {
- telegramBotManager.telegramNotify(message.from().id().longValue(),
- "Can not reply to this message", replyMessage.messageId());
- }
- } else {
- telegramBotManager.telegramNotify(message.from().id().longValue(),
- "Can not reply to this message", replyMessage.messageId());
- }
- } else {
- apiServer.processMessage(user_from, text, attachment);
- telegramBotManager.telegramNotify(message.from().id().longValue(), "Message sent");
- }
- }
- }
- }
- }
- }
- boolean isJuickLink(MessageEntity e) {
- return e.offset() == 0 && e.type().equals(MessageEntity.Type.text_link) && e.length() == 2;
+ telegramBotManager.processUpdate(data);
}
}