Compare commits

...

5 Commits

Author SHA1 Message Date
hdvt
a9742134b2 backup 2025-11-13 23:51:01 +03:00
hdvt
a8b772a5ea Merge remote-tracking branch 'origin/master' 2025-11-04 01:58:18 +03:00
hdvt
ca295b66f9 readme 2025-11-04 01:57:41 +03:00
hdvt
9fdfd91e1d Update README.md 2025-11-04 01:52:55 +03:00
hdvt
7607ec4205 Update README.md 2025-11-04 01:52:38 +03:00
9 changed files with 152 additions and 27 deletions

4
.gitignore vendored
View File

@@ -41,3 +41,7 @@ bin/
### Mac OS ###
.DS_Store
/core/src/main/java/hdvtdev/telegram/Count.java
/src/
/test/
/.idea/
/gradle/

4
.idea/gradle.xml generated
View File

@@ -8,8 +8,12 @@
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/annotation-processor" />
<option value="$PROJECT_DIR$/core" />
<option value="$PROJECT_DIR$/event-handlers" />
<option value="$PROJECT_DIR$/event-handlers-annotations" />
<option value="$PROJECT_DIR$/longpolling-okhttp" />
<option value="$PROJECT_DIR$/test" />
</set>
</option>
</GradleProjectSettings>

1
.idea/misc.xml generated
View File

@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">

141
README.md
View File

@@ -1,10 +1,143 @@
### English Version
# TeleJ
An elegant Java library for creating Telegram bots, featuring a framework module to reduce boilerplate and speed up development.
## ⚠️ Project Status ⚠️
**This project is currently under active development.** APIs may change, and features are still being added. It is not yet recommended for production use.
## About The Project
TeleJ is a library designed to simplify and accelerate the process of creating Telegram bots in Java. It provides a convenient API and a modular structure that helps you focus on your bot's logic rather than on repetitive code.
## Key Features
* **Simple Setup:** Get started with your bot quickly.
* **Modular Architecture:** Includes a `core` module, an `event-handlers` framework module, and other components that can be included as needed.
* **Modern Approach:** Utilizes modern Java features to create clean and readable code.
* **Extensible:** Easily extendable to add custom functionality.
### Usage Example
Below is a simple example of how to create and run a bot using TeleJ.
```java
public class MyAwesomeBot {
private static final TelegramBot telegramBot = new OkHttpTelegramBot("token");
public static void main(String[] args) {
telegramBot.start(new UpdateConsumer() {
@Override
public void onUpdate(Update update) {
if (update.hasMessage()) {
Message message = update.message();
if (message.hasText()) {
if (message.text().equalsIgnoreCase("ping!")) {
telegramBot.execute(new SendMessage.Builder(
message.chatId(), "pong!").replyToMessage(message.messageId())
.build());
}
}
}
}
});
}
}
```
## Project Structure
The project consists of several modules:
* `core`: The core of the library with all the basic functions for interacting with the Telegram Bot API.
* `event-handlers`: A framework module designed to reduce boilerplate and speed up development by simplifying the handling of events and updates from Telegram.
* `annotation-processor`: An annotation processor to simplify code writing.
* `longpolling-okhttp`: An implementation for receiving updates via Long Polling using OkHttp.
## License
This project is distributed under the MIT License.
***
### Русская версия
# TeleJ
Изящная библиотека на Java для создания ботов в Telegram, с модулем фреймворка для ускорения разработки и уменьшения количества шаблонного кода.
## ⚠️ Статус проекта ⚠️
**Этот проект находится в стадии активной разработки.** API может изменяться, а новые функции все еще добавляются. Пока не рекомендуется использовать его в продакшене.
## О проекте
TeleJ — это библиотека, разработанная для упрощения и ускорения процесса создания ботов для Telegram на языке Java. Она предоставляет удобный API и модульную структуру, которая помогает сосредоточиться на логике вашего бота, а не на повторяющемся коде.
## Основные возможности
* **Простая настройка:** Быстрое начало работы с вашим ботом.
* **Модульная архитектура:** Включает основной модуль (`core`), модуль фреймворка (`event-handlers`) и другие компоненты, которые можно подключать по мере необходимости.
* **Современный подход:** Использует современные возможности Java для создания чистого и читаемого кода.
* **Расширяемость:** Легко расширяется для добавления пользовательского функционала.
### Пример использования
Total lines of code:
Ниже приведен простой пример того, как создать и запустить бота с использованием TeleJ.
```java
public class MyAwesomeBot {
private static final TelegramBot telegramBot = new OkHttpTelegramBot("token");
public static void main(String[] args) {
telegramBot.start(new UpdateConsumer() {
@Override
public void onUpdate(Update update) {
if (update.hasMessage()) {
Message message = update.message();
if (message.hasText()) {
if (message.text().equalsIgnoreCase("ping!")) {
telegramBot.execute(new SendMessage.Builder(
message.chatId(), "pong!").replyToMessage(message.messageId())
.build());
}
}
}
}
});
<p>
<span style="background-color: blue; color: white; padding: 2px 4px;">08 April 2025 22:07:16 code: 6094 docs: 173</span>
<p>
}
}
```
## Структура проекта
Проект состоит из нескольких модулей:
* `core`: Ядро библиотеки со всеми основными функциями для взаимодействия с Telegram Bot API.
* `event-handlers`: Модуль фреймворка, предназначенный для уменьшения бойлерплейта (шаблонного кода) и ускорения разработки за счет упрощения обработки событий и обновлений от Telegram.
* `annotation-processor`: Обработчик аннотаций для упрощения написания кода.
* `longpolling-okhttp`: Реализация получения обновлений через Long Polling с использованием OkHttp.
## Лицензия
Этот проект распространяется под лицензией MIT License.

View File

@@ -4,11 +4,15 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class HandlerWriter {
public static void write(String body) throws IOException {
Consumer<String> consumer = (String s) -> {};
String classFilePath = "models/Handlers.class"; // Путь к вашему файлу
Path path = Paths.get(classFilePath);

View File

@@ -1,7 +0,0 @@
package hdvtdev.telegram.core;
import java.lang.reflect.Method;
public record InvokeMethod(Method method, Class<?> parameterType) {
}

View File

@@ -1,10 +0,0 @@
package hdvtdev.telegram.core;
import hdvtdev.telegram.core.objects.Update;
@FunctionalInterface
public interface UpdateExecutor {
void execute(Update update);
}

View File

@@ -12,11 +12,9 @@ repositories {
dependencies {
implementation platform('com.fasterxml.jackson:jackson-bom:2.18.3')
implementation 'com.fasterxml.jackson.core:jackson-core'
implementation 'com.fasterxml.jackson.core:jackson-databind'
//implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.squareup.okhttp3:okhttp:5.2.1'
implementation(project(":core"))
}

View File

@@ -7,7 +7,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import hdvtdev.telegram.core.HandlersModule;
import hdvtdev.telegram.core.TelegramBot;
import hdvtdev.telegram.core.UpdateConsumer;
import hdvtdev.telegram.core.UpdateExecutor;
import hdvtdev.telegram.core.exceptions.TelegramApiException;
import hdvtdev.telegram.core.exceptions.TelegramApiNetworkException;
import hdvtdev.telegram.core.exceptions.TelegramMethodParsingException;
@@ -28,6 +27,7 @@ import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
public class OkHttpTelegramBot implements TelegramBot {
@@ -38,7 +38,7 @@ public class OkHttpTelegramBot implements TelegramBot {
private ScheduledExecutorService scheduler;
private final UpdateExecutor updateExecutor;
private final Consumer<Update> updateExecutor;
private final AtomicLong lastUpdateId = new AtomicLong(0);
private int updateLimit = 10;
private int updateTimeout = 25;
@@ -153,7 +153,7 @@ public class OkHttpTelegramBot implements TelegramBot {
List<Update> updates = List.of(awaitExecute(new GetUpdates(lastUpdateId.get() + 1, updateLimit, updateTimeout)));
if (!updates.isEmpty()) {
for (Update update : updates) {
updateExecutor.execute(update);
updateExecutor.accept(update);
}
lastUpdateId.set(updates.getLast().updateId());
}