Init commit
This commit is contained in:
commit
e400942a69
111
.gitignore
vendored
Normal file
111
.gitignore
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### Java template
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
|
||||||
|
### Maven template
|
||||||
|
target/
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
|
||||||
|
### JetBrains template
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/usage.statistics.xml
|
||||||
|
.idea/**/dictionaries
|
||||||
|
.idea/**/shelf
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
.idea/**/dbnavigator.xml
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Gradle and Maven with auto-import
|
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
# auto-import.
|
||||||
|
# .idea/artifacts
|
||||||
|
# .idea/compiler.xml
|
||||||
|
# .idea/jarRepositories.xml
|
||||||
|
# .idea/modules.xml
|
||||||
|
# .idea/*.iml
|
||||||
|
# .idea/modules
|
||||||
|
# *.iml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
# File-based project format
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# Editor-based Rest Client
|
||||||
|
.idea/httpRequests
|
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file
|
||||||
|
.idea/caches/build_file_checksums.ser
|
61
bot/pom.xml
Normal file
61
bot/pom.xml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.sadtech.telegram</groupId>
|
||||||
|
<artifactId>telegram-bot</artifactId>
|
||||||
|
<version>0.0.1-DEVELOPER</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>8</source>
|
||||||
|
<target>8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.sadtech.social</groupId>
|
||||||
|
<artifactId>social-bot</artifactId>
|
||||||
|
<version>1.0.0-RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambots</artifactId>
|
||||||
|
<version>4.9.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.telegram/telegrambots-abilities -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambots-abilities</artifactId>
|
||||||
|
<version>4.6</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambotsextensions</artifactId>
|
||||||
|
<version>4.4.0.1</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<developers>
|
||||||
|
<developer>
|
||||||
|
<id>uPagge</id>
|
||||||
|
<name>Struchkov Mark</name>
|
||||||
|
<organization>SADTECH</organization>
|
||||||
|
<email>upagge@mail.ru</email>
|
||||||
|
</developer>
|
||||||
|
</developers>
|
||||||
|
|
||||||
|
</project>
|
31
bot/src/main/java/org/sadtech/telegram/bot/ProxyConfig.java
Normal file
31
bot/src/main/java/org/sadtech/telegram/bot/ProxyConfig.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package org.sadtech.telegram.bot;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [30.01.2020]
|
||||||
|
*/
|
||||||
|
@Builder
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ProxyConfig {
|
||||||
|
|
||||||
|
private String host;
|
||||||
|
private Integer port;
|
||||||
|
private String user;
|
||||||
|
private String password;
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
public enum Type {
|
||||||
|
SOCKS5, SOCKS4, HTTP
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
18
bot/src/main/java/org/sadtech/telegram/bot/TelegramBot.java
Normal file
18
bot/src/main/java/org/sadtech/telegram/bot/TelegramBot.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package org.sadtech.telegram.bot;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.sadtech.telegram.bot.listen.EventDistributorImpl;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание интерфейса.
|
||||||
|
*
|
||||||
|
* @author upagge [12.02.2020]
|
||||||
|
*/
|
||||||
|
public interface TelegramBot {
|
||||||
|
|
||||||
|
AbsSender getAdsSender();
|
||||||
|
|
||||||
|
void initEventDistributor(@NonNull EventDistributorImpl eventDistributor);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
//package org.sadtech.telegram.bot;
|
||||||
|
//
|
||||||
|
//import lombok.NonNull;
|
||||||
|
//import lombok.RequiredArgsConstructor;
|
||||||
|
//import org.sadtech.telegram.bot.config.TelegramWebHookConfig;
|
||||||
|
//import org.sadtech.telegram.bot.listen.EventDistributor;
|
||||||
|
//import org.sadtech.telegram.bot.listen.EventDistributorImpl;
|
||||||
|
//import org.telegram.telegrambots.bots.TelegramWebhookBot;
|
||||||
|
//import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
||||||
|
//import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
//import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * TODO: Добавить описание класса.
|
||||||
|
// *
|
||||||
|
// * @author upagge [12.02.2020]
|
||||||
|
// */
|
||||||
|
//@RequiredArgsConstructor
|
||||||
|
//public class TelegramHookBot extends TelegramWebhookBot implements TelegramBot {
|
||||||
|
//
|
||||||
|
// private final TelegramWebHookConfig webHookConfig;
|
||||||
|
// private EventDistributor eventDistributor;
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public BotApiMethod onWebhookUpdateReceived(Update update) {
|
||||||
|
// return eventDistributor.processing(update);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public String getBotUsername() {
|
||||||
|
// return webHookConfig.getBotUsername();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public String getBotToken() {
|
||||||
|
// return webHookConfig.getBotToken();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public String getBotPath() {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public AbsSender getAdsSender() {
|
||||||
|
// return this;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public void initEventDistributor(@NonNull EventDistributorImpl eventDistributor) {
|
||||||
|
// this.eventDistributor = eventDistributor;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
@ -0,0 +1,60 @@
|
|||||||
|
package org.sadtech.telegram.bot;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.sadtech.telegram.bot.config.TelegramPollingConfig;
|
||||||
|
import org.sadtech.telegram.bot.listen.EventDistributor;
|
||||||
|
import org.sadtech.telegram.bot.listen.EventDistributorImpl;
|
||||||
|
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
||||||
|
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [15/07/2019]
|
||||||
|
*/
|
||||||
|
public class TelegramPollingBot extends TelegramLongPollingBot implements TelegramBot {
|
||||||
|
|
||||||
|
private final TelegramPollingConfig telegramPollingConfig;
|
||||||
|
private EventDistributor eventDistributor;
|
||||||
|
|
||||||
|
public TelegramPollingBot(TelegramPollingConfig telegramPollingConfig, DefaultBotOptions defaultBotOptions) {
|
||||||
|
super(defaultBotOptions);
|
||||||
|
this.telegramPollingConfig = telegramPollingConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TelegramPollingBot(TelegramPollingConfig telegramPollingConfig) {
|
||||||
|
this.telegramPollingConfig = telegramPollingConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdateReceived(Update update) {
|
||||||
|
if (eventDistributor != null) {
|
||||||
|
Optional.ofNullable(update).ifPresent(newUpdate -> eventDistributor.processing(update));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBotUsername() {
|
||||||
|
return telegramPollingConfig.getBotUsername();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBotToken() {
|
||||||
|
return telegramPollingConfig.getBotToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AbsSender getAdsSender() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initEventDistributor(@NonNull EventDistributorImpl eventDistributor) {
|
||||||
|
this.eventDistributor = eventDistributor;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package org.sadtech.telegram.bot.autoresponder;
|
||||||
|
|
||||||
|
import org.sadtech.autoresponder.repository.UnitPointerRepository;
|
||||||
|
import org.sadtech.social.bot.GeneralAutoResponder;
|
||||||
|
import org.sadtech.social.bot.domain.unit.MainUnit;
|
||||||
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
|
import org.sadtech.social.core.service.MessageService;
|
||||||
|
import org.sadtech.social.core.service.sender.Sending;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [18.08.2019]
|
||||||
|
*/
|
||||||
|
public class MessageAutoresponderTelegram extends GeneralAutoResponder<Mail> {
|
||||||
|
|
||||||
|
public MessageAutoresponderTelegram(
|
||||||
|
Set<MainUnit> menuUnit, Sending sending,
|
||||||
|
MessageService<Mail> messageService,
|
||||||
|
UnitPointerRepository unitPointerRepository
|
||||||
|
) {
|
||||||
|
super(menuUnit, sending, messageService, unitPointerRepository);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package org.sadtech.telegram.bot.config;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.sadtech.telegram.bot.ProxyConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [18.08.2019]
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TelegramPollingConfig {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String botUsername;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String botToken;
|
||||||
|
|
||||||
|
private ProxyConfig proxyConfig = new ProxyConfig();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package org.sadtech.telegram.bot.config;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.NonNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [12.02.2020]
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TelegramWebHookConfig {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String botUsername;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String botToken;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package org.sadtech.telegram.bot.convert;
|
||||||
|
|
||||||
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [02.02.2020]
|
||||||
|
*/
|
||||||
|
public class CallbackQueryConvert {
|
||||||
|
|
||||||
|
public static Mail apply(CallbackQuery callbackQuery) {
|
||||||
|
final Mail mail = new Mail();
|
||||||
|
mail.setText(callbackQuery.getData());
|
||||||
|
mail.setPersonId(callbackQuery.getMessage().getChatId());
|
||||||
|
mail.setAddDate(LocalDateTime.now());
|
||||||
|
return mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package org.sadtech.telegram.bot.convert;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [18.08.2019]
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class MessageMailConvert {
|
||||||
|
|
||||||
|
public static Mail apply(Message message) {
|
||||||
|
Mail mail = new Mail();
|
||||||
|
mail.setPersonId(message.getChatId());
|
||||||
|
mail.setAddDate(LocalDateTime.now());
|
||||||
|
mail.setText(message.getText());
|
||||||
|
mail.setCreateDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), ZoneId.systemDefault()));
|
||||||
|
return mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package org.sadtech.telegram.bot.listen;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
|
||||||
|
public interface EventDistributor {
|
||||||
|
|
||||||
|
void processing(@NonNull Update update);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
package org.sadtech.telegram.bot.listen;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.sadtech.social.core.service.MailService;
|
||||||
|
import org.sadtech.telegram.bot.convert.CallbackQueryConvert;
|
||||||
|
import org.sadtech.telegram.bot.convert.MessageMailConvert;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [30.01.2020]
|
||||||
|
*/
|
||||||
|
public class EventDistributorImpl implements EventDistributor {
|
||||||
|
|
||||||
|
private final MailService mailService;
|
||||||
|
|
||||||
|
public EventDistributorImpl(TelegramConnect telegramConnect, MailService mailService) {
|
||||||
|
this.mailService = mailService;
|
||||||
|
telegramConnect.initEventDistributor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processing(@NonNull Update update) {
|
||||||
|
final Message message = update.getMessage();
|
||||||
|
final CallbackQuery callbackQuery = update.getCallbackQuery();
|
||||||
|
if (message != null) {
|
||||||
|
mailService.add(MessageMailConvert.apply(message));
|
||||||
|
}
|
||||||
|
if (callbackQuery != null) {
|
||||||
|
mailService.add(CallbackQueryConvert.apply(callbackQuery));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,113 @@
|
|||||||
|
package org.sadtech.telegram.bot.listen;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.sadtech.telegram.bot.ProxyConfig;
|
||||||
|
import org.sadtech.telegram.bot.TelegramBot;
|
||||||
|
import org.sadtech.telegram.bot.TelegramPollingBot;
|
||||||
|
import org.sadtech.telegram.bot.config.TelegramPollingConfig;
|
||||||
|
import org.telegram.telegrambots.ApiContextInitializer;
|
||||||
|
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
||||||
|
import org.telegram.telegrambots.meta.ApiContext;
|
||||||
|
import org.telegram.telegrambots.meta.TelegramBotsApi;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
||||||
|
|
||||||
|
import java.net.Authenticator;
|
||||||
|
import java.net.PasswordAuthentication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [30.01.2020]
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class TelegramConnect {
|
||||||
|
|
||||||
|
static {
|
||||||
|
ApiContextInitializer.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private TelegramBot telegramBot;
|
||||||
|
|
||||||
|
public TelegramConnect(TelegramPollingConfig telegramPollingConfig) {
|
||||||
|
initLongPolling(telegramPollingConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public TelegramConnect(TelegramWebHookConfig telegramWebHookConfig) {
|
||||||
|
// initWebHook(telegramWebHookConfig);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private void initWebHook(TelegramWebHookConfig telegramWebHookConfig) {
|
||||||
|
// TelegramBotsApi botapi = new TelegramBotsApi();
|
||||||
|
// final TelegramWebhookBot telegramWebhookBot = new TelegramHookBot(telegramWebHookConfig);
|
||||||
|
// try {
|
||||||
|
// botapi.registerBot(telegramWebhookBot);
|
||||||
|
// this.telegramBot = (TelegramBot) telegramWebhookBot;
|
||||||
|
// } catch (TelegramApiRequestException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
private void initLongPolling(TelegramPollingConfig telegramPollingConfig) {
|
||||||
|
final ProxyConfig proxyConfig = telegramPollingConfig.getProxyConfig();
|
||||||
|
if (proxyConfig != null && proxyConfig.getPassword() != null) {
|
||||||
|
try {
|
||||||
|
Authenticator.setDefault(new Authenticator() {
|
||||||
|
@Override
|
||||||
|
protected PasswordAuthentication getPasswordAuthentication() {
|
||||||
|
return new PasswordAuthentication(
|
||||||
|
proxyConfig.getUser(),
|
||||||
|
proxyConfig.getPassword().toCharArray()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TelegramBotsApi botapi = new TelegramBotsApi();
|
||||||
|
try {
|
||||||
|
if (proxyConfig != null && proxyConfig.getHost() != null) {
|
||||||
|
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
|
||||||
|
System.setProperty("javax.net.debug", "all");
|
||||||
|
log.info(System.getProperty("https.protocols"));
|
||||||
|
DefaultBotOptions botOptions = ApiContext.getInstance(DefaultBotOptions.class);
|
||||||
|
botOptions.setProxyHost(proxyConfig.getHost());
|
||||||
|
botOptions.setProxyPort(proxyConfig.getPort());
|
||||||
|
botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
|
||||||
|
final TelegramPollingBot bot = new TelegramPollingBot(telegramPollingConfig, botOptions);
|
||||||
|
botapi.registerBot(bot);
|
||||||
|
this.telegramBot = bot;
|
||||||
|
} else {
|
||||||
|
final TelegramPollingBot bot = new TelegramPollingBot(telegramPollingConfig);
|
||||||
|
botapi.registerBot(bot);
|
||||||
|
this.telegramBot = bot;
|
||||||
|
}
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private DefaultBotOptions.ProxyType convertProxyType(ProxyConfig.Type type) {
|
||||||
|
switch (type) {
|
||||||
|
case SOCKS5:
|
||||||
|
return DefaultBotOptions.ProxyType.SOCKS5;
|
||||||
|
case SOCKS4:
|
||||||
|
return DefaultBotOptions.ProxyType.SOCKS4;
|
||||||
|
case HTTP:
|
||||||
|
return DefaultBotOptions.ProxyType.HTTP;
|
||||||
|
default:
|
||||||
|
return DefaultBotOptions.ProxyType.NO_PROXY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AbsSender getAdsSender() {
|
||||||
|
return telegramBot.getAdsSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
void initEventDistributor(EventDistributorImpl eventDistributor) {
|
||||||
|
telegramBot.initEventDistributor(eventDistributor);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
package org.sadtech.telegram.bot.listen;
|
||||||
|
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.sadtech.social.core.domain.BoxAnswer;
|
||||||
|
import org.sadtech.social.core.domain.keyboard.KeyBoard;
|
||||||
|
import org.sadtech.social.core.domain.keyboard.KeyBoardButton;
|
||||||
|
import org.sadtech.social.core.domain.keyboard.KeyBoardLine;
|
||||||
|
import org.sadtech.social.core.domain.keyboard.button.KeyBoardButtonText;
|
||||||
|
import org.sadtech.social.core.service.sender.SendType;
|
||||||
|
import org.sadtech.social.core.service.sender.Sending;
|
||||||
|
import org.sadtech.telegram.bot.service.SendPreProcessing;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboard;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [15/07/2019]
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class TelegramSender implements Sending {
|
||||||
|
|
||||||
|
private final AbsSender absSender;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private SendPreProcessing sendPreProcessing;
|
||||||
|
|
||||||
|
public TelegramSender(TelegramConnect telegramConnect) {
|
||||||
|
this.absSender = telegramConnect.getAdsSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(Long integer, BoxAnswer boxAnswer) {
|
||||||
|
SendMessage sendMessage = new SendMessage();
|
||||||
|
sendMessage.enableMarkdown(true);
|
||||||
|
sendMessage.setChatId(String.valueOf(integer));
|
||||||
|
sendMessage.setText(
|
||||||
|
sendPreProcessing != null
|
||||||
|
? sendPreProcessing.pretreatment(boxAnswer.getMessage())
|
||||||
|
: boxAnswer.getMessage()
|
||||||
|
);
|
||||||
|
sendMessage.setReplyMarkup(convertKeyBoard(boxAnswer.getKeyBoard()));
|
||||||
|
try {
|
||||||
|
absSender.execute(sendMessage);
|
||||||
|
} catch (TelegramApiRequestException e) {
|
||||||
|
log.error(e.getApiResponse());
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReplyKeyboard convertKeyBoard(KeyBoard keyBoard) {
|
||||||
|
if (keyBoard != null) {
|
||||||
|
final InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup();
|
||||||
|
inlineKeyboardMarkup.setKeyboard(
|
||||||
|
keyBoard.getKeyBoardLines()
|
||||||
|
.stream()
|
||||||
|
.map(this::convertLint)
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
);
|
||||||
|
return inlineKeyboardMarkup;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<InlineKeyboardButton> convertLint(KeyBoardLine line) {
|
||||||
|
return line.getKeyBoardButtons().stream().map(this::convertButton).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private InlineKeyboardButton convertButton(KeyBoardButton button) {
|
||||||
|
InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton();
|
||||||
|
switch (button.getType()) {
|
||||||
|
case TEXT:
|
||||||
|
KeyBoardButtonText keyBoardButtonText = (KeyBoardButtonText) button;
|
||||||
|
inlineKeyboardButton.setText(keyBoardButtonText.getLabel());
|
||||||
|
inlineKeyboardButton.setCallbackData(keyBoardButtonText.getLabel());
|
||||||
|
}
|
||||||
|
return inlineKeyboardButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(Long integer, Long integer1, BoxAnswer boxAnswer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendType getType() {
|
||||||
|
return SendType.PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package org.sadtech.telegram.bot.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* // TODO: 18.09.2020 Добавить описание.
|
||||||
|
*
|
||||||
|
* @author upagge 18.09.2020
|
||||||
|
*/
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface SendPreProcessing {
|
||||||
|
|
||||||
|
String pretreatment(String messageText);
|
||||||
|
|
||||||
|
}
|
16
pom.xml
Normal file
16
pom.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.sadtech.telegram</groupId>
|
||||||
|
<artifactId>telegram</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<version>0.0.1-DEV</version>
|
||||||
|
<modules>
|
||||||
|
<module>bot</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
Loading…
Reference in New Issue
Block a user