aboutsummaryrefslogtreecommitdiff
path: root/juick-api/src/main/java/com/juick/api/TGBot.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-api/src/main/java/com/juick/api/TGBot.java')
-rw-r--r--juick-api/src/main/java/com/juick/api/TGBot.java127
1 files changed, 24 insertions, 103 deletions
diff --git a/juick-api/src/main/java/com/juick/api/TGBot.java b/juick-api/src/main/java/com/juick/api/TGBot.java
index 9f573d34..73aaa2b9 100644
--- a/juick-api/src/main/java/com/juick/api/TGBot.java
+++ b/juick-api/src/main/java/com/juick/api/TGBot.java
@@ -1,34 +1,28 @@
package com.juick.api;
-import com.juick.User;
import com.juick.json.MessageSerializer;
-import com.juick.server.MessagesQueries;
-import com.juick.server.UserQueries;
-import com.juick.server.protocol.JuickProtocol;
-import com.neovisionaries.ws.client.*;
-import com.pengrad.telegrambot.BotUtils;
+import com.juick.service.MessagesService;
+import com.juick.service.TelegramService;
+import com.neovisionaries.ws.client.WebSocket;
+import com.neovisionaries.ws.client.WebSocketAdapter;
+import com.neovisionaries.ws.client.WebSocketFactory;
+import com.neovisionaries.ws.client.WebSocketFrame;
import com.pengrad.telegrambot.Callback;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.TelegramBotAdapter;
-import com.pengrad.telegrambot.model.Message;
-import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
import com.pengrad.telegrambot.request.SendMessage;
import com.pengrad.telegrambot.response.SendResponse;
+import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.dao.EmptyResultDataAccessException;
-import org.springframework.jdbc.core.JdbcTemplate;
-import javax.servlet.http.HttpServletRequest;
-import java.io.BufferedReader;
+import javax.inject.Inject;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
import static com.juick.formatters.PlainTextFormatter.formatPost;
import static com.juick.formatters.PlainTextFormatter.formatUrl;
@@ -42,14 +36,18 @@ public class TGBot implements AutoCloseable {
TelegramBot bot;
WebSocket ws;
MessageSerializer ms = new MessageSerializer();
- JdbcTemplate jdbc;
- JuickProtocol protocol;
+ @Inject
+ TelegramService telegramService;
+ @Inject
+ MessagesService messagesService;
- public TGBot(JdbcTemplate jdbc, String token) {
- this.jdbc = jdbc;
+
+ public TGBot(String token) {
+ if (StringUtils.isBlank(token)) {
+ return;
+ }
bot = TelegramBotAdapter.build(token);
- protocol = new JuickProtocol(jdbc, "https://juick.com/");
try {
bot.setWebhook("https://api.juick.com/tlgmbtwbhk");
ws = new WebSocketFactory().createSocket("wss://ws.juick.com/");
@@ -75,18 +73,18 @@ public class TGBot implements AutoCloseable {
if (jmsg.getRid() == 0) {
String msg = formatPost(jmsg);
- List<Long> users = getSubscribers(jmsg.getUser().getUid());
- List<Long> chats = getChats();
+ List<Long> users = telegramService.getSubscribers(jmsg.getUser().getUid());
+ List<Long> chats = telegramService.getChats();
// registered subscribed users
users.forEach(c -> telegramNotify(c, msg, msgUrl));
// anonymous
- chats.stream().filter(u -> getUser(u) == 0).forEach(c -> telegramNotify(c, msg, msgUrl));
+ chats.stream().filter(u -> telegramService.getUser(u) == 0).forEach(c -> telegramNotify(c, msg, msgUrl));
} else {
// get quote
- com.juick.Message msg = MessagesQueries.getReply(jdbc, jmsg.getMid(), jmsg.getRid());
+ com.juick.Message msg = messagesService.getReply(jmsg.getMid(), jmsg.getRid());
String fmsg = formatPost(msg);
- getSubscribersToComments(jmsg.getMid(), jmsg.getUser().getUid()).forEach(c -> telegramNotify(c, fmsg, msgUrl));
+ telegramService.getSubscribersToComments(jmsg.getMid(), jmsg.getUser().getUid()).forEach(c -> telegramNotify(c, fmsg, msgUrl));
}
}
});
@@ -96,7 +94,7 @@ public class TGBot implements AutoCloseable {
}
}
- private void telegramNotify(Long c, String msg, String msgUrl) {
+ public void telegramNotify(Long c, String msg, String msgUrl) {
SendMessage telegramMessage = new SendMessage(c, msg);
if (msgUrl != null) {
telegramMessage.replyMarkup(
@@ -119,60 +117,7 @@ public class TGBot implements AutoCloseable {
});
}
- List<Long> getChats() {
- return jdbc.queryForList("SELECT chat_id FROM telegram_chats", Long.class);
- }
-
- void addChat(Long id) {
- jdbc.update("INSERT IGNORE INTO telegram_chats(chat_id) VALUES(?)", id);
- }
-
- public void doPost(HttpServletRequest request) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
- try (BufferedReader reader = request.getReader()) {
- Update update = BotUtils.parseUpdate(reader);
- Message message = update.message();
- if (update.message() == null) {
- message = update.editedMessage();
- if (message == null) {
- logger.error("error parsing telegram update: " + update.toString());
- return;
- }
- }
- logger.info(String.format("got telegram msg %s", message.toString()));
- User user_from = UserQueries.getUserByUID(jdbc, getUser(message.chat().id())).orElse(new User());
- logger.info(String.format("Found juick user %d", user_from.getUid()));
-
- List<Long> chats = getChats();
- String username = message.from().username();
- if (username == null) {
- username = message.from().firstName();
- }
- if (!chats.contains(message.chat().id())) {
- addChat(message.chat().id());
- logger.info("added chat with " + username);
- createTelegramUser(message.from().id(), username);
- telegramSignupNotify(message.from().id().longValue(), UserQueries.getSignUpHashByTelegramID(jdbc, message.from().id().longValue(), username));
- } else {
- if (user_from.getUid() == 0) {
- telegramSignupNotify(message.from().id().longValue(), UserQueries.getSignUpHashByTelegramID(jdbc, message.from().id().longValue(), username));
- } else {
- String text = message.text();
- if (text != null) {
- if (text.equalsIgnoreCase("/login")) {
- String msg = String.format("Hi, %s!\nTap to log in", user_from.getName());
- String msgUrl = "http://juick.com/login?" + UserQueries.getHashByUID(jdbc, user_from.getUid());
- telegramNotify(message.from().id().longValue(), msg, msgUrl);
- } /* else {
- ProtocolReply reply = protocol.getReply(user_from, text);
- telegramNotify(message.from().id().longValue(), reply.getDescription(), null);
- }*/
- }
- }
- }
- }
- }
-
- private void telegramSignupNotify(Long telegramId, String hash) {
+ public void telegramSignupNotify(Long telegramId, String hash) {
bot.execute(new SendMessage(telegramId,
"You are subscribed to all Juick messages. " +
"Create or link an existing Juick account to control " +
@@ -194,30 +139,6 @@ public class TGBot implements AutoCloseable {
});
}
- private boolean createTelegramUser(long tgID, String tgName) {
- return jdbc.update("INSERT INTO telegram(tg_id, tg_name, loginhash) VALUES(?,?,?)",
- tgID, tgName, UUID.randomUUID().toString()) > 0;
- }
-
- private int getUser(long tgId) {
- try {
- return jdbc.queryForObject("SELECT id FROM users INNER JOIN telegram " +
- "ON telegram.user_id = users.id WHERE telegram.tg_id=?", Integer.class, tgId);
- } catch (EmptyResultDataAccessException e) {
- return 0;
- }
- }
-
- private List<Long> getSubscribers(int uid) {
- return jdbc.queryForList("SELECT tg_id FROM telegram INNER JOIN subscr_users " +
- "ON (subscr_users.user_id=? AND telegram.user_id=subscr_users.suser_id)", Long.class, uid);
- }
-
- private List<Long> getSubscribersToComments(int mid, int ignore_uid) {
- return jdbc.queryForList("SELECT tg_id FROM telegram INNER JOIN subscr_messages " +
- "ON (telegram.user_id=subscr_messages.suser_id) WHERE message_id=? AND suser_id!=?", Long.class, mid, ignore_uid);
- }
-
@Override
public void close() throws Exception {
try {