Compare commits
No commits in common. "00cf2705fd26fa6ef79c08a90f4247c6d09755ee" and "af627cd7b74c507e9e5faa7a74c04afd300379bd" have entirely different histories.
00cf2705fd
...
af627cd7b7
68
.drone.yml
68
.drone.yml
@ -1,68 +0,0 @@
|
|||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: snapshot-publish
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
branch:
|
|
||||||
- develop
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- name: m2
|
|
||||||
host:
|
|
||||||
path: /drone/volume/m2
|
|
||||||
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: publish
|
|
||||||
image: maven:3.8.5-openjdk-17
|
|
||||||
privileged: true
|
|
||||||
volumes:
|
|
||||||
- name: m2
|
|
||||||
path: /root/.m2/repository
|
|
||||||
environment:
|
|
||||||
MAVEN_SETTINGS:
|
|
||||||
from_secret: MAVEN_SETTINGS
|
|
||||||
commands:
|
|
||||||
- echo "$MAVEN_SETTINGS" >> maven-settings.xml
|
|
||||||
- mvn --settings maven-settings.xml -U -P snapshot clean deploy
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: release-publish
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
ref:
|
|
||||||
- refs/tags/v.*.*.*
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- name: m2
|
|
||||||
host:
|
|
||||||
path: /drone/volume/m2
|
|
||||||
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: publish maven central
|
|
||||||
image: maven:3.8.5-openjdk-17
|
|
||||||
privileged: true
|
|
||||||
volumes:
|
|
||||||
- name: m2
|
|
||||||
path: /root/.m2/repository
|
|
||||||
environment:
|
|
||||||
GPG_PRIVATE_KEY:
|
|
||||||
from_secret: GPG_PRIVATE_KEY
|
|
||||||
MAVEN_SETTINGS:
|
|
||||||
from_secret: MAVEN_SETTINGS
|
|
||||||
GPG_PASSPHRASE:
|
|
||||||
from_secret: GPG_PASSPHRASE
|
|
||||||
commands:
|
|
||||||
- echo "$GPG_PRIVATE_KEY" >> gpg.key
|
|
||||||
- echo "$MAVEN_SETTINGS" >> maven-settings.xml
|
|
||||||
- gpg --pinentry-mode loopback --passphrase $GPG_PASSPHRASE --import gpg.key
|
|
||||||
- mvn --settings maven-settings.xml -U -P ossrh,release clean deploy
|
|
||||||
---
|
|
||||||
kind: signature
|
|
||||||
hmac: b723bf6653b2825acdb1de24d88acc510d58c7336f642e71ed0ba0489a7066eb
|
|
||||||
|
|
||||||
...
|
|
17
.gitlab-ci.yml
Normal file
17
.gitlab-ci.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
image: maven:3.8.5-openjdk-17
|
||||||
|
variables:
|
||||||
|
MAVEN_OPTS: "-Dmaven.repo.local=./.m2/repository"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- deploy
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
stage: deploy
|
||||||
|
only:
|
||||||
|
- /^v.*$/
|
||||||
|
except:
|
||||||
|
- branches
|
||||||
|
before_script:
|
||||||
|
- gpg --pinentry-mode loopback --passphrase $GPG_PASSPHRASE --import $GPG_PRIVATE_KEY
|
||||||
|
script:
|
||||||
|
- 'mvn --settings $MAVEN_SETTINGS -U -P ossrh,release clean deploy'
|
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
postgres:
|
||||||
|
image: 192.168.235.157:8182/postgres:13.1-alpine
|
||||||
|
container_name: theater-postgres
|
||||||
|
hostname: postgres
|
||||||
|
restart: on-failure
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
|
ports:
|
||||||
|
- 5433:5432
|
||||||
|
volumes:
|
||||||
|
- ./volume/db/01-init.sh:/docker-entrypoint-initdb.d/01-init.sh
|
||||||
|
- ./volume/db/storage:/var/lib/postgresql/data:z
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=${POSTGRES_USER}
|
||||||
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||||
|
- APP_DB_USER=${DATASOURCE_USERNAME}
|
||||||
|
- APP_DB_PASS=${DATASOURCE_PASSWORD}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
gitlab-notify:
|
259
pom.xml
259
pom.xml
@ -3,18 +3,13 @@
|
|||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
<groupId>dev.struchkov.godfather</groupId>
|
||||||
<artifactId>telegram-bot</artifactId>
|
<artifactId>telegram-bot</artifactId>
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
<version>0.0.10</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>telegram-core</module>
|
<module>telegram-core</module>
|
||||||
<module>telegram-sender</module>
|
|
||||||
<module>telegram-domain</module>
|
|
||||||
<module>telegram-consumer</module>
|
|
||||||
<module>telegram-context</module>
|
|
||||||
<module>telegram-simple</module>
|
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<name>Telegram Bot</name>
|
<name>Telegram Bot</name>
|
||||||
@ -38,174 +33,29 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
|
||||||
<godfather.core.ver>0.0.42-SNAPSHOT</godfather.core.ver>
|
<godfather.core.ver>0.0.8</godfather.core.ver>
|
||||||
<telegrambots.ver>6.3.0</telegrambots.ver>
|
<telegrambots.ver>6.1.0</telegrambots.ver>
|
||||||
|
|
||||||
<haiti.version>2.0.0</haiti.version>
|
|
||||||
|
|
||||||
<plugin.maven.compiler.ver>3.10.1</plugin.maven.compiler.ver>
|
<plugin.maven.compiler.ver>3.10.1</plugin.maven.compiler.ver>
|
||||||
<plugin.nexus.staging.ver>1.6.13</plugin.nexus.staging.ver>
|
<plugin.nexus.staging.ver>1.6.13</plugin.nexus.staging.ver>
|
||||||
<plugin.maven.source.ver>3.2.1</plugin.maven.source.ver>
|
<plugin.maven.source.ver>3.2.1</plugin.maven.source.ver>
|
||||||
<plugin.maven.javadoc.ver>3.4.0</plugin.maven.javadoc.ver>
|
<plugin.maven.javadoc.ver>3.4.0</plugin.maven.javadoc.ver>
|
||||||
<plugin.maven.gpg.ver>3.0.1</plugin.maven.gpg.ver>
|
<plugin.maven.gpg.ver>3.0.1</plugin.maven.gpg.ver>
|
||||||
<plugin.maven.release.ver>3.0.0-M7</plugin.maven.release.ver>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-domain</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-main</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-simple</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-quarkus</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-main</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-simple</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-quarkus</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-main</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-simple</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-quarkus</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-main</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-simple</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-quarkus</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-core</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-quarkus-reactive-sender</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-simple-sender</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--godfather-->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
<groupId>dev.struchkov.godfather</groupId>
|
||||||
<artifactId>bot-domain-main</artifactId>
|
<artifactId>bot-core</artifactId>
|
||||||
<version>${godfather.core.ver}</version>
|
<version>${godfather.core.ver}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-main</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-simple</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-quarkus</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-core-main</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-core-simple</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-core-quarkus</artifactId>
|
|
||||||
<version>${godfather.core.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
<!--/godfather-->
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.haiti</groupId>
|
|
||||||
<artifactId>haiti-utils</artifactId>
|
|
||||||
<version>${haiti.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.telegram</groupId>
|
<groupId>org.telegram</groupId>
|
||||||
<artifactId>telegrambots</artifactId>
|
<artifactId>telegrambots</artifactId>
|
||||||
<version>${telegrambots.ver}</version>
|
<version>${telegrambots.ver}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots-meta</artifactId>
|
|
||||||
<version>${telegrambots.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.telegram</groupId>
|
<groupId>org.telegram</groupId>
|
||||||
@ -229,6 +79,11 @@
|
|||||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||||
<version>${plugin.nexus.staging.ver}</version>
|
<version>${plugin.nexus.staging.ver}</version>
|
||||||
<extensions>true</extensions>
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<serverId>ossrh</serverId>
|
||||||
|
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
|
||||||
|
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
||||||
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
@ -279,19 +134,6 @@
|
|||||||
<target>${java.version}</target>
|
<target>${java.version}</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-release-plugin</artifactId>
|
|
||||||
<version>${plugin.maven.release.ver}</version>
|
|
||||||
<configuration>
|
|
||||||
<preparationGoals>clean compile</preparationGoals>
|
|
||||||
<goal>install</goal>
|
|
||||||
<tagNameFormat>v.@{project.version}</tagNameFormat>
|
|
||||||
<autoVersionSubmodules>true</autoVersionSubmodules>
|
|
||||||
<pushChanges>false</pushChanges>
|
|
||||||
<localCheckout>true</localCheckout>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
|
|
||||||
@ -308,10 +150,6 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-release-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
@ -323,11 +161,6 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.sonatype.plugins</groupId>
|
<groupId>org.sonatype.plugins</groupId>
|
||||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||||
<configuration>
|
|
||||||
<serverId>ossrh</serverId>
|
|
||||||
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
|
|
||||||
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
@ -344,83 +177,27 @@
|
|||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
|
||||||
<id>snapshot</id>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.sonatype.plugins</groupId>
|
|
||||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<serverId>struchkov-nexus</serverId>
|
|
||||||
<nexusUrl>https://nexus.struchkov.dev/nexus/</nexusUrl>
|
|
||||||
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
<repositories>
|
<scm>
|
||||||
<repository>
|
<connection>scm:git:https://github.com/Godfather-Bots/telegram-bot.git</connection>
|
||||||
<id>struchkov-nexus-release</id>
|
<url>https://github.com/Godfather-Bots/telegram-bot</url>
|
||||||
<url>https://nexus.struchkov.dev/repository/maven-releases/</url>
|
<developerConnection>scm:git:https://github.com/Godfather-Bots/telegram-bot.git</developerConnection>
|
||||||
<releases>
|
</scm>
|
||||||
<enabled>true</enabled>
|
|
||||||
<updatePolicy>always</updatePolicy>
|
|
||||||
<checksumPolicy>fail</checksumPolicy>
|
|
||||||
</releases>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
|
||||||
<id>struchkov-nexus-snapshot</id>
|
|
||||||
<url>https://nexus.struchkov.dev/repository/maven-snapshots/</url>
|
|
||||||
<releases>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</releases>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
<updatePolicy>always</updatePolicy>
|
|
||||||
<checksumPolicy>warn</checksumPolicy>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<repository>
|
|
||||||
<id>struchkov-nexus-release</id>
|
|
||||||
<url>https://nexus.struchkov.dev/repository/maven-releases/</url>
|
|
||||||
</repository>
|
|
||||||
<snapshotRepository>
|
<snapshotRepository>
|
||||||
<id>struchkov-nexus-snapshot</id>
|
<id>ossrh</id>
|
||||||
<url>https://nexus.struchkov.dev/repository/maven-snapshots/</url>
|
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
</snapshotRepository>
|
</snapshotRepository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:https://git.struchkov.dev/Godfather-Bots/telegram-bot.git</connection>
|
|
||||||
<url>https://git.struchkov.dev/Godfather-Bots/telegram-bot</url>
|
|
||||||
<developerConnection>scm:git:https://git.struchkov.dev/Godfather-Bots/telegram-bot.git</developerConnection>
|
|
||||||
<tag>HEAD</tag>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
<developer>
|
<developer>
|
||||||
<id>uPagge</id>
|
<id>uPagge</id>
|
||||||
<name>Struchkov Mark</name>
|
<name>Struchkov Mark</name>
|
||||||
<email>mark@struchkov.dev</email>
|
<email>mark@struchkov.dev</email>
|
||||||
<url>https://mark.struchkov.dev</url>
|
<url>https://struchkov.dev</url>
|
||||||
</developer>
|
</developer>
|
||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<artifactId>telegram-bot</artifactId>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-consumer</artifactId>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
<modules>
|
|
||||||
<module>telegram-consumer-main</module>
|
|
||||||
<module>telegram-consumer-simple</module>
|
|
||||||
<module>telegram-consumer-quarkus</module>
|
|
||||||
</modules>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,25 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-consumer-main</artifactId>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-domain</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,50 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.ButtonClickAttachment;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.User;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [02.02.2020]
|
|
||||||
*/
|
|
||||||
public class CallbackQueryConvert {
|
|
||||||
|
|
||||||
public static Mail apply(CallbackQuery callbackQuery) {
|
|
||||||
final String callbackData = callbackQuery.getData();
|
|
||||||
|
|
||||||
final Mail mail = new Mail();
|
|
||||||
mail.setCreateDate(LocalDateTime.now());
|
|
||||||
mail.setText(callbackData);
|
|
||||||
mail.addAttachment(convertToButtonClick(callbackData, callbackQuery.getMessage().getMessageId()));
|
|
||||||
|
|
||||||
final Long chatId = callbackQuery.getMessage().getChatId();
|
|
||||||
mail.setPersonId(chatId != null ? chatId.toString() : null);
|
|
||||||
|
|
||||||
final User user = callbackQuery.getFrom();
|
|
||||||
mail.setFirstName(user.getFirstName());
|
|
||||||
mail.setLastName(user.getLastName());
|
|
||||||
return mail;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ButtonClickAttachment convertToButtonClick(String callbackData, Integer messageId) {
|
|
||||||
final ButtonClickAttachment buttonClickAttachment = new ButtonClickAttachment();
|
|
||||||
buttonClickAttachment.setRawCallBackData(callbackData);
|
|
||||||
buttonClickAttachment.setMessageId(messageId);
|
|
||||||
if (callbackData.charAt(0) == '[' && callbackData.charAt(callbackData.length() - 1) == ']') {
|
|
||||||
final String[] args = callbackData.substring(1, callbackData.length() - 1).split(";");
|
|
||||||
for (String arg : args) {
|
|
||||||
final String[] oneArg = arg.split(":");
|
|
||||||
final String key = oneArg[0];
|
|
||||||
final String value = oneArg[1];
|
|
||||||
buttonClickAttachment.addClickArg(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return buttonClickAttachment;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,150 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.CommandAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.ContactAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
|
||||||
import dev.struchkov.haiti.utils.Checker;
|
|
||||||
import dev.struchkov.haiti.utils.Strings;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Contact;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Document;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.PhotoSize;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [18.08.2019]
|
|
||||||
*/
|
|
||||||
public final class MessageMailConvert {
|
|
||||||
|
|
||||||
private MessageMailConvert() {
|
|
||||||
utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Mail apply(Message message) {
|
|
||||||
final Mail mail = new Mail();
|
|
||||||
final Long chatId = message.getChatId();
|
|
||||||
mail.setPersonId(chatId != null ? chatId.toString() : null);
|
|
||||||
mail.setText(message.getText());
|
|
||||||
mail.setCreateDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), ZoneId.systemDefault()));
|
|
||||||
mail.setFirstName(message.getChat().getFirstName());
|
|
||||||
mail.setLastName(message.getChat().getLastName());
|
|
||||||
|
|
||||||
convertDocument(message.getDocument()).ifPresent(mail::addAttachment);
|
|
||||||
convertContact(message.getContact()).ifPresent(mail::addAttachment);
|
|
||||||
convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment);
|
|
||||||
|
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
|
||||||
if (entities != null) {
|
|
||||||
mail.addAttachments(convertAttachments(message));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.getReplyToMessage() != null) {
|
|
||||||
mail.setForwardMail(Collections.singletonList(apply(message.getReplyToMessage())));
|
|
||||||
}
|
|
||||||
|
|
||||||
return mail;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Optional<Attachment> convertPhoto(List<PhotoSize> photoSizes) {
|
|
||||||
if (photoSizes != null && !photoSizes.isEmpty()) {
|
|
||||||
final PictureGroupAttachment attachment = new PictureGroupAttachment();
|
|
||||||
|
|
||||||
final List<Picture> pictures = photoSizes.stream()
|
|
||||||
.map(photoSize -> {
|
|
||||||
final Picture picture = new Picture();
|
|
||||||
picture.setFileSize(photoSize.getFileSize());
|
|
||||||
picture.setFileId(photoSize.getFileId());
|
|
||||||
picture.setHeight(photoSize.getHeight());
|
|
||||||
picture.setWeight(photoSize.getWidth());
|
|
||||||
picture.setFileUniqueId(photoSize.getFileUniqueId());
|
|
||||||
return picture;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
attachment.setPictureSizes(pictures);
|
|
||||||
|
|
||||||
return Optional.of(attachment);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Optional<ContactAttachment> convertContact(Contact contact) {
|
|
||||||
if (contact != null) {
|
|
||||||
final ContactAttachment attachment = new ContactAttachment();
|
|
||||||
attachment.setPhoneNumber(contact.getPhoneNumber());
|
|
||||||
attachment.setUserId(contact.getUserId());
|
|
||||||
attachment.setFirstName(contact.getFirstName());
|
|
||||||
attachment.setLastName(contact.getLastName());
|
|
||||||
if (contact.getVCard() != null) {
|
|
||||||
attachment.setOwner(false);
|
|
||||||
attachment.setVCard(contact.getVCard());
|
|
||||||
} else {
|
|
||||||
attachment.setOwner(true);
|
|
||||||
}
|
|
||||||
return Optional.of(attachment);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Optional<DocumentAttachment> convertDocument(Document document) {
|
|
||||||
if (document != null) {
|
|
||||||
final DocumentAttachment attachment = new DocumentAttachment();
|
|
||||||
attachment.setFileId(document.getFileId());
|
|
||||||
attachment.setFileSize(document.getFileSize());
|
|
||||||
attachment.setFileName(document.getFileName());
|
|
||||||
attachment.setMimeType(document.getMimeType());
|
|
||||||
return Optional.of(attachment);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Attachment> convertAttachments(Message message) {
|
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
|
||||||
if (Checker.checkNotEmpty(entities)) {
|
|
||||||
return entities.stream()
|
|
||||||
.map(entity -> convertEntity(message, entity))
|
|
||||||
.filter(Optional::isPresent)
|
|
||||||
.map(Optional::get)
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Optional<Attachment> convertEntity(Message message, MessageEntity entity) {
|
|
||||||
switch (entity.getType()) {
|
|
||||||
case "text_link" -> {
|
|
||||||
return Optional.of(new LinkAttachment(entity.getUrl()));
|
|
||||||
}
|
|
||||||
case "bot_command" -> {
|
|
||||||
final String commandValue = entity.getText();
|
|
||||||
String commandArg = message.getText().replace(commandValue, "");
|
|
||||||
if (Checker.checkNotEmpty(commandArg)) {
|
|
||||||
commandArg = commandArg.substring(1);
|
|
||||||
}
|
|
||||||
final CommandAttachment commandAttachment = new CommandAttachment();
|
|
||||||
commandAttachment.setValue(commandValue);
|
|
||||||
commandAttachment.setCommandType(commandValue.replace("/", ""));
|
|
||||||
commandAttachment.setArg(Strings.EMPTY.equals(commandArg) ? null : commandArg);
|
|
||||||
commandAttachment.setRawValue(message.getText());
|
|
||||||
return Optional.of(commandAttachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Subscribe;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Chat;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
|
||||||
|
|
||||||
public final class SubscribeConvert {
|
|
||||||
|
|
||||||
private SubscribeConvert() {
|
|
||||||
utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Subscribe apply(ChatMemberUpdated updated) {
|
|
||||||
final Chat chat = updated.getChat();
|
|
||||||
|
|
||||||
final Subscribe subscribe = new Subscribe();
|
|
||||||
subscribe.setTelegramId(chat.getId().toString());
|
|
||||||
subscribe.setLastName(chat.getLastName());
|
|
||||||
subscribe.setFirstName(chat.getFirstName());
|
|
||||||
subscribe.setSubscriptionDate(LocalDateTime.now());
|
|
||||||
return subscribe;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Unsubscribe;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Chat;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
|
||||||
|
|
||||||
public final class UnsubscribeConvert {
|
|
||||||
|
|
||||||
private UnsubscribeConvert() {
|
|
||||||
utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Unsubscribe apply(ChatMemberUpdated updated) {
|
|
||||||
final Chat chat = updated.getChat();
|
|
||||||
|
|
||||||
final Unsubscribe unsubscribe = new Unsubscribe();
|
|
||||||
unsubscribe.setTelegramId(chat.getId().toString());
|
|
||||||
unsubscribe.setLastName(chat.getLastName());
|
|
||||||
unsubscribe.setFirstName(chat.getFirstName());
|
|
||||||
unsubscribe.setSubscriptionDate(LocalDateTime.now());
|
|
||||||
return unsubscribe;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-consumer-quarkus</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,126 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.quarkus.context.service.EventHandler;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Subscribe;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Unsubscribe;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.CallbackQueryConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.MessageMailConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.core.TelegramConnectBot;
|
|
||||||
import io.smallrye.mutiny.Multi;
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Update;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.User;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
public class EventDistributorService implements EventDistributor {
|
|
||||||
|
|
||||||
private final Map<String, List<EventHandler>> eventHandlerMap;
|
|
||||||
|
|
||||||
public EventDistributorService(TelegramConnectBot telegramConnectBot, List<EventHandler> eventProviders) {
|
|
||||||
this.eventHandlerMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType));
|
|
||||||
telegramConnectBot.initEventDistributor(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<Void> processing(@NotNull Update update) {
|
|
||||||
return Uni.createFrom().voidItem()
|
|
||||||
.onItem().transformToUni(
|
|
||||||
v -> {
|
|
||||||
if (checkNotNull(update.getMessage())) {
|
|
||||||
final Message message = update.getMessage();
|
|
||||||
if (!isEvent(message)) {
|
|
||||||
final Optional<List<EventHandler>> optHandlers = getHandler(Mail.TYPE);
|
|
||||||
if (optHandlers.isPresent()) {
|
|
||||||
return Multi.createFrom().iterable(optHandlers.get())
|
|
||||||
.onItem().transformToUni(
|
|
||||||
eventHandler -> eventHandler.handle(MessageMailConvert.apply(message))
|
|
||||||
).concatenate().toUni().replaceWithVoid();
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (checkNotNull(update.getCallbackQuery())) {
|
|
||||||
final CallbackQuery callbackQuery = update.getCallbackQuery();
|
|
||||||
final Optional<List<EventHandler>> optHandlers = getHandler(Mail.TYPE);
|
|
||||||
if (optHandlers.isPresent()) {
|
|
||||||
return Multi.createFrom().iterable(optHandlers.get())
|
|
||||||
.onItem().transformToUni(
|
|
||||||
eventHandler -> eventHandler.handle(CallbackQueryConvert.apply(callbackQuery))
|
|
||||||
).concatenate().toUni().replaceWithVoid();
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
if (checkNotNull(update.getMyChatMember())) {
|
|
||||||
final ChatMemberUpdated chatMember = update.getMyChatMember();
|
|
||||||
if ("kicked".equals(chatMember.getNewChatMember().getStatus())) {
|
|
||||||
|
|
||||||
final Optional<List<EventHandler>> optHandlers = getHandler(Unsubscribe.TYPE);
|
|
||||||
if (optHandlers.isPresent()) {
|
|
||||||
return Multi.createFrom().iterable(optHandlers.get())
|
|
||||||
.onItem().transformToUni(
|
|
||||||
eventHandler -> eventHandler.handle(UnsubscribeConvert.apply(chatMember))
|
|
||||||
).concatenate().toUni().replaceWithVoid();
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
if ("member".equals(chatMember.getNewChatMember().getStatus())) {
|
|
||||||
final Optional<List<EventHandler>> optHandlers = getHandler(Subscribe.TYPE);
|
|
||||||
if (optHandlers.isPresent()) {
|
|
||||||
return Multi.createFrom().iterable(optHandlers.get())
|
|
||||||
.onItem().transformToUni(
|
|
||||||
eventHandler -> eventHandler.handle(SubscribeConvert.apply(chatMember))
|
|
||||||
).concatenate().toUni().replaceWithVoid();
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isEvent(Message message) {
|
|
||||||
return message.getChannelChatCreated() != null
|
|
||||||
|| message.getDeleteChatPhoto() != null
|
|
||||||
|| isNewChatMember(message.getNewChatMembers())
|
|
||||||
|| message.getNewChatTitle() != null
|
|
||||||
|| message.getNewChatPhoto() != null
|
|
||||||
|| message.getVideoChatEnded() != null
|
|
||||||
|| message.getVideoChatParticipantsInvited() != null
|
|
||||||
|| message.getVideoChatScheduled() != null
|
|
||||||
|| message.getVideoNote() != null
|
|
||||||
|| message.getVideoChatStarted() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isNewChatMember(List<User> newChatMembers) {
|
|
||||||
if (newChatMembers == null) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return !newChatMembers.isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<List<EventHandler>> getHandler(String type) {
|
|
||||||
return Optional.ofNullable(eventHandlerMap.get(type));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-consumer-simple</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,95 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.consumer;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.simple.context.service.EventHandler;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Subscribe;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.event.Unsubscribe;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.CallbackQueryConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.MessageMailConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.EventDistributor;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.core.TelegramConnectBot;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Update;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.User;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
public class EventDistributorService implements EventDistributor {
|
|
||||||
|
|
||||||
private final Map<String, List<EventHandler>> eventProviderMap;
|
|
||||||
|
|
||||||
public EventDistributorService(TelegramConnectBot telegramConnectBot, List<EventHandler> eventProviders) {
|
|
||||||
this.eventProviderMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType));
|
|
||||||
telegramConnectBot.initEventDistributor(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void processing(@NotNull Update update) {
|
|
||||||
if (update.getMessage() != null) {
|
|
||||||
final Message message = update.getMessage();
|
|
||||||
if (!isEvent(message)) {
|
|
||||||
getHandler(Mail.TYPE)
|
|
||||||
.ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(MessageMailConvert.apply(message))));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (update.getCallbackQuery() != null) {
|
|
||||||
final CallbackQuery callbackQuery = update.getCallbackQuery();
|
|
||||||
getHandler(Mail.TYPE)
|
|
||||||
.ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(CallbackQueryConvert.apply(callbackQuery))));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (update.getMyChatMember() != null) {
|
|
||||||
final ChatMemberUpdated chatMember = update.getMyChatMember();
|
|
||||||
if ("kicked".equals(chatMember.getNewChatMember().getStatus())) {
|
|
||||||
getHandler(Unsubscribe.TYPE)
|
|
||||||
.ifPresent(providers -> providers.forEach(provider -> provider.handle(UnsubscribeConvert.apply(chatMember))));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ("member".equals(chatMember.getNewChatMember().getStatus())) {
|
|
||||||
getHandler(Subscribe.TYPE)
|
|
||||||
.ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(SubscribeConvert.apply(chatMember))));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isEvent(Message message) {
|
|
||||||
return message.getChannelChatCreated() != null
|
|
||||||
|| message.getDeleteChatPhoto() != null
|
|
||||||
|| isNewChatMember(message.getNewChatMembers())
|
|
||||||
|| message.getNewChatTitle() != null
|
|
||||||
|| message.getNewChatPhoto() != null
|
|
||||||
|| message.getVideoChatEnded() != null
|
|
||||||
|| message.getVideoChatParticipantsInvited() != null
|
|
||||||
|| message.getVideoChatScheduled() != null
|
|
||||||
|| message.getVideoNote() != null
|
|
||||||
|| message.getVideoChatStarted() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isNewChatMember(List<User> newChatMembers) {
|
|
||||||
if (newChatMembers == null) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return !newChatMembers.isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<List<EventHandler>> getHandler(String type) {
|
|
||||||
return Optional.ofNullable(eventProviderMap.get(type));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<artifactId>telegram-bot</artifactId>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-context</artifactId>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
<modules>
|
|
||||||
<module>telegram-context-main</module>
|
|
||||||
<module>telegram-context-simple</module>
|
|
||||||
<module>telegram-context-quarkus</module>
|
|
||||||
</modules>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,29 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-context-main</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-domain</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,11 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.context;
|
|
||||||
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
|
|
||||||
public interface TelegramConnect {
|
|
||||||
|
|
||||||
AbsSender getAbsSender();
|
|
||||||
|
|
||||||
String getToken();
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-context-quarkus</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots-meta</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,13 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.context.repository;
|
|
||||||
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
|
|
||||||
public interface SenderRepository {
|
|
||||||
|
|
||||||
Uni<Integer> getLastSendMessage(String telegramId);
|
|
||||||
|
|
||||||
Uni<Void> saveLastSendMessage(String telegramId, Integer messageId);
|
|
||||||
|
|
||||||
Uni<Void> removeLastSendMessage(String telegramId);
|
|
||||||
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.context.service;
|
|
||||||
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Update;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
public interface EventDistributor {
|
|
||||||
|
|
||||||
Uni<Void> processing(@NotNull Update update);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.context.service;
|
|
||||||
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание интерфейса.
|
|
||||||
*
|
|
||||||
* @author upagge [12.02.2020]
|
|
||||||
*/
|
|
||||||
public interface TelegramBot {
|
|
||||||
|
|
||||||
AbsSender getAdsSender();
|
|
||||||
|
|
||||||
void initEventDistributor(@NotNull EventDistributor eventDistributor);
|
|
||||||
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.context.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
|
||||||
import dev.struchkov.godfather.main.domain.SentBox;
|
|
||||||
import dev.struchkov.godfather.quarkus.context.service.SendingService;
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public interface TelegramSending extends SendingService<Integer> {
|
|
||||||
|
|
||||||
Uni<SentBox<Integer>> sendNotSave(@NotNull BoxAnswer boxAnswer);
|
|
||||||
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<artifactId>telegram-context</artifactId>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-context-simple</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots-meta</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,13 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.context.repository;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public interface SenderRepository {
|
|
||||||
|
|
||||||
Optional<Integer> getLastSendMessage(String telegramId);
|
|
||||||
|
|
||||||
void saveLastSendMessage(String telegramId, Integer messageId);
|
|
||||||
|
|
||||||
void removeLastSendMessage(String telegramId);
|
|
||||||
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.context.service;
|
|
||||||
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание интерфейса.
|
|
||||||
*
|
|
||||||
* @author upagge [12.02.2020]
|
|
||||||
*/
|
|
||||||
public interface TelegramBot {
|
|
||||||
|
|
||||||
AbsSender getAdsSender();
|
|
||||||
|
|
||||||
void initEventDistributor(@NotNull EventDistributor eventDistributor);
|
|
||||||
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.context.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
|
||||||
import dev.struchkov.godfather.main.domain.SentBox;
|
|
||||||
import dev.struchkov.godfather.simple.context.service.SendingService;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public interface TelegramSending extends SendingService<Integer> {
|
|
||||||
|
|
||||||
Optional<SentBox<Integer>> sendNotSave(@NotNull BoxAnswer boxAnswer);
|
|
||||||
|
|
||||||
}
|
|
@ -1,22 +1,38 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
<groupId>dev.struchkov.godfather</groupId>
|
||||||
<artifactId>telegram-bot</artifactId>
|
<artifactId>telegram-bot</artifactId>
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
<version>0.0.10</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
|
||||||
<module>telegram-core-main</module>
|
|
||||||
<module>telegram-core-simple</module>
|
|
||||||
<module>telegram-core-quarkus</module>
|
|
||||||
</modules>
|
|
||||||
|
|
||||||
<artifactId>telegram-core</artifactId>
|
<artifactId>telegram-core</artifactId>
|
||||||
<packaging>pom</packaging>
|
|
||||||
|
|
||||||
<name>Telegram Core</name>
|
<name>Telegram Core</name>
|
||||||
<description>Allows you to create bots for Telegram</description>
|
<description>Allows you to create bots for Telegram</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>dev.struchkov.godfather</groupId>
|
||||||
|
<artifactId>bot-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambots</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambots-abilities</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.telegram</groupId>
|
||||||
|
<artifactId>telegrambotsextensions</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -1,4 +1,4 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.config;
|
package dev.struchkov.godfather.telegram;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
* TODO: Добавить описание класса.
|
||||||
@ -7,7 +7,6 @@ package dev.struchkov.godfather.telegram.domain.config;
|
|||||||
*/
|
*/
|
||||||
public class ProxyConfig {
|
public class ProxyConfig {
|
||||||
|
|
||||||
private boolean enable = true;
|
|
||||||
private String host;
|
private String host;
|
||||||
private Integer port;
|
private Integer port;
|
||||||
private String user;
|
private String user;
|
||||||
@ -54,16 +53,7 @@ public class ProxyConfig {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnable() {
|
|
||||||
return enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnable(boolean enable) {
|
|
||||||
this.enable = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
SOCKS5, SOCKS4, HTTP
|
SOCKS5, SOCKS4, HTTP
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package dev.struchkov.godfather.telegram;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.telegram.listen.EventDistributorService;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание интерфейса.
|
||||||
|
*
|
||||||
|
* @author upagge [12.02.2020]
|
||||||
|
*/
|
||||||
|
public interface TelegramBot {
|
||||||
|
|
||||||
|
AbsSender getAdsSender();
|
||||||
|
|
||||||
|
void initEventDistributor(@NotNull EventDistributorService eventDistributor);
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core;
|
package dev.struchkov.godfather.telegram;
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.TelegramConnectConfig;
|
import dev.struchkov.godfather.telegram.config.TelegramPollingConfig;
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.EventDistributor;
|
import dev.struchkov.godfather.telegram.listen.EventDistributor;
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramBot;
|
import dev.struchkov.godfather.telegram.listen.EventDistributorService;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
||||||
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
|
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
|
||||||
@ -16,16 +16,16 @@ import org.telegram.telegrambots.meta.bots.AbsSender;
|
|||||||
*/
|
*/
|
||||||
public class TelegramPollingBot extends TelegramLongPollingBot implements TelegramBot {
|
public class TelegramPollingBot extends TelegramLongPollingBot implements TelegramBot {
|
||||||
|
|
||||||
private final TelegramConnectConfig telegramConnectConfig;
|
private final TelegramPollingConfig telegramPollingConfig;
|
||||||
private EventDistributor eventDistributor;
|
private EventDistributor eventDistributor;
|
||||||
|
|
||||||
public TelegramPollingBot(TelegramConnectConfig telegramConnectConfig, DefaultBotOptions defaultBotOptions) {
|
public TelegramPollingBot(TelegramPollingConfig telegramPollingConfig, DefaultBotOptions defaultBotOptions) {
|
||||||
super(defaultBotOptions);
|
super(defaultBotOptions);
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
this.telegramPollingConfig = telegramPollingConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TelegramPollingBot(TelegramConnectConfig telegramConnectConfig) {
|
public TelegramPollingBot(TelegramPollingConfig telegramPollingConfig) {
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
this.telegramPollingConfig = telegramPollingConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -37,12 +37,12 @@ public class TelegramPollingBot extends TelegramLongPollingBot implements Telegr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getBotUsername() {
|
public String getBotUsername() {
|
||||||
return telegramConnectConfig.getBotUsername();
|
return telegramPollingConfig.getBotUsername();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getBotToken() {
|
public String getBotToken() {
|
||||||
return telegramConnectConfig.getBotToken();
|
return telegramPollingConfig.getBotToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -51,7 +51,7 @@ public class TelegramPollingBot extends TelegramLongPollingBot implements Telegr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initEventDistributor(@NotNull EventDistributor eventDistributor) {
|
public void initEventDistributor(@NotNull EventDistributorService eventDistributor) {
|
||||||
this.eventDistributor = eventDistributor;
|
this.eventDistributor = eventDistributor;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.autoresponder;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Mail;
|
||||||
|
import dev.struchkov.godfather.context.service.PersonSettingService;
|
||||||
|
import dev.struchkov.godfather.context.service.UnitPointerService;
|
||||||
|
import dev.struchkov.godfather.context.service.sender.Sending;
|
||||||
|
import dev.struchkov.godfather.core.GeneralAutoResponder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [18.08.2019]
|
||||||
|
*/
|
||||||
|
public class MessageAutoresponderTelegram extends GeneralAutoResponder<Mail> {
|
||||||
|
|
||||||
|
public MessageAutoresponderTelegram(
|
||||||
|
Sending sending,
|
||||||
|
PersonSettingService personSettingService,
|
||||||
|
UnitPointerService unitPointerService,
|
||||||
|
List<Object> unitConfigurations
|
||||||
|
) {
|
||||||
|
super(sending, personSettingService, unitPointerService, unitConfigurations);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,23 +1,25 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.config;
|
package dev.struchkov.godfather.telegram.config;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.telegram.ProxyConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
* TODO: Добавить описание класса.
|
||||||
*
|
*
|
||||||
* @author upagge [18.08.2019]
|
* @author upagge [18.08.2019]
|
||||||
*/
|
*/
|
||||||
public class TelegramConnectConfig {
|
public class TelegramPollingConfig {
|
||||||
|
|
||||||
private String botUsername;
|
private String botUsername;
|
||||||
private String botToken;
|
private String botToken;
|
||||||
|
|
||||||
private ProxyConfig proxyConfig;
|
private ProxyConfig proxyConfig;
|
||||||
|
|
||||||
public TelegramConnectConfig(String botUsername, String botToken) {
|
public TelegramPollingConfig(String botUsername, String botToken) {
|
||||||
this.botUsername = botUsername;
|
this.botUsername = botUsername;
|
||||||
this.botToken = botToken;
|
this.botToken = botToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TelegramConnectConfig() {
|
public TelegramPollingConfig() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBotUsername(String botUsername) {
|
public void setBotUsername(String botUsername) {
|
@ -0,0 +1,28 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.convert;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Mail;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.User;
|
||||||
|
|
||||||
|
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());
|
||||||
|
|
||||||
|
final User user = callbackQuery.getFrom();
|
||||||
|
mail.setFirstName(user.getFirstName());
|
||||||
|
mail.setLastName(user.getLastName());
|
||||||
|
return mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.convert;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Mail;
|
||||||
|
import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
|
||||||
|
import dev.struchkov.godfather.context.domain.content.attachment.Link;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [18.08.2019]
|
||||||
|
*/
|
||||||
|
public final class MessageMailConvert {
|
||||||
|
|
||||||
|
public MessageMailConvert() {
|
||||||
|
utilityClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Mail apply(Message message) {
|
||||||
|
final 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()));
|
||||||
|
mail.setFirstName(message.getChat().getFirstName());
|
||||||
|
mail.setLastName(message.getChat().getLastName());
|
||||||
|
|
||||||
|
final List<MessageEntity> entities = message.getEntities();
|
||||||
|
if (entities != null) {
|
||||||
|
mail.setAttachments(convertAttachments(entities));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.getReplyToMessage() != null) {
|
||||||
|
mail.setForwardMail(Collections.singletonList(apply(message.getReplyToMessage())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Attachment> convertAttachments(List<MessageEntity> entities) {
|
||||||
|
final List<Attachment> attachments = new ArrayList<>();
|
||||||
|
for (MessageEntity entity : entities) {
|
||||||
|
String type = entity.getType();
|
||||||
|
if ("text_link".equals(type)) {
|
||||||
|
Link link = new Link();
|
||||||
|
link.setUrl(entity.getUrl());
|
||||||
|
attachments.add(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return attachments;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,19 +1,15 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.keyboard;
|
package dev.struchkov.godfather.telegram.domain.keyboard;
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoard;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoard;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
|
|
||||||
|
|
||||||
public class InlineKeyBoard implements KeyBoard {
|
public class InlineKeyBoard implements KeyBoard {
|
||||||
|
|
||||||
public static final String TYPE = "INLINE";
|
public static final String TYPE = "INLINE";
|
||||||
|
protected List<KeyBoardLine> lines = new ArrayList<>();
|
||||||
protected List<KeyBoardLine> lines;
|
|
||||||
|
|
||||||
public InlineKeyBoard(List<KeyBoardLine> lines) {
|
public InlineKeyBoard(List<KeyBoardLine> lines) {
|
||||||
this.lines = lines;
|
this.lines = lines;
|
||||||
@ -27,16 +23,8 @@ public class InlineKeyBoard implements KeyBoard {
|
|||||||
return new Builder();
|
return new Builder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InlineKeyBoard inlineKeyBoard(KeyBoardLine... keyBoardLine) {
|
public static InlineKeyBoard inlineKeyBoard(KeyBoardLine keyBoardLine) {
|
||||||
final Builder builder = builder();
|
return builder().line(keyBoardLine).build();
|
||||||
for (KeyBoardLine boardLine : keyBoardLine) {
|
|
||||||
builder.line(boardLine);
|
|
||||||
}
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InlineKeyBoard inlineKeyBoard(KeyBoardButton... buttons) {
|
|
||||||
return builder().line(simpleLine(buttons)).build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<KeyBoardLine> getLines() {
|
public List<KeyBoardLine> getLines() {
|
@ -1,23 +1,19 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.keyboard;
|
package dev.struchkov.godfather.telegram.domain.keyboard;
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
|
import dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoard;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
|
|
||||||
|
|
||||||
public class MarkupKeyBoard extends SimpleKeyBoard {
|
public class MarkupKeyBoard extends SimpleKeyBoard {
|
||||||
|
|
||||||
public static final String TYPE = "MARKUP";
|
public static final String TYPE = "MARKUP";
|
||||||
private static final MarkupKeyBoard EMPTY = new MarkupKeyBoard();
|
|
||||||
/**
|
/**
|
||||||
* Скрыть меню после ответа или нет.
|
* Скрыть меню после ответа или нет.
|
||||||
*/
|
*/
|
||||||
private boolean oneTime;
|
private boolean oneTime = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Изменяет размер клавиатуры по вертикали для оптимального соответствия (например, сделать клавиатуру меньше, если есть только два ряда кнопок).
|
* Изменяет размер клавиатуры по вертикали для оптимального соответствия (например, сделать клавиатуру меньше, если есть только два ряда кнопок).
|
||||||
@ -26,10 +22,6 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
|
|||||||
|
|
||||||
private String inputFieldPlaceholder;
|
private String inputFieldPlaceholder;
|
||||||
|
|
||||||
public MarkupKeyBoard() {
|
|
||||||
super(Collections.emptyList());
|
|
||||||
}
|
|
||||||
|
|
||||||
private MarkupKeyBoard(Builder builder) {
|
private MarkupKeyBoard(Builder builder) {
|
||||||
super(builder.lines);
|
super(builder.lines);
|
||||||
oneTime = builder.oneTime;
|
oneTime = builder.oneTime;
|
||||||
@ -37,30 +29,10 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
|
|||||||
inputFieldPlaceholder = builder.inputFieldPlaceholder;
|
inputFieldPlaceholder = builder.inputFieldPlaceholder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MarkupKeyBoard markupKeyBoard(KeyBoardLine... lines) {
|
public static Builder newBuilder() {
|
||||||
final Builder builder = new Builder();
|
|
||||||
for (KeyBoardLine line : lines) {
|
|
||||||
builder.line(line);
|
|
||||||
}
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) {
|
|
||||||
final Builder builder = new Builder();
|
|
||||||
for (KeyBoardButton button : buttons) {
|
|
||||||
builder.line(simpleLine(button));
|
|
||||||
}
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Builder markupBuilder() {
|
|
||||||
return new Builder();
|
return new Builder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MarkupKeyBoard empty() {
|
|
||||||
return EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isResizeKeyboard() {
|
public boolean isResizeKeyboard() {
|
||||||
return resizeKeyboard;
|
return resizeKeyboard;
|
||||||
}
|
}
|
||||||
@ -78,14 +50,6 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
|
|||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
|
||||||
return lines.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNotEmpty() {
|
|
||||||
return !lines.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
private List<KeyBoardLine> lines = new ArrayList<>();
|
private List<KeyBoardLine> lines = new ArrayList<>();
|
||||||
private boolean oneTime = true;
|
private boolean oneTime = true;
|
@ -0,0 +1,33 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.domain.keyboard.button;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
|
||||||
|
|
||||||
|
public class ButtonUrl implements KeyBoardButton {
|
||||||
|
|
||||||
|
public static final String TYPE = "URL";
|
||||||
|
|
||||||
|
private String label;
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
public ButtonUrl(String label, String url) {
|
||||||
|
this.label = label;
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ButtonUrl buttonUrl(String label, String url) {
|
||||||
|
return new ButtonUrl(label, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLabel() {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
}
|
@ -1,22 +1,21 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.keyboard.button;
|
package dev.struchkov.godfather.telegram.domain.keyboard.button;
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class WebAppButton implements KeyBoardButton {
|
public class ButtonWebApp implements KeyBoardButton {
|
||||||
|
|
||||||
public static final String TYPE = "WEB_APP";
|
public static final String TYPE = "WEB_APP";
|
||||||
|
|
||||||
private final String label;
|
private final String label;
|
||||||
private final String url;
|
private final String url;
|
||||||
|
|
||||||
private WebAppButton(String label, String url) {
|
public ButtonWebApp(String label, String url) {
|
||||||
this.label = label;
|
this.label = label;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WebAppButton webAppButton(@NotNull String label, @NotNull String url) {
|
public static ButtonWebApp buttonWebApp(String label, String url) {
|
||||||
return new WebAppButton(label, url);
|
return new ButtonWebApp(label, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
@ -1,9 +1,8 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.context.service;
|
package dev.struchkov.godfather.telegram.listen;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.telegram.telegrambots.meta.api.objects.Update;
|
import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
public interface EventDistributor {
|
public interface EventDistributor {
|
||||||
|
|
||||||
void processing(@NotNull Update update);
|
void processing(@NotNull Update update);
|
@ -0,0 +1,40 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.listen;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Mail;
|
||||||
|
import dev.struchkov.godfather.context.service.EventProvider;
|
||||||
|
import dev.struchkov.godfather.telegram.convert.CallbackQueryConvert;
|
||||||
|
import dev.struchkov.godfather.telegram.convert.MessageMailConvert;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Update;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [30.01.2020]
|
||||||
|
*/
|
||||||
|
public class EventDistributorService implements EventDistributor {
|
||||||
|
|
||||||
|
private final List<EventProvider<Mail>> eventProviders;
|
||||||
|
|
||||||
|
public EventDistributorService(TelegramConnect telegramConnect, List<EventProvider<Mail>> eventProviders) {
|
||||||
|
this.eventProviders = eventProviders;
|
||||||
|
telegramConnect.initEventDistributor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processing(@NotNull Update update) {
|
||||||
|
final Message message = update.getMessage();
|
||||||
|
final CallbackQuery callbackQuery = update.getCallbackQuery();
|
||||||
|
if (message != null) {
|
||||||
|
eventProviders.forEach(provider -> provider.sendEvent(MessageMailConvert.apply(message)));
|
||||||
|
}
|
||||||
|
if (callbackQuery != null) {
|
||||||
|
eventProviders.forEach(provider -> provider.sendEvent(CallbackQueryConvert.apply(callbackQuery)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,11 +1,9 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.core;
|
package dev.struchkov.godfather.telegram.listen;
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig;
|
import dev.struchkov.godfather.telegram.ProxyConfig;
|
||||||
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig.Type;
|
import dev.struchkov.godfather.telegram.TelegramBot;
|
||||||
import dev.struchkov.godfather.telegram.domain.config.TelegramConnectConfig;
|
import dev.struchkov.godfather.telegram.TelegramPollingBot;
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
import dev.struchkov.godfather.telegram.config.TelegramPollingConfig;
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramBot;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
||||||
@ -17,23 +15,19 @@ import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
|
|||||||
import java.net.Authenticator;
|
import java.net.Authenticator;
|
||||||
import java.net.PasswordAuthentication;
|
import java.net.PasswordAuthentication;
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
* TODO: Добавить описание класса.
|
||||||
*
|
*
|
||||||
* @author upagge [30.01.2020]
|
* @author upagge [30.01.2020]
|
||||||
*/
|
*/
|
||||||
public class TelegramConnectBot implements TelegramConnect {
|
public class TelegramConnect {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(TelegramConnectBot.class);
|
private static final Logger log = LoggerFactory.getLogger(TelegramConnect.class);
|
||||||
|
|
||||||
private TelegramBot telegramBot;
|
private TelegramBot telegramBot;
|
||||||
private final TelegramConnectConfig telegramConnectConfig;
|
|
||||||
|
|
||||||
public TelegramConnectBot(TelegramConnectConfig telegramConnectConfig) {
|
public TelegramConnect(TelegramPollingConfig telegramPollingConfig) {
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
initLongPolling(telegramPollingConfig);
|
||||||
initLongPolling(telegramConnectConfig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// public TelegramConnect(TelegramWebHookConfig telegramWebHookConfig) {
|
// public TelegramConnect(TelegramWebHookConfig telegramWebHookConfig) {
|
||||||
@ -51,10 +45,9 @@ public class TelegramConnectBot implements TelegramConnect {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private void initLongPolling(TelegramConnectConfig telegramConnectConfig) {
|
private void initLongPolling(TelegramPollingConfig telegramPollingConfig) {
|
||||||
|
final ProxyConfig proxyConfig = telegramPollingConfig.getProxyConfig();
|
||||||
final ProxyConfig proxyConfig = telegramConnectConfig.getProxyConfig();
|
if (proxyConfig != null && proxyConfig.getPassword() != null) {
|
||||||
if (checkNotNull(proxyConfig) && proxyConfig.isEnable() && checkNotNull(proxyConfig.getPassword()) && !"".equals(proxyConfig.getPassword())) {
|
|
||||||
try {
|
try {
|
||||||
Authenticator.setDefault(new Authenticator() {
|
Authenticator.setDefault(new Authenticator() {
|
||||||
@Override
|
@Override
|
||||||
@ -72,9 +65,9 @@ public class TelegramConnectBot implements TelegramConnect {
|
|||||||
|
|
||||||
final TelegramBotsApi botapi;
|
final TelegramBotsApi botapi;
|
||||||
try {
|
try {
|
||||||
if (checkNotNull(proxyConfig) && proxyConfig.isEnable() && checkNotNull(proxyConfig.getHost()) && !"".equals(proxyConfig.getHost())) {
|
if (proxyConfig != null && proxyConfig.getHost() != null) {
|
||||||
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
|
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
|
||||||
// System.setProperty("javax.net.debug", "all");
|
System.setProperty("javax.net.debug", "all");
|
||||||
log.info(System.getProperty("https.protocols"));
|
log.info(System.getProperty("https.protocols"));
|
||||||
DefaultBotOptions botOptions = new DefaultBotOptions();
|
DefaultBotOptions botOptions = new DefaultBotOptions();
|
||||||
botOptions.setProxyHost(proxyConfig.getHost());
|
botOptions.setProxyHost(proxyConfig.getHost());
|
||||||
@ -82,13 +75,14 @@ public class TelegramConnectBot implements TelegramConnect {
|
|||||||
botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
|
botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
|
||||||
|
|
||||||
|
|
||||||
final TelegramPollingBot bot = new TelegramPollingBot(telegramConnectConfig, botOptions);
|
final TelegramPollingBot bot = new TelegramPollingBot(telegramPollingConfig, botOptions);
|
||||||
|
|
||||||
|
|
||||||
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
||||||
botapi.registerBot(bot);
|
botapi.registerBot(bot);
|
||||||
this.telegramBot = bot;
|
this.telegramBot = bot;
|
||||||
} else {
|
} else {
|
||||||
final TelegramPollingBot bot = new TelegramPollingBot(telegramConnectConfig);
|
final TelegramPollingBot bot = new TelegramPollingBot(telegramPollingConfig);
|
||||||
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
||||||
botapi.registerBot(bot);
|
botapi.registerBot(bot);
|
||||||
this.telegramBot = bot;
|
this.telegramBot = bot;
|
||||||
@ -98,25 +92,25 @@ public class TelegramConnectBot implements TelegramConnect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DefaultBotOptions.ProxyType convertProxyType(Type type) {
|
private DefaultBotOptions.ProxyType convertProxyType(ProxyConfig.Type type) {
|
||||||
return switch (type) {
|
switch (type) {
|
||||||
case SOCKS5 -> DefaultBotOptions.ProxyType.SOCKS5;
|
case SOCKS5:
|
||||||
case SOCKS4 -> DefaultBotOptions.ProxyType.SOCKS4;
|
return DefaultBotOptions.ProxyType.SOCKS5;
|
||||||
case HTTP -> DefaultBotOptions.ProxyType.HTTP;
|
case SOCKS4:
|
||||||
};
|
return DefaultBotOptions.ProxyType.SOCKS4;
|
||||||
|
case HTTP:
|
||||||
|
return DefaultBotOptions.ProxyType.HTTP;
|
||||||
|
default:
|
||||||
|
return DefaultBotOptions.ProxyType.NO_PROXY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initEventDistributor(EventDistributor eventDistributor) {
|
AbsSender getAdsSender() {
|
||||||
telegramBot.initEventDistributor(eventDistributor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getToken() {
|
|
||||||
return telegramConnectConfig.getBotToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AbsSender getAbsSender() {
|
|
||||||
return telegramBot.getAdsSender();
|
return telegramBot.getAdsSender();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initEventDistributor(EventDistributorService eventDistributor) {
|
||||||
|
telegramBot.initEventDistributor(eventDistributor);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,225 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.listen;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoard;
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.button.SimpleButton;
|
||||||
|
import dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoard;
|
||||||
|
import dev.struchkov.godfather.context.service.sender.SendType;
|
||||||
|
import dev.struchkov.godfather.context.service.sender.Sending;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.keyboard.button.ButtonUrl;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.keyboard.button.ButtonWebApp;
|
||||||
|
import dev.struchkov.godfather.telegram.service.SendPreProcessing;
|
||||||
|
import dev.struchkov.haiti.context.exception.ConvertException;
|
||||||
|
import dev.struchkov.haiti.utils.Inspector;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
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.ReplyKeyboardMarkup;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.webapp.WebAppInfo;
|
||||||
|
import org.telegram.telegrambots.meta.bots.AbsSender;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [15/07/2019]
|
||||||
|
*/
|
||||||
|
public class TelegramSender implements Sending {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(TelegramSender.class);
|
||||||
|
|
||||||
|
private static final String ERROR_REPLACE_MESSAGE = "Bad Request: message to edit not found";
|
||||||
|
|
||||||
|
private final AbsSender absSender;
|
||||||
|
private Map<Long, Integer> map = new HashMap<>();
|
||||||
|
|
||||||
|
private SendPreProcessing sendPreProcessing;
|
||||||
|
|
||||||
|
public TelegramSender(TelegramConnect telegramConnect) {
|
||||||
|
this.absSender = telegramConnect.getAdsSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSendPreProcessing(SendPreProcessing sendPreProcessing) {
|
||||||
|
this.sendPreProcessing = sendPreProcessing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer) {
|
||||||
|
isNotNull(telegramId, boxAnswer);
|
||||||
|
try {
|
||||||
|
if (boxAnswer.isReplace() && map.containsKey(telegramId)) {
|
||||||
|
replaceMessage(telegramId, boxAnswer);
|
||||||
|
} else {
|
||||||
|
sendMessage(telegramId, boxAnswer);
|
||||||
|
}
|
||||||
|
} catch (TelegramApiRequestException e) {
|
||||||
|
log.error(e.getApiResponse());
|
||||||
|
if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) {
|
||||||
|
sendMessage(telegramId, boxAnswer);
|
||||||
|
}
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceMessage(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer) throws TelegramApiException {
|
||||||
|
final EditMessageText editMessageText = new EditMessageText();
|
||||||
|
editMessageText.setChatId(String.valueOf(telegramId));
|
||||||
|
editMessageText.setMessageId(map.get(telegramId));
|
||||||
|
editMessageText.enableMarkdown(true);
|
||||||
|
editMessageText.setText(boxAnswer.getMessage());
|
||||||
|
editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard()));
|
||||||
|
absSender.execute(editMessageText);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendMessage(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer) {
|
||||||
|
final SendMessage sendMessage = new SendMessage();
|
||||||
|
sendMessage.enableMarkdown(true);
|
||||||
|
sendMessage.setChatId(String.valueOf(telegramId));
|
||||||
|
sendMessage.setText(
|
||||||
|
sendPreProcessing != null
|
||||||
|
? sendPreProcessing.pretreatment(boxAnswer.getMessage())
|
||||||
|
: boxAnswer.getMessage()
|
||||||
|
);
|
||||||
|
sendMessage.setReplyMarkup(convertKeyBoard(boxAnswer.getKeyBoard()));
|
||||||
|
try {
|
||||||
|
final Message execute = absSender.execute(sendMessage);
|
||||||
|
|
||||||
|
map.put(telegramId, execute.getMessageId());
|
||||||
|
} catch (TelegramApiRequestException e) {
|
||||||
|
log.error(e.getApiResponse());
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReplyKeyboard convertKeyBoard(KeyBoard keyBoard) {
|
||||||
|
if (keyBoard != null) {
|
||||||
|
switch (keyBoard.getType()) {
|
||||||
|
case InlineKeyBoard.TYPE:
|
||||||
|
return convertInlineKeyBoard((InlineKeyBoard) keyBoard);
|
||||||
|
case MarkupKeyBoard.TYPE:
|
||||||
|
return convertMarkupKeyBoard((MarkupKeyBoard) keyBoard);
|
||||||
|
case SimpleKeyBoard.TYPE:
|
||||||
|
return convertSimpleKeyBoard((SimpleKeyBoard) keyBoard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReplyKeyboard convertSimpleKeyBoard(SimpleKeyBoard keyBoard) {
|
||||||
|
final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
|
||||||
|
keyboardMarkup.setKeyboard(
|
||||||
|
keyBoard.getLines().stream()
|
||||||
|
.map(this::convertMarkupLine)
|
||||||
|
.toList()
|
||||||
|
);
|
||||||
|
return keyboardMarkup;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReplyKeyboard convertMarkupKeyBoard(MarkupKeyBoard keyBoard) {
|
||||||
|
if (keyBoard != null) {
|
||||||
|
final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
|
||||||
|
keyboardMarkup.setOneTimeKeyboard(keyBoard.isOneTime());
|
||||||
|
keyboardMarkup.setInputFieldPlaceholder(keyBoard.getInputFieldPlaceholder());
|
||||||
|
keyboardMarkup.setResizeKeyboard(keyBoard.isResizeKeyboard());
|
||||||
|
keyboardMarkup.setKeyboard(
|
||||||
|
keyBoard.getLines().stream()
|
||||||
|
.map(this::convertMarkupLine)
|
||||||
|
.toList()
|
||||||
|
);
|
||||||
|
return keyboardMarkup;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private InlineKeyboardMarkup convertInlineKeyBoard(InlineKeyBoard keyBoard) {
|
||||||
|
if (keyBoard != null) {
|
||||||
|
final InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup();
|
||||||
|
inlineKeyboardMarkup.setKeyboard(
|
||||||
|
keyBoard.getLines().stream()
|
||||||
|
.map(this::convertInlineLine)
|
||||||
|
.toList()
|
||||||
|
);
|
||||||
|
return inlineKeyboardMarkup;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<InlineKeyboardButton> convertInlineLine(KeyBoardLine line) {
|
||||||
|
return line.getButtons().stream().map(this::convertInlineButton).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private KeyboardRow convertMarkupLine(KeyBoardLine line) {
|
||||||
|
final List<KeyboardButton> buttons = line.getButtons().stream().map(this::convertMarkupButton).toList();
|
||||||
|
return new KeyboardRow(buttons);
|
||||||
|
}
|
||||||
|
|
||||||
|
private InlineKeyboardButton convertInlineButton(KeyBoardButton keyBoardButton) {
|
||||||
|
final InlineKeyboardButton button = new InlineKeyboardButton();
|
||||||
|
switch (keyBoardButton.getType()) {
|
||||||
|
case SimpleButton.TYPE -> {
|
||||||
|
final SimpleButton simpleButton = (SimpleButton) keyBoardButton;
|
||||||
|
final String callbackData = simpleButton.getCallbackData();
|
||||||
|
final String label = simpleButton.getLabel();
|
||||||
|
button.setText(label);
|
||||||
|
button.setCallbackData(callbackData != null ? callbackData : label);
|
||||||
|
}
|
||||||
|
case ButtonUrl.TYPE -> {
|
||||||
|
final ButtonUrl buttonUrl = (ButtonUrl) keyBoardButton;
|
||||||
|
button.setUrl(buttonUrl.getUrl());
|
||||||
|
button.setText(buttonUrl.getLabel());
|
||||||
|
}
|
||||||
|
case ButtonWebApp.TYPE -> {
|
||||||
|
final ButtonWebApp buttonWebApp = (ButtonWebApp) keyBoardButton;
|
||||||
|
final WebAppInfo webAppInfo = WebAppInfo.builder().url(buttonWebApp.getUrl()).build();
|
||||||
|
button.setWebApp(webAppInfo);
|
||||||
|
button.setText(buttonWebApp.getLabel());
|
||||||
|
}
|
||||||
|
default -> throw new ConvertException("Ошибка преобразования кнопки");
|
||||||
|
}
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
private KeyboardButton convertMarkupButton(KeyBoardButton keyBoardButton) {
|
||||||
|
final KeyboardButton button = new KeyboardButton();
|
||||||
|
switch (keyBoardButton.getType()) {
|
||||||
|
case SimpleButton.TYPE -> {
|
||||||
|
final SimpleButton simpleButton = (SimpleButton) keyBoardButton;
|
||||||
|
button.setText(simpleButton.getLabel());
|
||||||
|
Inspector.isNull(simpleButton.getCallbackData(), ConvertException.supplier("CallbackData поддерживает только Inline клавитаура"));
|
||||||
|
}
|
||||||
|
case ButtonWebApp.TYPE -> {
|
||||||
|
final ButtonWebApp buttonWebApp = (ButtonWebApp) keyBoardButton;
|
||||||
|
final WebAppInfo webAppInfo = WebAppInfo.builder().url(buttonWebApp.getUrl()).build();
|
||||||
|
button.setText(buttonWebApp.getLabel());
|
||||||
|
button.setWebApp(webAppInfo);
|
||||||
|
}
|
||||||
|
default -> throw new ConvertException("Ошибка преобразования кнопки");
|
||||||
|
}
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendType getType() {
|
||||||
|
return SendType.PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* // TODO: 18.09.2020 Добавить описание.
|
||||||
|
*
|
||||||
|
* @author upagge 18.09.2020
|
||||||
|
*/
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface SendPreProcessing {
|
||||||
|
|
||||||
|
String pretreatment(String messageText);
|
||||||
|
|
||||||
|
}
|
@ -1,24 +1,24 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.core.util;
|
package dev.struchkov.godfather.telegram.utils;
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton;
|
import dev.struchkov.godfather.context.domain.keyboard.button.SimpleButton;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard;
|
import dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoard;
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine;
|
import dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoardLine;
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton.simpleButton;
|
import static dev.struchkov.godfather.context.domain.keyboard.button.SimpleButton.simpleButton;
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
|
import static dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
||||||
|
|
||||||
public final class InlineKeyBoards {
|
public final class InlineKeyBoards {
|
||||||
|
|
||||||
public static final SimpleButton YES_BUTTON = simpleButton("Да", "Да");
|
public static final SimpleButton YES_BUTTON = simpleButton("Да", "{\"button\": \"yes\"}");
|
||||||
public static final SimpleButton NO_BUTTON = simpleButton("Нет", "Нет");
|
public static final SimpleButton NO_BUTTON = simpleButton("Нет", "{\"button\": \"no\"}");
|
||||||
|
|
||||||
private InlineKeyBoards() {
|
public InlineKeyBoards() {
|
||||||
utilityClass();
|
utilityClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,8 +27,10 @@ public final class InlineKeyBoards {
|
|||||||
*
|
*
|
||||||
* @return {@link SimpleKeyBoard}
|
* @return {@link SimpleKeyBoard}
|
||||||
*/
|
*/
|
||||||
public static SimpleKeyBoardLine lineYesOrNo() {
|
public static InlineKeyBoard keyBoardYesNo() {
|
||||||
return simpleLine(YES_BUTTON, NO_BUTTON);
|
return InlineKeyBoard.inlineKeyBoard(
|
||||||
|
SimpleKeyBoardLine.builder().button(YES_BUTTON).button(NO_BUTTON).build()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,42 +95,34 @@ public final class InlineKeyBoards {
|
|||||||
return keyBoard.build();
|
return keyBoard.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void verticalDuoMenu(InlineKeyBoard.Builder builder, List<? extends KeyBoardButton> buttons) {
|
public static InlineKeyBoard verticalDuoMenu(KeyBoardButton... buttons) {
|
||||||
|
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder();
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder();
|
SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder();
|
||||||
for (int i = 0; i <= buttons.size() - 1; i++) {
|
for (int i = 0; i <= buttons.length - 1; i++) {
|
||||||
keyBoardLine.button(buttons.get(i));
|
keyBoardLine.button(buttons[i]);
|
||||||
if (flag) {
|
if (flag) {
|
||||||
if (i == buttons.size() - 1) {
|
if (i == buttons.length - 1) {
|
||||||
builder.line(keyBoardLine.build());
|
keyBoard.line(keyBoardLine.build());
|
||||||
} else {
|
} else {
|
||||||
flag = false;
|
flag = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
builder.line(keyBoardLine.build());
|
keyBoard.line(keyBoardLine.build());
|
||||||
keyBoardLine = SimpleKeyBoardLine.builder();
|
keyBoardLine = SimpleKeyBoardLine.builder();
|
||||||
flag = true;
|
flag = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static InlineKeyBoard verticalDuoMenu(List<? extends KeyBoardButton> buttons) {
|
|
||||||
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder();
|
|
||||||
verticalDuoMenu(keyBoard, buttons);
|
|
||||||
return keyBoard.build();
|
return keyBoard.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InlineKeyBoard verticalDuoMenu(KeyBoardButton... buttons) {
|
|
||||||
return verticalDuoMenu(Arrays.stream(buttons).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке
|
* Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке
|
||||||
*
|
*
|
||||||
* @param buttons Список кнопок
|
* @param buttons Список кнопок
|
||||||
* @return {@link SimpleKeyBoard}
|
* @return {@link SimpleKeyBoard}
|
||||||
*/
|
*/
|
||||||
public static InlineKeyBoard verticalMenuButton(KeyBoardButton... buttons) {
|
public static InlineKeyBoard verticalMenuButton(List<KeyBoardButton> buttons) {
|
||||||
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder();
|
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder();
|
||||||
for (KeyBoardButton simpleButton : buttons) {
|
for (KeyBoardButton simpleButton : buttons) {
|
||||||
keyBoard.line(simpleLine(simpleButton));
|
keyBoard.line(simpleLine(simpleButton));
|
@ -1,25 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-core-main</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,83 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.core;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.TelegramConnectConfig;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.telegram.telegrambots.bots.DefaultAbsSender;
|
|
||||||
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
|
|
||||||
import java.net.Authenticator;
|
|
||||||
import java.net.PasswordAuthentication;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
public class TelegramDefaultConnect implements TelegramConnect {
|
|
||||||
|
|
||||||
private final String botToken;
|
|
||||||
private final AbsSender absSender;
|
|
||||||
|
|
||||||
public TelegramDefaultConnect(TelegramConnectConfig connectConfig) {
|
|
||||||
this.botToken = connectConfig.getBotToken();
|
|
||||||
this.absSender = createAbsSender(connectConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private DefaultAbsSender createAbsSender(TelegramConnectConfig connectConfig) {
|
|
||||||
final DefaultBotOptions botOptions = new DefaultBotOptions();
|
|
||||||
|
|
||||||
final ProxyConfig proxyConfig = connectConfig.getProxyConfig();
|
|
||||||
if (checkNotNull(proxyConfig) && proxyConfig.isEnable()) {
|
|
||||||
if (checkNotNull(proxyConfig.getPassword())) {
|
|
||||||
try {
|
|
||||||
Authenticator.setDefault(new Authenticator() {
|
|
||||||
@Override
|
|
||||||
protected PasswordAuthentication getPasswordAuthentication() {
|
|
||||||
return new PasswordAuthentication(
|
|
||||||
proxyConfig.getUser(),
|
|
||||||
proxyConfig.getPassword().toCharArray()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (checkNotNull(proxyConfig.getHost())) {
|
|
||||||
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
|
|
||||||
// System.setProperty("javax.net.debug", "all");
|
|
||||||
botOptions.setProxyHost(proxyConfig.getHost());
|
|
||||||
botOptions.setProxyPort(proxyConfig.getPort());
|
|
||||||
botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DefaultAbsSender(botOptions) {
|
|
||||||
@Override
|
|
||||||
public String getBotToken() {
|
|
||||||
return botToken;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private DefaultBotOptions.ProxyType convertProxyType(ProxyConfig.Type type) {
|
|
||||||
return switch (type) {
|
|
||||||
case SOCKS5 -> DefaultBotOptions.ProxyType.SOCKS5;
|
|
||||||
case SOCKS4 -> DefaultBotOptions.ProxyType.SOCKS4;
|
|
||||||
case HTTP -> DefaultBotOptions.ProxyType.HTTP;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AbsSender getAbsSender() {
|
|
||||||
return absSender;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getToken() {
|
|
||||||
return botToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,156 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.core.util;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.ButtonClickAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.CommandAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.ContactAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotEmpty;
|
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public final class Attachments {
|
|
||||||
|
|
||||||
private Attachments() {
|
|
||||||
utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<LinkAttachment> findAllLinks(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
return attachments.stream()
|
|
||||||
.filter(Attachments::isLink)
|
|
||||||
.map(LinkAttachment.class::cast)
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<LinkAttachment> findFirstLink(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isLink(attachment)) {
|
|
||||||
return Optional.of((LinkAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<ButtonClickAttachment> findFirstButtonClick(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isButtonClick(attachment)) {
|
|
||||||
return Optional.of((ButtonClickAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<PictureGroupAttachment> findFirstPictureGroup(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isPictureGroup(attachment)) {
|
|
||||||
return Optional.of((PictureGroupAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<Picture> findFirstLargePicture(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isPictureGroup(attachment)) {
|
|
||||||
final PictureGroupAttachment pictureGroup = (PictureGroupAttachment) attachment;
|
|
||||||
return pictureGroup.getLargePicture();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<DocumentAttachment> findFirstDocument(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isDocument(attachment)) {
|
|
||||||
return Optional.of((DocumentAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<ContactAttachment> findFirstContact(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isContact(attachment)) {
|
|
||||||
return Optional.of((ContactAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Optional<CommandAttachment> findFirstCommand(Collection<Attachment> attachments) {
|
|
||||||
if (checkNotEmpty(attachments)) {
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isCommand(attachment)) {
|
|
||||||
return Optional.of((CommandAttachment) attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasDocument(Collection<Attachment> attachments) {
|
|
||||||
isNotNull(attachments);
|
|
||||||
for (Attachment attachment : attachments) {
|
|
||||||
if (isDocument(attachment)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isCommand(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.COMMAND.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDocument(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.DOCUMENT.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isContact(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.CONTACT.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isPictureGroup(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.PICTURE.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isLink(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.LINK.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isButtonClick(Attachment attachment) {
|
|
||||||
isNotNull(attachment);
|
|
||||||
return TelegramAttachmentType.BUTTON_CLICK.name().equals(attachment.getType());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<artifactId>telegram-core</artifactId>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-core-quarkus</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-core-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,24 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.core;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.quarkus.context.service.PersonSettingService;
|
|
||||||
import dev.struchkov.godfather.quarkus.core.GeneralAutoResponder;
|
|
||||||
import dev.struchkov.godfather.quarkus.core.service.StorylineService;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramSending;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [18.08.2019]
|
|
||||||
*/
|
|
||||||
public class MailAutoresponderTelegram extends GeneralAutoResponder<Mail> {
|
|
||||||
|
|
||||||
public MailAutoresponderTelegram(
|
|
||||||
TelegramSending sending,
|
|
||||||
PersonSettingService personSettingService,
|
|
||||||
StorylineService<Mail> storyLineService
|
|
||||||
) {
|
|
||||||
super(sending, personSettingService, storyLineService);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.core;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.TelegramConnectConfig;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramBot;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [15/07/2019]
|
|
||||||
*/
|
|
||||||
public class TelegramPollingBot extends TelegramLongPollingBot implements TelegramBot {
|
|
||||||
|
|
||||||
private final TelegramConnectConfig telegramConnectConfig;
|
|
||||||
private EventDistributor eventDistributor;
|
|
||||||
|
|
||||||
public TelegramPollingBot(TelegramConnectConfig telegramConnectConfig, DefaultBotOptions defaultBotOptions) {
|
|
||||||
super(defaultBotOptions);
|
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TelegramPollingBot(TelegramConnectConfig telegramConnectConfig) {
|
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onUpdateReceived(Update update) {
|
|
||||||
if (update != null && eventDistributor != null) {
|
|
||||||
eventDistributor.processing(update)
|
|
||||||
.subscribe().asCompletionStage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getBotUsername() {
|
|
||||||
return telegramConnectConfig.getBotUsername();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getBotToken() {
|
|
||||||
return telegramConnectConfig.getBotToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AbsSender getAdsSender() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initEventDistributor(@NotNull EventDistributor eventDistributor) {
|
|
||||||
this.eventDistributor = eventDistributor;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.core.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.files.ByteContainer;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.files.FileContainer;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.GetFile;
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class AttachmentServiceImpl {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(AttachmentServiceImpl.class);
|
|
||||||
|
|
||||||
private final AbsSender absSender;
|
|
||||||
private final String botToken;
|
|
||||||
|
|
||||||
private String folderPathForFiles;
|
|
||||||
|
|
||||||
public AttachmentServiceImpl(TelegramConnect telegramConnect) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
this.botToken = telegramConnect.getToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFolderPathForFiles(String folderPathForFiles) {
|
|
||||||
if (folderPathForFiles != null) {
|
|
||||||
this.folderPathForFiles = folderPathForFiles + "/";
|
|
||||||
try (final Stream<Path> pathStream = Files.list(Path.of(folderPathForFiles))) {
|
|
||||||
pathStream.forEach(path -> {
|
|
||||||
try {
|
|
||||||
Files.delete(path);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public FileContainer uploadFile(@NotNull DocumentAttachment documentAttachment) {
|
|
||||||
isNotNull(documentAttachment);
|
|
||||||
try {
|
|
||||||
final File file = downloadFile(documentAttachment);
|
|
||||||
return new FileContainer(documentAttachment.getFileName(), documentAttachment.getMimeType(), file);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return FileContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteContainer uploadBytes(@NotNull DocumentAttachment documentAttachment) {
|
|
||||||
isNotNull(documentAttachment);
|
|
||||||
try {
|
|
||||||
final byte[] bytes = downloadBytes(documentAttachment);
|
|
||||||
return new ByteContainer(documentAttachment.getFileName(), documentAttachment.getMimeType(), bytes);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return ByteContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteContainer uploadBytes(@NotNull Picture picture) {
|
|
||||||
isNotNull(picture);
|
|
||||||
try {
|
|
||||||
final byte[] bytes = downloadBytes(picture);
|
|
||||||
return new ByteContainer(null, "image/jpeg", bytes);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return ByteContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] downloadBytes(Picture picture) throws TelegramApiException, IOException {
|
|
||||||
return telegramDownloadBytes(picture.getFileId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] downloadBytes(DocumentAttachment documentAttachment) throws TelegramApiException, IOException {
|
|
||||||
return telegramDownloadBytes(documentAttachment.getFileId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] telegramDownloadBytes(String fileId) throws TelegramApiException, IOException {
|
|
||||||
final String fileUrl = getFileUrl(fileId);
|
|
||||||
return IOUtils.toByteArray(new URL(fileUrl));
|
|
||||||
}
|
|
||||||
|
|
||||||
private File downloadFile(DocumentAttachment documentAttachment) throws IOException, TelegramApiException {
|
|
||||||
final String fileUrl = getFileUrl(documentAttachment.getFileId());
|
|
||||||
|
|
||||||
final StringBuilder filePath = new StringBuilder();
|
|
||||||
if (folderPathForFiles != null) {
|
|
||||||
filePath.append(folderPathForFiles);
|
|
||||||
}
|
|
||||||
filePath.append(UUID.randomUUID());
|
|
||||||
filePath.append("_");
|
|
||||||
filePath.append(documentAttachment.getFileName());
|
|
||||||
|
|
||||||
final File localFile = new File(filePath.toString());
|
|
||||||
final InputStream is = new URL(fileUrl).openStream();
|
|
||||||
FileUtils.copyInputStreamToFile(is, localFile);
|
|
||||||
return localFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getFileUrl(String fileId) throws TelegramApiException {
|
|
||||||
final GetFile getFile = new GetFile();
|
|
||||||
getFile.setFileId(fileId);
|
|
||||||
return absSender.execute(getFile).getFileUrl(botToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.core.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.repository.SenderRepository;
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class SenderMapRepository implements SenderRepository {
|
|
||||||
|
|
||||||
private final Map<String, Integer> lastMessageId = new HashMap<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<Integer> getLastSendMessage(String telegramId) {
|
|
||||||
return Uni.createFrom().item(lastMessageId.get(telegramId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<Void> saveLastSendMessage(@NotNull String telegramId, @NotNull Integer messageId) {
|
|
||||||
isNotNull(telegramId);
|
|
||||||
lastMessageId.put(telegramId, messageId);
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<Void> removeLastSendMessage(String telegramId) {
|
|
||||||
lastMessageId.remove(telegramId);
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-core-simple</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-core-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,24 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.simple.context.service.PersonSettingService;
|
|
||||||
import dev.struchkov.godfather.simple.core.GeneralAutoResponder;
|
|
||||||
import dev.struchkov.godfather.simple.core.service.StorylineService;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [18.08.2019]
|
|
||||||
*/
|
|
||||||
public class MailAutoresponderTelegram extends GeneralAutoResponder<Mail> {
|
|
||||||
|
|
||||||
public MailAutoresponderTelegram(
|
|
||||||
TelegramSending sending,
|
|
||||||
PersonSettingService personSettingService,
|
|
||||||
StorylineService<Mail> storyLineService
|
|
||||||
) {
|
|
||||||
super(sending, personSettingService, storyLineService);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,105 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig.Type;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.config.TelegramConnectConfig;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.EventDistributor;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramBot;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.telegram.telegrambots.bots.DefaultBotOptions;
|
|
||||||
import org.telegram.telegrambots.meta.TelegramBotsApi;
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
|
||||||
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
|
|
||||||
|
|
||||||
import java.net.Authenticator;
|
|
||||||
import java.net.PasswordAuthentication;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
public class TelegramConnectBot implements TelegramConnect {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(TelegramConnectBot.class);
|
|
||||||
|
|
||||||
private TelegramBot telegramBot;
|
|
||||||
private final TelegramConnectConfig telegramConnectConfig;
|
|
||||||
|
|
||||||
public TelegramConnectBot(TelegramConnectConfig telegramConnectConfig) {
|
|
||||||
this.telegramConnectConfig = telegramConnectConfig;
|
|
||||||
initLongPolling(telegramConnectConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initLongPolling(TelegramConnectConfig telegramConnectConfig) {
|
|
||||||
final ProxyConfig proxyConfig = telegramConnectConfig.getProxyConfig();
|
|
||||||
if (checkNotNull(proxyConfig) && checkNotNull(proxyConfig.getPassword()) && !"".equals(proxyConfig.getPassword())) {
|
|
||||||
try {
|
|
||||||
Authenticator.setDefault(new Authenticator() {
|
|
||||||
@Override
|
|
||||||
protected PasswordAuthentication getPasswordAuthentication() {
|
|
||||||
return new PasswordAuthentication(
|
|
||||||
proxyConfig.getUser(),
|
|
||||||
proxyConfig.getPassword().toCharArray()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final TelegramBotsApi botapi;
|
|
||||||
try {
|
|
||||||
if (checkNotNull(proxyConfig) && proxyConfig.isEnable() && checkNotNull(proxyConfig.getHost()) && !"".equals(proxyConfig.getHost())) {
|
|
||||||
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
|
|
||||||
// System.setProperty("javax.net.debug", "all");
|
|
||||||
log.info(System.getProperty("https.protocols"));
|
|
||||||
DefaultBotOptions botOptions = new DefaultBotOptions();
|
|
||||||
botOptions.setProxyHost(proxyConfig.getHost());
|
|
||||||
botOptions.setProxyPort(proxyConfig.getPort());
|
|
||||||
botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
|
|
||||||
|
|
||||||
final TelegramPollingBot bot = new TelegramPollingBot(telegramConnectConfig, botOptions);
|
|
||||||
|
|
||||||
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
|
||||||
botapi.registerBot(bot);
|
|
||||||
this.telegramBot = bot;
|
|
||||||
} else {
|
|
||||||
final TelegramPollingBot bot = new TelegramPollingBot(telegramConnectConfig);
|
|
||||||
botapi = new TelegramBotsApi(DefaultBotSession.class);
|
|
||||||
botapi.registerBot(bot);
|
|
||||||
this.telegramBot = bot;
|
|
||||||
}
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private DefaultBotOptions.ProxyType convertProxyType(Type type) {
|
|
||||||
return switch (type) {
|
|
||||||
case SOCKS5 -> DefaultBotOptions.ProxyType.SOCKS5;
|
|
||||||
case SOCKS4 -> DefaultBotOptions.ProxyType.SOCKS4;
|
|
||||||
case HTTP -> DefaultBotOptions.ProxyType.HTTP;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initEventDistributor(EventDistributor eventDistributor) {
|
|
||||||
telegramBot.initEventDistributor(eventDistributor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getToken() {
|
|
||||||
return telegramConnectConfig.getBotToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AbsSender getAbsSender() {
|
|
||||||
return telegramBot.getAdsSender();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.files.ByteContainer;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.files.FileContainer;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.GetFile;
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class AttachmentServiceImpl {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(AttachmentServiceImpl.class);
|
|
||||||
|
|
||||||
private final AbsSender absSender;
|
|
||||||
private final String botToken;
|
|
||||||
|
|
||||||
private String folderPathForFiles;
|
|
||||||
|
|
||||||
public AttachmentServiceImpl(TelegramConnect telegramConnect) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
this.botToken = telegramConnect.getToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFolderPathForFiles(String folderPathForFiles) {
|
|
||||||
if (folderPathForFiles != null) {
|
|
||||||
this.folderPathForFiles = folderPathForFiles + "/";
|
|
||||||
try (final Stream<Path> pathStream = Files.list(Path.of(folderPathForFiles))) {
|
|
||||||
pathStream.forEach(path -> {
|
|
||||||
try {
|
|
||||||
Files.delete(path);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public FileContainer uploadFile(@NotNull DocumentAttachment documentAttachment) {
|
|
||||||
isNotNull(documentAttachment);
|
|
||||||
try {
|
|
||||||
final File file = downloadFile(documentAttachment);
|
|
||||||
return new FileContainer(documentAttachment.getFileName(), documentAttachment.getMimeType(), file);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return FileContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteContainer uploadBytes(@NotNull DocumentAttachment documentAttachment) {
|
|
||||||
isNotNull(documentAttachment);
|
|
||||||
try {
|
|
||||||
final byte[] bytes = downloadBytes(documentAttachment);
|
|
||||||
return new ByteContainer(documentAttachment.getFileName(), documentAttachment.getMimeType(), bytes);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return ByteContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteContainer uploadBytes(@NotNull Picture picture) {
|
|
||||||
isNotNull(picture);
|
|
||||||
try {
|
|
||||||
final byte[] bytes = downloadBytes(picture);
|
|
||||||
return new ByteContainer(null, "image/jpeg", bytes);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return ByteContainer.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] downloadBytes(Picture picture) throws TelegramApiException, IOException {
|
|
||||||
return telegramDownloadBytes(picture.getFileId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] downloadBytes(DocumentAttachment documentAttachment) throws TelegramApiException, IOException {
|
|
||||||
return telegramDownloadBytes(documentAttachment.getFileId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] telegramDownloadBytes(String fileId) throws TelegramApiException, IOException {
|
|
||||||
final String fileUrl = getFileUrl(fileId);
|
|
||||||
return IOUtils.toByteArray(new URL(fileUrl));
|
|
||||||
}
|
|
||||||
|
|
||||||
private File downloadFile(DocumentAttachment documentAttachment) throws IOException, TelegramApiException {
|
|
||||||
final String fileUrl = getFileUrl(documentAttachment.getFileId());
|
|
||||||
|
|
||||||
final StringBuilder filePath = new StringBuilder();
|
|
||||||
if (folderPathForFiles != null) {
|
|
||||||
filePath.append(folderPathForFiles);
|
|
||||||
}
|
|
||||||
filePath.append(UUID.randomUUID());
|
|
||||||
filePath.append("_");
|
|
||||||
filePath.append(documentAttachment.getFileName());
|
|
||||||
|
|
||||||
final File localFile = new File(filePath.toString());
|
|
||||||
final InputStream is = new URL(fileUrl).openStream();
|
|
||||||
FileUtils.copyInputStreamToFile(is, localFile);
|
|
||||||
return localFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getFileUrl(String fileId) throws TelegramApiException {
|
|
||||||
final GetFile getFile = new GetFile();
|
|
||||||
getFile.setFileId(fileId);
|
|
||||||
return absSender.execute(getFile).getFileUrl(botToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core.service;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.repository.SenderRepository;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class SenderMapRepository implements SenderRepository {
|
|
||||||
|
|
||||||
private final Map<String, Integer> lastMessageId = new HashMap<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<Integer> getLastSendMessage(String telegramId) {
|
|
||||||
return Optional.ofNullable(lastMessageId.get(telegramId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveLastSendMessage(@NotNull String telegramId, @NotNull Integer messageId) {
|
|
||||||
isNotNull(telegramId);
|
|
||||||
lastMessageId.put(telegramId, messageId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeLastSendMessage(String telegramId) {
|
|
||||||
lastMessageId.remove(telegramId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.core.util;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.ButtonClickAttachment;
|
|
||||||
import dev.struchkov.godfather.telegram.main.core.util.Attachments;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Predicate;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
|
|
||||||
|
|
||||||
public class TriggerChecks {
|
|
||||||
|
|
||||||
private TriggerChecks() {
|
|
||||||
utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Predicate<Mail> clickButtonRaw(String rawCallBackData) {
|
|
||||||
return mail -> {
|
|
||||||
final Optional<ButtonClickAttachment> optButtonClick = Attachments.findFirstButtonClick(mail.getAttachments());
|
|
||||||
if (optButtonClick.isPresent()) {
|
|
||||||
final ButtonClickAttachment buttonClick = optButtonClick.get();
|
|
||||||
final String rawData = buttonClick.getRawCallBackData();
|
|
||||||
return rawData.equals(rawCallBackData);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-bot</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-domain</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather</groupId>
|
|
||||||
<artifactId>bot-context-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,147 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
|
||||||
import dev.struchkov.haiti.utils.Inspector;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
|
|
||||||
import static dev.struchkov.godfather.telegram.domain.UnitPaginationUtil.navigableLine;
|
|
||||||
|
|
||||||
public class UnitPage<T> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Дополнительные линии клавиатуры. Выводятся после кнопок навигации.
|
|
||||||
*/
|
|
||||||
private final List<KeyBoardLine> additionalLines = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Элементы, которые будут выводиться.
|
|
||||||
*/
|
|
||||||
private List<T> elements;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Номер текущей страницы.
|
|
||||||
*/
|
|
||||||
private Integer currentOffset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Общее количество элементов на всех страницах.
|
|
||||||
*/
|
|
||||||
private Integer countAllElements;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Функция преобразования элементов с линии.
|
|
||||||
*/
|
|
||||||
private Function<T, KeyBoardLine> function;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Сообщение, которое выводится над результатами
|
|
||||||
*/
|
|
||||||
private String message;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Флаг, определяющий нужно ли заменить старое сообщение или вывести новое (по умолчанию заменять)
|
|
||||||
*/
|
|
||||||
private boolean replace;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Флаг, исключающий добавление строки с навигацией
|
|
||||||
*/
|
|
||||||
private boolean removeDefaultNavigableLine;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Сообщение, которое будет отправлено, если коллекция элементов пустая.
|
|
||||||
*/
|
|
||||||
private BoxAnswer emptyElements;
|
|
||||||
|
|
||||||
public static <T> UnitPage<T> builder() {
|
|
||||||
return new UnitPage<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> elements(List<T> elements) {
|
|
||||||
this.elements = elements;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> countAllElements(Integer countAllElements) {
|
|
||||||
this.countAllElements = countAllElements;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> currentOffset(Integer currentOffset) {
|
|
||||||
this.currentOffset = currentOffset;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> additionLine(KeyBoardLine line) {
|
|
||||||
additionalLines.add(line);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> additionLine(KeyBoardButton button) {
|
|
||||||
additionalLines.add(simpleLine(button));
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> mapper(Function<T, KeyBoardLine> function) {
|
|
||||||
this.function = function;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> message(String message) {
|
|
||||||
this.message = message;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> replace(boolean replace) {
|
|
||||||
this.replace = replace;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> emptyElements(BoxAnswer boxAnswer) {
|
|
||||||
this.emptyElements = boxAnswer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnitPage<T> removeDefaultNavigableLine() {
|
|
||||||
this.removeDefaultNavigableLine = true;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BoxAnswer build() {
|
|
||||||
Inspector.isNotNull(currentOffset, countAllElements, function);
|
|
||||||
if (elements.isEmpty()) {
|
|
||||||
return emptyElements != null ? emptyElements : BoxAnswer.boxAnswer("Данные не найдены.");
|
|
||||||
} else {
|
|
||||||
final List<KeyBoardLine> lines = elements.stream()
|
|
||||||
.map(function)
|
|
||||||
.toList();
|
|
||||||
final InlineKeyBoard.Builder builder = InlineKeyBoard.builder();
|
|
||||||
|
|
||||||
lines.forEach(builder::line);
|
|
||||||
if (!removeDefaultNavigableLine) {
|
|
||||||
navigableLine(currentOffset, countAllElements).ifPresent(builder::line);
|
|
||||||
}
|
|
||||||
additionalLines.forEach(builder::line);
|
|
||||||
|
|
||||||
final InlineKeyBoard keyBoard = builder.build();
|
|
||||||
|
|
||||||
final BoxAnswer.Builder boxAnswer = BoxAnswer.builder()
|
|
||||||
.keyBoard(keyBoard)
|
|
||||||
.replace(true);
|
|
||||||
if (message != null) {
|
|
||||||
boxAnswer.message(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
boxAnswer.replace(replace);
|
|
||||||
return boxAnswer.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,88 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import static dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton.simpleButton;
|
|
||||||
|
|
||||||
|
|
||||||
public final class UnitPaginationUtil {
|
|
||||||
|
|
||||||
public static final String PAGE_REGEX = "^page\\s\\d*$";
|
|
||||||
|
|
||||||
private static final String PAGINATION_SCHEMA = "page %s";
|
|
||||||
private static final Pattern PATTERN_FOR_SEARCH_OFFSET = Pattern.compile("\\d++$");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Создание строки пагинации для передачи ее в payload кнопки
|
|
||||||
*/
|
|
||||||
public static String getStringForOffset(Integer offset) {
|
|
||||||
return PAGINATION_SCHEMA.formatted(offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Разбор передаваемой строки пагинации
|
|
||||||
*/
|
|
||||||
public static Optional<Integer> getOffsetFromString(String offsetString) {
|
|
||||||
if (!Pattern.matches(PAGE_REGEX, offsetString)) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
final Matcher matcher = PATTERN_FOR_SEARCH_OFFSET.matcher(offsetString);
|
|
||||||
if (matcher.find()) {
|
|
||||||
final String offsetNumber = offsetString.substring(matcher.start(), matcher.end());
|
|
||||||
return Optional.of(Integer.valueOf(offsetNumber));
|
|
||||||
} else {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Получение строки для клавиатуры, в которой содержатся кнопки навигации.
|
|
||||||
*
|
|
||||||
* @param currentOffset - текущее смещение, используемое для запроса
|
|
||||||
* @param countElements - общее количество элементов которое может вернуть запрос
|
|
||||||
*/
|
|
||||||
public static Optional<KeyBoardLine> navigableLine(Integer currentOffset, Integer countElements) {
|
|
||||||
final SimpleKeyBoardLine.Builder lineBuilder = SimpleKeyBoardLine.builder();
|
|
||||||
|
|
||||||
final Optional<KeyBoardButton> optPrevButton = getPrevPageButton(currentOffset);
|
|
||||||
final Optional<KeyBoardButton> optNextButton = getNextPageButton(currentOffset, countElements);
|
|
||||||
|
|
||||||
if (optPrevButton.isPresent() || optNextButton.isPresent()) {
|
|
||||||
optPrevButton.ifPresent(lineBuilder::button);
|
|
||||||
optNextButton.ifPresent(lineBuilder::button);
|
|
||||||
return Optional.of(lineBuilder.build());
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Получение кнопки навигации на прошлую страницу, т.к. пользователь находится на самой первой странице, то
|
|
||||||
* кнопки перехода на предыдущую страницу может и не быть
|
|
||||||
*/
|
|
||||||
private static Optional<KeyBoardButton> getPrevPageButton(Integer currentOffset) {
|
|
||||||
if (!currentOffset.equals(0)) {
|
|
||||||
int prevOffset = currentOffset < 5 ? 0 : currentOffset - 5;
|
|
||||||
return Optional.of(simpleButton("❮❮❮", getStringForOffset(prevOffset)));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Получение кнопки навигации на следующую страницу, т.к. пользователь может находиться на последней странице,
|
|
||||||
* то кнопки навигации вперед может и не быть
|
|
||||||
*/
|
|
||||||
private static Optional<KeyBoardButton> getNextPageButton(Integer currentOffset, Integer countElements) {
|
|
||||||
final Integer nextOffset = currentOffset + 5;
|
|
||||||
if (nextOffset.compareTo(countElements) < 0) {
|
|
||||||
return Optional.of(simpleButton("❯❯❯", getStringForOffset(nextOffset)));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.context.exception.NotFoundException.notFoundException;
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class ButtonClickAttachment extends Attachment {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Идентификатор сообщения, под которым пользователь нажал кнопку.
|
|
||||||
*/
|
|
||||||
private Integer messageId;
|
|
||||||
private String rawCallBackData;
|
|
||||||
private final Map<String, Arg> args = new HashMap<>();
|
|
||||||
|
|
||||||
public String getRawCallBackData() {
|
|
||||||
return rawCallBackData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRawCallBackData(String rawCallBackData) {
|
|
||||||
this.rawCallBackData = rawCallBackData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addClickArg(String type, String value) {
|
|
||||||
isNotNull(type, value);
|
|
||||||
args.put(type, new Arg(type, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<Arg> getArgByType(String type) {
|
|
||||||
isNotNull(type);
|
|
||||||
return Optional.ofNullable(args.get(type));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Arg getArgByTypeOrThrow(String type) {
|
|
||||||
isNotNull(type);
|
|
||||||
return Optional.of(args.get(type)).orElseThrow(notFoundException("Аргумент типа {0} не найден.", type));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<Arg> getClickArgs() {
|
|
||||||
return args.values();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getMessageId() {
|
|
||||||
return messageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMessageId(Integer messageId) {
|
|
||||||
this.messageId = messageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Arg> getArgs() {
|
|
||||||
return args;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.BUTTON_CLICK.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Arg {
|
|
||||||
private final String type;
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
private Arg(String type, String value) {
|
|
||||||
this.type = type;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
public class CommandAttachment extends Attachment {
|
|
||||||
|
|
||||||
private String value;
|
|
||||||
private String commandType;
|
|
||||||
private String arg;
|
|
||||||
private String rawValue;
|
|
||||||
|
|
||||||
public void setValue(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCommandType(String commandType) {
|
|
||||||
this.commandType = commandType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setArg(String arg) {
|
|
||||||
this.arg = arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRawValue(String rawValue) {
|
|
||||||
this.rawValue = rawValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<String> getArg() {
|
|
||||||
return Optional.ofNullable(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCommandType() {
|
|
||||||
return commandType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCommandType(String type) {
|
|
||||||
if (checkNotNull(type)) {
|
|
||||||
return type.equals(commandType);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRawValue() {
|
|
||||||
return rawValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.COMMAND.name();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
|
|
||||||
public class ContactAttachment extends Attachment {
|
|
||||||
|
|
||||||
private String phoneNumber;
|
|
||||||
private String firstName;
|
|
||||||
private String lastName;
|
|
||||||
private Long userId;
|
|
||||||
private String vCard;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* если true, то контакт принадлежит отправившему телеграм аккаунту.
|
|
||||||
*/
|
|
||||||
private boolean owner;
|
|
||||||
|
|
||||||
public String getPhoneNumber() {
|
|
||||||
return phoneNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPhoneNumber(String phoneNumber) {
|
|
||||||
this.phoneNumber = phoneNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFirstName() {
|
|
||||||
return firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstName(String firstName) {
|
|
||||||
this.firstName = firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLastName() {
|
|
||||||
return lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastName(String lastName) {
|
|
||||||
this.lastName = lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getUserId() {
|
|
||||||
return userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserId(Long userId) {
|
|
||||||
this.userId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOwner() {
|
|
||||||
return owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOwner(boolean owner) {
|
|
||||||
this.owner = owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getVCard() {
|
|
||||||
return vCard;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVCard(String vCard) {
|
|
||||||
this.vCard = vCard;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.CONTACT.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
|
|
||||||
public class DocumentAttachment extends Attachment {
|
|
||||||
|
|
||||||
private String fileId;
|
|
||||||
private Long fileSize;
|
|
||||||
private String fileName;
|
|
||||||
private String mimeType;
|
|
||||||
|
|
||||||
public String getFileId() {
|
|
||||||
return fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileId(String fileId) {
|
|
||||||
this.fileId = fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getFileSize() {
|
|
||||||
return fileSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileSize(Long fileSize) {
|
|
||||||
this.fileSize = fileSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFileName() {
|
|
||||||
return fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileName(String fileName) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMimeType() {
|
|
||||||
return mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMimeType(String mimeType) {
|
|
||||||
this.mimeType = mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.DOCUMENT.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
import dev.struchkov.haiti.utils.Parser;
|
|
||||||
import dev.struchkov.haiti.utils.domain.CompositeUrl;
|
|
||||||
|
|
||||||
public class LinkAttachment extends Attachment {
|
|
||||||
|
|
||||||
private String url;
|
|
||||||
|
|
||||||
public LinkAttachment(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUrl(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.LINK.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompositeUrl split() {
|
|
||||||
return Parser.url(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
public class Picture {
|
|
||||||
|
|
||||||
private String fileId;
|
|
||||||
private String fileUniqueId;
|
|
||||||
private Integer fileSize;
|
|
||||||
private Integer weight;
|
|
||||||
private Integer height;
|
|
||||||
|
|
||||||
public String getFileId() {
|
|
||||||
return fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileId(String fileId) {
|
|
||||||
this.fileId = fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFileUniqueId() {
|
|
||||||
return fileUniqueId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileUniqueId(String fileUniqueId) {
|
|
||||||
this.fileUniqueId = fileUniqueId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getFileSize() {
|
|
||||||
return fileSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFileSize(Integer fileSize) {
|
|
||||||
this.fileSize = fileSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getWeight() {
|
|
||||||
return weight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWeight(Integer weight) {
|
|
||||||
this.weight = weight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(Integer height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.content.Attachment;
|
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class PictureGroupAttachment extends Attachment {
|
|
||||||
|
|
||||||
private List<Picture> pictures;
|
|
||||||
|
|
||||||
public void setPictureSizes(List<Picture> pictures) {
|
|
||||||
this.pictures = pictures;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Picture> getPictureSizes() {
|
|
||||||
return pictures;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<Picture> getLargePicture() {
|
|
||||||
return pictures.stream()
|
|
||||||
.max(Comparator.comparingInt(Picture::getFileSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TelegramAttachmentType.PICTURE.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.attachment;
|
|
||||||
|
|
||||||
public enum TelegramAttachmentType {
|
|
||||||
|
|
||||||
DOCUMENT,
|
|
||||||
CONTACT,
|
|
||||||
PICTURE,
|
|
||||||
LINK,
|
|
||||||
COMMAND,
|
|
||||||
BUTTON_CLICK
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.event;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.event.Event;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
public class Subscribe implements Event {
|
|
||||||
|
|
||||||
public static final String TYPE = "SUBSCRIBE";
|
|
||||||
|
|
||||||
private String telegramId;
|
|
||||||
private String firstName;
|
|
||||||
private String lastName;
|
|
||||||
private LocalDateTime subscriptionDate;
|
|
||||||
|
|
||||||
public String getTelegramId() {
|
|
||||||
return telegramId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTelegramId(String telegramId) {
|
|
||||||
this.telegramId = telegramId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFirstName() {
|
|
||||||
return firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstName(String firstName) {
|
|
||||||
this.firstName = firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLastName() {
|
|
||||||
return lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastName(String lastName) {
|
|
||||||
this.lastName = lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocalDateTime getSubscriptionDate() {
|
|
||||||
return subscriptionDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubscriptionDate(LocalDateTime subscriptionDate) {
|
|
||||||
this.subscriptionDate = subscriptionDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getEventType() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.event;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.event.Event;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
public class Unsubscribe implements Event {
|
|
||||||
|
|
||||||
public static final String TYPE = "UNSUBSCRIBE";
|
|
||||||
|
|
||||||
private String telegramId;
|
|
||||||
private String firstName;
|
|
||||||
private String lastName;
|
|
||||||
private LocalDateTime subscriptionDate;
|
|
||||||
|
|
||||||
public String getTelegramId() {
|
|
||||||
return telegramId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTelegramId(String telegramId) {
|
|
||||||
this.telegramId = telegramId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFirstName() {
|
|
||||||
return firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstName(String firstName) {
|
|
||||||
this.firstName = firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLastName() {
|
|
||||||
return lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastName(String lastName) {
|
|
||||||
this.lastName = lastName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocalDateTime getSubscriptionDate() {
|
|
||||||
return subscriptionDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubscriptionDate(LocalDateTime subscriptionDate) {
|
|
||||||
this.subscriptionDate = subscriptionDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getEventType() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.files;
|
|
||||||
|
|
||||||
public class ByteContainer {
|
|
||||||
|
|
||||||
public static final ByteContainer EMPTY = new ByteContainer(null, null, null);
|
|
||||||
|
|
||||||
private final String fileName;
|
|
||||||
private final String mimeType;
|
|
||||||
private final byte[] bytes;
|
|
||||||
|
|
||||||
public ByteContainer(String fileName, String mimeType, byte[] bytes) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
this.mimeType = mimeType;
|
|
||||||
this.bytes = bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ByteContainer empty() {
|
|
||||||
return EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFileName() {
|
|
||||||
return fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getBytes() {
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMimeType() {
|
|
||||||
return mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNotEmpty() {
|
|
||||||
return bytes != null && bytes.length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.files;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
|
|
||||||
public class FileContainer {
|
|
||||||
|
|
||||||
public static final FileContainer EMPTY = new FileContainer(null, null, null);
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(FileContainer.class);
|
|
||||||
|
|
||||||
private final String fileName;
|
|
||||||
private final File file;
|
|
||||||
private final String mimeType;
|
|
||||||
|
|
||||||
public FileContainer(String fileName, String mimeType, File file) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
this.file = file;
|
|
||||||
this.mimeType = mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FileContainer empty() {
|
|
||||||
return EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFileName() {
|
|
||||||
return fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public File getFile() {
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMimeType() {
|
|
||||||
return mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNotEmpty() {
|
|
||||||
return file != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void delete() {
|
|
||||||
try {
|
|
||||||
Files.deleteIfExists(file.toPath());
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.keyboard.button;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Запрашивает у пользователя его контактный номер.
|
|
||||||
*/
|
|
||||||
public class ContactButton implements KeyBoardButton {
|
|
||||||
|
|
||||||
public static final String TYPE = "CONTACT";
|
|
||||||
|
|
||||||
private final String label;
|
|
||||||
|
|
||||||
private ContactButton(String label) {
|
|
||||||
this.label = label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ContactButton contactButton(@NotNull String label) {
|
|
||||||
return new ContactButton(label);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLabel() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.domain.keyboard.button;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class UrlButton implements KeyBoardButton {
|
|
||||||
|
|
||||||
public static final String TYPE = "URL";
|
|
||||||
|
|
||||||
private final String label;
|
|
||||||
private final String url;
|
|
||||||
|
|
||||||
public UrlButton(String label, String url) {
|
|
||||||
this.label = label;
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UrlButton urlButton(@NotNull String label, @NotNull String url) {
|
|
||||||
return new UrlButton(label, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLabel() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-bot</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-sender</artifactId>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
<modules>
|
|
||||||
<module>telegram-sender-main</module>
|
|
||||||
<module>telegram-sender-simple</module>
|
|
||||||
<module>telegram-sender-quarkus</module>
|
|
||||||
</modules>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,29 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-sender-main</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.telegram</groupId>
|
|
||||||
<artifactId>telegrambots-meta</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-domain</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,152 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.main.sender.util;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoard;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton;
|
|
||||||
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.button.ContactButton;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.button.UrlButton;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.button.WebAppButton;
|
|
||||||
import dev.struchkov.haiti.context.exception.ConvertException;
|
|
||||||
import dev.struchkov.haiti.utils.Exceptions;
|
|
||||||
import dev.struchkov.haiti.utils.Inspector;
|
|
||||||
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.ReplyKeyboardMarkup;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardRemove;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.webapp.WebAppInfo;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public final class KeyBoardConvert {
|
|
||||||
|
|
||||||
private KeyBoardConvert() {
|
|
||||||
Exceptions.utilityClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReplyKeyboard convertKeyBoard(KeyBoard keyBoard) {
|
|
||||||
if (keyBoard != null) {
|
|
||||||
switch (keyBoard.getType()) {
|
|
||||||
case InlineKeyBoard.TYPE:
|
|
||||||
return convertInlineKeyBoard((InlineKeyBoard) keyBoard);
|
|
||||||
case MarkupKeyBoard.TYPE:
|
|
||||||
return convertMarkupKeyBoard((MarkupKeyBoard) keyBoard);
|
|
||||||
case SimpleKeyBoard.TYPE:
|
|
||||||
return convertSimpleKeyBoard((SimpleKeyBoard) keyBoard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReplyKeyboard convertSimpleKeyBoard(SimpleKeyBoard keyBoard) {
|
|
||||||
final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
|
|
||||||
keyboardMarkup.setKeyboard(
|
|
||||||
keyBoard.getLines().stream()
|
|
||||||
.map(KeyBoardConvert::convertMarkupLine)
|
|
||||||
.toList()
|
|
||||||
);
|
|
||||||
return keyboardMarkup;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReplyKeyboard convertMarkupKeyBoard(MarkupKeyBoard keyBoard) {
|
|
||||||
if (keyBoard != null) {
|
|
||||||
if (keyBoard.isNotEmpty()) {
|
|
||||||
final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
|
|
||||||
keyboardMarkup.setOneTimeKeyboard(keyBoard.isOneTime());
|
|
||||||
keyboardMarkup.setInputFieldPlaceholder(keyBoard.getInputFieldPlaceholder());
|
|
||||||
keyboardMarkup.setResizeKeyboard(keyBoard.isResizeKeyboard());
|
|
||||||
keyboardMarkup.setKeyboard(
|
|
||||||
keyBoard.getLines().stream()
|
|
||||||
.map(KeyBoardConvert::convertMarkupLine)
|
|
||||||
.toList()
|
|
||||||
);
|
|
||||||
return keyboardMarkup;
|
|
||||||
} else {
|
|
||||||
final ReplyKeyboardRemove replyKeyboardRemove = new ReplyKeyboardRemove();
|
|
||||||
replyKeyboardRemove.setRemoveKeyboard(true);
|
|
||||||
return replyKeyboardRemove;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InlineKeyboardMarkup convertInlineKeyBoard(InlineKeyBoard keyBoard) {
|
|
||||||
if (keyBoard != null) {
|
|
||||||
final InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup();
|
|
||||||
inlineKeyboardMarkup.setKeyboard(
|
|
||||||
keyBoard.getLines().stream()
|
|
||||||
.map(KeyBoardConvert::convertInlineLine)
|
|
||||||
.toList()
|
|
||||||
);
|
|
||||||
return inlineKeyboardMarkup;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<InlineKeyboardButton> convertInlineLine(KeyBoardLine line) {
|
|
||||||
return line.getButtons().stream().map(KeyBoardConvert::convertInlineButton).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static KeyboardRow convertMarkupLine(KeyBoardLine line) {
|
|
||||||
final List<KeyboardButton> buttons = line.getButtons().stream().map(KeyBoardConvert::convertMarkupButton).toList();
|
|
||||||
return new KeyboardRow(buttons);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static InlineKeyboardButton convertInlineButton(KeyBoardButton keyBoardButton) {
|
|
||||||
final InlineKeyboardButton button = new InlineKeyboardButton();
|
|
||||||
switch (keyBoardButton.getType()) {
|
|
||||||
case SimpleButton.TYPE -> {
|
|
||||||
final SimpleButton simpleButton = (SimpleButton) keyBoardButton;
|
|
||||||
final String callbackData = simpleButton.getCallbackData();
|
|
||||||
final String label = simpleButton.getLabel();
|
|
||||||
button.setText(label);
|
|
||||||
button.setCallbackData(callbackData != null ? callbackData : label);
|
|
||||||
}
|
|
||||||
case UrlButton.TYPE -> {
|
|
||||||
final UrlButton urlButton = (UrlButton) keyBoardButton;
|
|
||||||
button.setUrl(urlButton.getUrl());
|
|
||||||
button.setText(urlButton.getLabel());
|
|
||||||
}
|
|
||||||
case WebAppButton.TYPE -> {
|
|
||||||
final WebAppButton webAppButton = (WebAppButton) keyBoardButton;
|
|
||||||
final WebAppInfo webAppInfo = WebAppInfo.builder().url(webAppButton.getUrl()).build();
|
|
||||||
button.setWebApp(webAppInfo);
|
|
||||||
button.setText(webAppButton.getLabel());
|
|
||||||
}
|
|
||||||
default -> throw new ConvertException("Ошибка преобразования кнопки");
|
|
||||||
}
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static KeyboardButton convertMarkupButton(KeyBoardButton keyBoardButton) {
|
|
||||||
final KeyboardButton button = new KeyboardButton();
|
|
||||||
switch (keyBoardButton.getType()) {
|
|
||||||
case SimpleButton.TYPE -> {
|
|
||||||
final SimpleButton simpleButton = (SimpleButton) keyBoardButton;
|
|
||||||
button.setText(simpleButton.getLabel());
|
|
||||||
Inspector.isNull(simpleButton.getCallbackData(), ConvertException.convertException("CallbackData поддерживает только Inline клавитаура"));
|
|
||||||
}
|
|
||||||
case WebAppButton.TYPE -> {
|
|
||||||
final WebAppButton webAppButton = (WebAppButton) keyBoardButton;
|
|
||||||
final WebAppInfo webAppInfo = WebAppInfo.builder().url(webAppButton.getUrl()).build();
|
|
||||||
button.setText(webAppButton.getLabel());
|
|
||||||
button.setWebApp(webAppInfo);
|
|
||||||
}
|
|
||||||
case ContactButton.TYPE -> {
|
|
||||||
final ContactButton contactButton = (ContactButton) keyBoardButton;
|
|
||||||
|
|
||||||
button.setText(contactButton.getLabel());
|
|
||||||
button.setRequestContact(true);
|
|
||||||
}
|
|
||||||
default -> throw new ConvertException("Ошибка преобразования кнопки");
|
|
||||||
}
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-sender-quarkus</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-quarkus</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,170 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.quarkus.sender;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
|
||||||
import dev.struchkov.godfather.main.domain.SendType;
|
|
||||||
import dev.struchkov.godfather.main.domain.SentBox;
|
|
||||||
import dev.struchkov.godfather.quarkus.context.service.PreSendProcessing;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.repository.SenderRepository;
|
|
||||||
import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramSending;
|
|
||||||
import io.smallrye.mutiny.Uni;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.DeleteMessage;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
|
|
||||||
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 static dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert.convertInlineKeyBoard;
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
|
|
||||||
public class TelegramSender implements TelegramSending {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(TelegramSender.class);
|
|
||||||
|
|
||||||
private static final String ERROR_REPLACE_MESSAGE = "Bad Request: message to edit not found";
|
|
||||||
|
|
||||||
private final AbsSender absSender;
|
|
||||||
|
|
||||||
//TODO [09.12.2022|uPagge]: Доработать использование preSendProcessors
|
|
||||||
private List<PreSendProcessing> preSendProcessors;
|
|
||||||
private SenderRepository senderRepository;
|
|
||||||
|
|
||||||
public TelegramSender(TelegramConnect telegramConnect) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TelegramSender(TelegramConnect telegramConnect, SenderRepository senderRepository) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
this.senderRepository = senderRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSenderRepository(SenderRepository senderRepository) {
|
|
||||||
this.senderRepository = senderRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<SentBox<Integer>> send(@NotNull BoxAnswer boxAnswer) {
|
|
||||||
return sendBoxAnswer(boxAnswer, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPreSendProcess(@NotNull PreSendProcessing processing) {
|
|
||||||
preSendProcessors.add(processing);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<Void> deleteMessage(@NotNull String personId, @NotNull Integer messageId) {
|
|
||||||
final DeleteMessage deleteMessage = new DeleteMessage();
|
|
||||||
deleteMessage.setChatId(personId);
|
|
||||||
deleteMessage.setMessageId(messageId);
|
|
||||||
try {
|
|
||||||
absSender.execute(deleteMessage);
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return Uni.createFrom().voidItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<SentBox<Integer>> replaceMessage(@NotNull String personId, @NotNull Integer messageId, @NotNull BoxAnswer newAnswer) {
|
|
||||||
return replace(personId, messageId, newAnswer, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Uni<SentBox<Integer>> sendNotSave(@NotNull BoxAnswer boxAnswer) {
|
|
||||||
return sendBoxAnswer(boxAnswer, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uni<SentBox<Integer>> sendBoxAnswer(@NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
|
|
||||||
return Uni.createFrom().voidItem()
|
|
||||||
.onItem().transformToUni(
|
|
||||||
v -> {
|
|
||||||
final String recipientTelegramId = boxAnswer.getRecipientPersonId();
|
|
||||||
if (boxAnswer.isReplace() && checkNotNull(senderRepository)) {
|
|
||||||
return senderRepository.getLastSendMessage(recipientTelegramId)
|
|
||||||
.onItem().transformToUni(
|
|
||||||
lastId -> {
|
|
||||||
if (checkNotNull(lastId)) {
|
|
||||||
return replace(recipientTelegramId, lastId, boxAnswer, saveMessageId);
|
|
||||||
} else {
|
|
||||||
return sendMessage(recipientTelegramId, boxAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return sendMessage(recipientTelegramId, boxAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uni<SentBox<Integer>> replace(@NotNull String telegramId, @NotNull Integer lastMessageId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
|
|
||||||
return Uni.createFrom().voidItem()
|
|
||||||
.onItem().transformToUni(
|
|
||||||
v -> {
|
|
||||||
final EditMessageText editMessageText = new EditMessageText();
|
|
||||||
editMessageText.setChatId(telegramId);
|
|
||||||
editMessageText.setMessageId(lastMessageId);
|
|
||||||
editMessageText.enableMarkdown(true);
|
|
||||||
editMessageText.setText(boxAnswer.getMessage());
|
|
||||||
editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard()));
|
|
||||||
try {
|
|
||||||
absSender.execute(editMessageText);
|
|
||||||
return Uni.createFrom().optional(SentBox.optional(lastMessageId, boxAnswer, boxAnswer));
|
|
||||||
} catch (TelegramApiRequestException e) {
|
|
||||||
log.error(e.getApiResponse());
|
|
||||||
if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) {
|
|
||||||
return sendMessage(telegramId, boxAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return Uni.createFrom().nullItem();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uni<SentBox<Integer>> sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
|
|
||||||
return Uni.createFrom().voidItem()
|
|
||||||
.onItem().transform(
|
|
||||||
v -> {
|
|
||||||
final SendMessage sendMessage = new SendMessage();
|
|
||||||
sendMessage.enableMarkdown(true);
|
|
||||||
sendMessage.setChatId(telegramId);
|
|
||||||
sendMessage.setText(boxAnswer.getMessage());
|
|
||||||
sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard()));
|
|
||||||
|
|
||||||
try {
|
|
||||||
return absSender.execute(sendMessage);
|
|
||||||
} catch (TelegramApiRequestException e) {
|
|
||||||
log.error(e.getApiResponse());
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
).onItem().ifNotNull().call(answerMessage -> {
|
|
||||||
if (checkNotNull(senderRepository) && saveMessageId) {
|
|
||||||
return senderRepository.saveLastSendMessage(telegramId, answerMessage.getMessageId());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
})
|
|
||||||
.onItem().ifNotNull().transformToUni(
|
|
||||||
answerMessage -> Uni.createFrom().optional(SentBox.optional(answerMessage.getMessageId(), boxAnswer, boxAnswer))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SendType getType() {
|
|
||||||
return SendType.PRIVATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-sender-simple</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-main</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-context-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,154 +0,0 @@
|
|||||||
package dev.struchkov.godfather.telegram.simple.sender;
|
|
||||||
|
|
||||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
|
||||||
import dev.struchkov.godfather.main.domain.SendType;
|
|
||||||
import dev.struchkov.godfather.main.domain.SentBox;
|
|
||||||
import dev.struchkov.godfather.simple.context.service.PreSendProcessing;
|
|
||||||
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
|
|
||||||
import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
|
|
||||||
import dev.struchkov.godfather.telegram.main.sender.util.KeyBoardConvert;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.repository.SenderRepository;
|
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.DeleteMessage;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
|
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
|
||||||
import org.telegram.telegrambots.meta.bots.AbsSender;
|
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
|
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
|
||||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
|
||||||
|
|
||||||
public class TelegramSender implements TelegramSending {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(TelegramSender.class);
|
|
||||||
|
|
||||||
private static final String ERROR_REPLACE_MESSAGE = "Bad Request: message to edit not found";
|
|
||||||
|
|
||||||
private final AbsSender absSender;
|
|
||||||
|
|
||||||
private final List<PreSendProcessing> preSendProcessors = new ArrayList<>();
|
|
||||||
private SenderRepository senderRepository;
|
|
||||||
|
|
||||||
public TelegramSender(TelegramConnect telegramConnect) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TelegramSender(TelegramConnect telegramConnect, SenderRepository senderRepository) {
|
|
||||||
this.absSender = telegramConnect.getAbsSender();
|
|
||||||
this.senderRepository = senderRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSenderRepository(SenderRepository senderRepository) {
|
|
||||||
this.senderRepository = senderRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPreSendProcess(@NotNull PreSendProcessing processing) {
|
|
||||||
preSendProcessors.add(processing);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteMessage(@NotNull String personId, @NotNull Integer messageId) {
|
|
||||||
final DeleteMessage deleteMessage = new DeleteMessage();
|
|
||||||
deleteMessage.setChatId(personId);
|
|
||||||
deleteMessage.setMessageId(messageId);
|
|
||||||
try {
|
|
||||||
absSender.execute(deleteMessage);
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<SentBox<Integer>> replaceMessage(@NotNull String personId, @NotNull Integer messageId, @NotNull BoxAnswer newAnswer) {
|
|
||||||
return replace(personId, messageId, newAnswer, newAnswer, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<SentBox<Integer>> send(@NotNull BoxAnswer boxAnswer) {
|
|
||||||
isNotNull(boxAnswer.getRecipientPersonId());
|
|
||||||
return sendBoxAnswer(boxAnswer, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<SentBox<Integer>> sendNotSave(@NotNull BoxAnswer boxAnswer) {
|
|
||||||
return sendBoxAnswer(boxAnswer, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<SentBox<Integer>> sendBoxAnswer(BoxAnswer boxAnswer, boolean saveMessageId) {
|
|
||||||
final String recipientTelegramId = boxAnswer.getRecipientPersonId();
|
|
||||||
isNotNull(recipientTelegramId);
|
|
||||||
|
|
||||||
BoxAnswer preparedAnswer = boxAnswer;
|
|
||||||
for (PreSendProcessing preSendProcessor : preSendProcessors) {
|
|
||||||
preparedAnswer = preSendProcessor.pretreatment(boxAnswer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preparedAnswer.isReplace() && checkNotNull(senderRepository)) {
|
|
||||||
final Optional<Integer> optLastId = senderRepository.getLastSendMessage(recipientTelegramId);
|
|
||||||
if (optLastId.isPresent()) {
|
|
||||||
return replace(recipientTelegramId, optLastId.get(), boxAnswer, preparedAnswer, saveMessageId);
|
|
||||||
} else {
|
|
||||||
return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<SentBox<Integer>> replace(@NotNull String telegramId, @NotNull Integer lastMessageId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) {
|
|
||||||
final EditMessageText editMessageText = new EditMessageText();
|
|
||||||
editMessageText.setChatId(telegramId);
|
|
||||||
editMessageText.setMessageId(lastMessageId);
|
|
||||||
editMessageText.enableMarkdown(true);
|
|
||||||
editMessageText.setText(boxAnswer.getMessage());
|
|
||||||
editMessageText.setReplyMarkup(KeyBoardConvert.convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard()));
|
|
||||||
try {
|
|
||||||
absSender.execute(editMessageText);
|
|
||||||
return SentBox.optional(lastMessageId, preparedAnswer, boxAnswer);
|
|
||||||
} catch (TelegramApiRequestException e) {
|
|
||||||
log.error(e.getApiResponse());
|
|
||||||
if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) {
|
|
||||||
return sendMessage(telegramId, preparedAnswer, preparedAnswer, saveMessageId);
|
|
||||||
}
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<SentBox<Integer>> sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) {
|
|
||||||
final SendMessage sendMessage = new SendMessage();
|
|
||||||
sendMessage.enableMarkdown(true);
|
|
||||||
sendMessage.setChatId(telegramId);
|
|
||||||
sendMessage.setText(boxAnswer.getMessage());
|
|
||||||
sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard()));
|
|
||||||
try {
|
|
||||||
final Message execute = absSender.execute(sendMessage);
|
|
||||||
if (checkNotNull(senderRepository) && saveMessageId) {
|
|
||||||
senderRepository.saveLastSendMessage(telegramId, execute.getMessageId());
|
|
||||||
}
|
|
||||||
return SentBox.optional(execute.getMessageId(), preparedAnswer, boxAnswer);
|
|
||||||
} catch (TelegramApiRequestException e) {
|
|
||||||
log.error(e.getApiResponse());
|
|
||||||
} catch (TelegramApiException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SendType getType() {
|
|
||||||
return SendType.PRIVATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<?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>
|
|
||||||
<parent>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-bot</artifactId>
|
|
||||||
<version>0.0.48-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>telegram-simple</artifactId>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-core-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-consumer-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.struchkov.godfather.telegram</groupId>
|
|
||||||
<artifactId>telegram-sender-simple</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
Loading…
Reference in New Issue
Block a user