Compare commits

...

20 Commits

Author SHA1 Message Date
97122552e8
Добавил возможность прикреплять и откреплять сообщения
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-25 11:27:20 +03:00
13f4d8c368
Добавил аналитику
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-22 19:00:38 +03:00
a399ffc2b1
Добавил аналитику
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-22 17:18:34 +03:00
cb2988a437
Добавил комментарии
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-20 00:24:21 +03:00
3fe0e701d3
Добавил комментарии
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-20 00:22:10 +03:00
e0553f529c
Добавил комментарии в статью
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-20 00:05:17 +03:00
4256e7fb61
Добавил комментарии
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 23:50:41 +03:00
9bdc639203
Добавил site_url
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 23:04:14 +03:00
933d4811b7
Начал оформление документации
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 22:25:16 +03:00
d54091054d
Добавил favicon.ico
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 20:06:46 +03:00
db00b6b135
Поправил документацию
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:56:22 +03:00
7b9785e1c1
Изменил лого
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:35:53 +03:00
4a2e46606c
Изменил лого
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:32:09 +03:00
d9aa081985
Изменил лого
Some checks failed
continuous-integration/drone/push Build is failing
2023-02-19 19:22:19 +03:00
8136ed243c
Изменил лого
Some checks failed
continuous-integration/drone/push Build is failing
2023-02-19 19:16:15 +03:00
8cbb53e39b
Тест обновления названия страницы
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:15:06 +03:00
51df6a1b87
Тест обновления названия страницы
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:13:49 +03:00
5ac841011f
Тест обновления названия страницы
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 19:11:38 +03:00
bccafc3faf
Передача сгенерированного сайта на сервер
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-19 18:41:54 +03:00
17c8cf1848
Передача сгенерированного сайта на сервер 2023-02-19 18:41:05 +03:00
19 changed files with 348 additions and 66 deletions

View File

@ -104,7 +104,8 @@ name: create-docs-site
trigger:
branch:
- develop
- docs
- master
steps:
- name: build site
@ -128,12 +129,13 @@ steps:
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -p $SSH_DEPLOY_PORT $SSH_DEPLOY_HOST >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- cd documentation
- mkdocs build
- mv site godfather-telegram-bot
- mv site godfather-telegram
- scp -r -P $SSH_DEPLOY_PORT ./godfather-telegram $SSH_DEPLOY_USER@$SSH_DEPLOY_HOST:$SSH_DEPLOY_PATH
---
kind: signature
hmac: 8b702ec5869930b1fa64819a41e1ab8feeb2b4e75ddcf87299377ede4a22b0e6
hmac: f572c63a70de0e0b94dda125006e3fc0e2b29ccd318034c7e4193c0c2bee70b2
...

2
.gitignore vendored
View File

@ -77,4 +77,4 @@ com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
/site/
/documentation/site/

View File

@ -1,7 +0,0 @@
---
hide:
- navigation
title: Home
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,122 @@
---
hide:
- toc
---
# Варианты добавления в проект
Есть несколько вариантов добавить фреймворк в проект. Изучите их все и выберете подходящий под ваши задачи.
## Spring Boot Starter
Самый простой способ, если у вас небольшой монолитный Spring Boot проект.
=== ":simple-apachemaven: Maven"
```xml
<dependency>
<groupId>dev.struchkov.godfather.telegram</groupId>
<artifactId>telegram-bot-spring-boot-starter</artifactId>
<version>0.0.50-SNAPSHOT</version>
</dependency>
```
=== ":simple-gradle: Gradle"
``` c++
#include <iostream>
int main(void) {
std::cout << "Hello world!" << std::endl;
return 0;
}
```
## Quarkus Extension
На данный момент раздел находится в разработке.
=== ":simple-apachemaven: Maven"
```
```
=== ":simple-gradle: Gradle"
```
```
### Reactive
На данный момент раздел находится в разработке.
## Основные зависимости проекта
Вы можете добавить основные зависимости в свой проект и сконфигурировать его более тонко под ваши нужды. Однако для этого потребуется хорошее знание архитектуры проекта.
Этот вариант подойдет вам, если у вас используется микросервисная архитектура. Так как логично разделить стадии получения, обработки и отправки сообщений на разные сервисы.
Также этот вариант подойдет вам, если вы используете менее популярный фреймворк, так как основные зависимости написаны без привязки к какому-то конкретному фреймворку.
Всего основных зависимостей три:
=== ":simple-spring: Spring"
Эти зависимости подойдут вам, если вы используете SpringBoot 3.0.0+
=== ":simple-apachemaven: Maven"
``` xml title="Позволяет получать сообщения"
```
``` xml title="Содержит всю логику работы"
```
``` xml title="Позволяет отправлять сообщения"
```
=== ":simple-gradle: Gradle"
``` xml title="Позволяет получать сообщения"
```
``` xml title="Содержит всю логику работы"
```
``` xml title="Позволяет отправлять сообщения"
```
=== ":simple-quarkus: Quarkus"
Эти зависимости подойдут вам, если вы используете Quarkus 2.16.0+
=== ":simple-apachemaven: Maven"
``` xml title="Позволяет получать сообщения"
```
``` xml title="Содержит всю логику работы"
```
``` xml title="Позволяет отправлять сообщения"
```
=== ":simple-gradle: Gradle"
``` xml title="Позволяет получать сообщения"
```
``` xml title="Содержит всю логику работы"
```
``` xml title="Позволяет отправлять сообщения"
```

View File

@ -0,0 +1,9 @@
---
hide:
- navigation
- comments
title: Home
---
# Godfather Telegram Фреймворк для создания Telegram ботов

95
documentation/mkdocs.yml Normal file
View File

@ -0,0 +1,95 @@
site_name: GodFather Telegram
site_url: https://docs.struchkov.dev/godfather-telegram/
repo_url: https://github.com/Godfather-Bots/telegram-bot
repo_name: Godfather-Bots/telegram-bot
copyright: Copyright &copy; 2018 - 2023 Struchkov Mark
#edit_uri: edit/master/documentation/docs
nav:
- 'index.md'
- 'Быстрый старт':
- 'getting-started/installing-dependencies.md'
- 'getting-started/configuration.md'
# - 'Гайды':
- 'Архитектура':
- 'architecture/concept.md'
# - 'ChangeLog':
theme:
name: material
custom_dir: overrides
language: ru
favicon: assets/favicon.ico
icon:
logo: simple/telegram
repo: fontawesome/brands/github
palette:
- scheme: default
primary: light blue
accent: indigo
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: slate
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- navigation.instant
- navigation.indexes
- navigation.sections
- navigation.tracking
- navigation.tabs
- navigation.tabs.sticky
- navigation.footer
- search
- search.suggest
- search.highlight
- content.action.edit
- content.code.copy
- toc.follow
plugins:
- social
- meta
- tags
- search:
lang: ru
- git-revision-date-localized:
enable_creation_date: true
markdown_extensions:
- toc:
permalink: true
toc_depth: 3
title: Содержание
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.snippets
- pymdownx.inlinehilite
- pymdownx.details
- pymdownx.smartsymbols
- pymdownx.betterem
- pymdownx.tabbed:
alternate_style: true
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
extra:
generator: false
analytics:
provider: custom
property: foobar
version:
provider: mike
# alternate:
# - name: Русский
# link: /ru/
# lang: ru

View File

@ -0,0 +1,17 @@
{% if "comments" in page.meta.hide %}
{% else %}
<h2 id="__comments" >{{ lang.t("meta.comments") }}</h2>
<div id="remark42"></div>
<script>
var remark_config = {
host: "https://comments.struchkov.dev",
site_id: 'docs',
components: ['embed'],
locale: 'ru',
theme: localStorage.theme,
show_email_subscription: true,
simple_view: false
};
</script>
<script>!function(e,n){for(var o=0;o<e.length;o++){var r=n.createElement("script"),c=".js",d=n.head||n.body;"noModule"in r?(r.type="module",c=".mjs"):r.async=!0,r.defer=!0,r.src=remark_config.host+"/web/"+e[o]+c,d.appendChild(r)}}(remark_config.components||["embed"],document);</script>
{% endif %}

View File

@ -0,0 +1,16 @@
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(92567341, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/92567215" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

View File

@ -1,55 +0,0 @@
site_name: GodFather Telegram
repo_url: https://github.com/Godfather-Bots/telegram-bot
repo_name: Godfather-Bots/telegram-bot
#edit_uri: blob/develop/docs/
theme:
name: material
language: ru
icon:
repo: fontawesome/brands/github
palette:
# Palette toggle for light mode
- scheme: default
primary: light blue
accent: indigo
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Palette toggle for dark mode
- scheme: slate
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- navigation.sections
- navigation.tabs
- navigation.tabs.sticky
- content.action.edit
- search
- search.suggest
- search.highlight
- toc.follow
plugins:
- meta
- tags
- blog:
blog_dir: ./blog
- search:
lang: ru
- git-revision-date-localized:
enable_creation_date: true
markdown_extensions:
- toc:
permalink: true
toc_depth: 3
title: Содержание
#extra:
# alternate:
# - name: Русский
# link: /ru/
# lang: ru

View File

@ -8,4 +8,8 @@ public interface TelegramService {
Uni<Void> executeAction(@NotNull String personId, ChatAction chatAction);
Uni<Void> pinMessage(@NotNull String personId, @NotNull String messageId);
Uni<Void> unPinMessage(@NotNull String personId, @NotNull String messageId);
}

View File

@ -7,4 +7,8 @@ public interface TelegramService {
void executeAction(@NotNull String personId, ChatAction chatAction);
void pinMessage(@NotNull String personId, @NotNull String messageId);
void unPinMessage(@NotNull String personId, @NotNull String messageId);
}

View File

@ -8,12 +8,15 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.telegram.telegrambots.meta.api.methods.ActionType;
import org.telegram.telegrambots.meta.api.methods.pinnedmessages.PinChatMessage;
import org.telegram.telegrambots.meta.api.methods.pinnedmessages.UnpinChatMessage;
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
import org.telegram.telegrambots.meta.bots.AbsSender;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
public class TelegramServiceImpl implements TelegramService {
@ -35,6 +38,48 @@ public class TelegramServiceImpl implements TelegramService {
.replaceWithVoid();
}
@Override
public Uni<Void> pinMessage(@NotNull String personId, @NotNull String messageId) {
final PinChatMessage pinChatMessage = new PinChatMessage();
pinChatMessage.setChatId(personId);
pinChatMessage.setMessageId(Integer.parseInt(messageId));
return Uni.createFrom().completionStage(getExecuteAsync(pinChatMessage))
.replaceWithVoid();
}
@Override
public Uni<Void> unPinMessage(@NotNull String personId, @NotNull String messageId) {
final UnpinChatMessage unpinChatMessage = new UnpinChatMessage();
unpinChatMessage.setChatId(personId);
unpinChatMessage.setMessageId(Integer.parseInt(messageId));
return Uni.createFrom().completionStage(getExecuteAsync(unpinChatMessage))
.replaceWithVoid();
}
private CompletableFuture<Boolean> getExecuteAsync(UnpinChatMessage unpinChatMessage) {
try {
return absSender.executeAsync(unpinChatMessage);
} catch (TelegramApiRequestException e) {
log.error(e.getApiResponse());
} catch (TelegramApiException e) {
log.error(e.getMessage());
}
return CompletableFuture.completedFuture(null);
}
private CompletionStage<Boolean> getExecuteAsync(PinChatMessage pinChatMessage) {
try {
return absSender.executeAsync(pinChatMessage);
} catch (TelegramApiRequestException e) {
log.error(e.getApiResponse());
} catch (TelegramApiException e) {
log.error(e.getMessage());
}
return CompletableFuture.completedFuture(null);
}
private CompletableFuture<Boolean> getExecuteAsync(SendChatAction sendChatAction) {
try {
return absSender.executeAsync(sendChatAction);

View File

@ -7,6 +7,8 @@ import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.telegram.telegrambots.meta.api.methods.ActionType;
import org.telegram.telegrambots.meta.api.methods.pinnedmessages.PinChatMessage;
import org.telegram.telegrambots.meta.api.methods.pinnedmessages.UnpinChatMessage;
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
import org.telegram.telegrambots.meta.bots.AbsSender;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
@ -36,4 +38,32 @@ public class TelegramServiceImpl implements TelegramService {
}
}
@Override
public void pinMessage(@NotNull String personId, @NotNull String messageId) {
final PinChatMessage pinChatMessage = new PinChatMessage();
pinChatMessage.setChatId(personId);
pinChatMessage.setMessageId(Integer.parseInt(messageId));
try {
absSender.execute(pinChatMessage);
} catch (TelegramApiRequestException e) {
log.error(e.getApiResponse());
} catch (TelegramApiException e) {
log.error(e.getMessage());
}
}
@Override
public void unPinMessage(@NotNull String personId, @NotNull String messageId) {
final UnpinChatMessage unpinChatMessage = new UnpinChatMessage();
unpinChatMessage.setChatId(personId);
unpinChatMessage.setMessageId(Integer.parseInt(messageId));
try {
absSender.execute(unpinChatMessage);
} catch (TelegramApiRequestException e) {
log.error(e.getApiResponse());
} catch (TelegramApiException e) {
log.error(e.getMessage());
}
}
}