From f915f791372520481637ee6cc442682e31f23698 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Wed, 4 Sep 2024 19:33:55 +0300 Subject: [PATCH] Resolve bot username automatically --- README.md | 2 -- ffmpegbot.yaml.template | 3 +-- src/main/java/com/annimon/ffmpegbot/BotConfig.java | 4 +++- src/main/java/com/annimon/ffmpegbot/Main.java | 14 ++++++++++++-- .../java/com/annimon/ffmpegbot/MainBotHandler.java | 6 +++--- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e0f6002..6cada2b 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ Note: FFmpeg binary might be installed with limited number of filters and codecs docker build --tag 'ffmpegbot' . docker run -d -t -i \ -e BOT_TOKEN='...' \ - -e BOT_USERNAME='...' \ -e APP_ID='...' \ -e APP_HASH='...' \ -e SUPERUSERS='12345' \ @@ -53,7 +52,6 @@ docker run -d -t -i \ #### Environment variables - `BOT_TOKEN` — Telegram bot token - - `BOT_USERNAME` — Telegram bot username - `APP_ID` — Telegram API app_id (see https://core.telegram.org/api/obtaining_api_id) - `APP_HASH` — Telegram API app_hash - `SUPERUSERS` — Comma-separated list of superusers. Superuser can execute /run command diff --git a/ffmpegbot.yaml.template b/ffmpegbot.yaml.template index 1de99e0..afe448c 100644 --- a/ffmpegbot.yaml.template +++ b/ffmpegbot.yaml.template @@ -1,6 +1,5 @@ -# Telegram bot token and bot username +# Telegram bot token botToken: 1234567890:AAAABBBBCCCCDDDDEEEEFF-GGGGHHHHIIII -botUsername: yourbotname # Telegram API app_id / app_hash (see https://core.telegram.org/api/obtaining_api_id) appId: 12345 appHash: abc123def456 diff --git a/src/main/java/com/annimon/ffmpegbot/BotConfig.java b/src/main/java/com/annimon/ffmpegbot/BotConfig.java index 97b3303..5f65401 100644 --- a/src/main/java/com/annimon/ffmpegbot/BotConfig.java +++ b/src/main/java/com/annimon/ffmpegbot/BotConfig.java @@ -1,12 +1,14 @@ package com.annimon.ffmpegbot; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.Arrays; import java.util.Collections; import java.util.Set; import java.util.stream.Collectors; +@JsonIgnoreProperties(ignoreUnknown = true) public record BotConfig(String appId, String appHash, - String botToken, String botUsername, + String botToken, String downloaderScript, String superUsers, String allowedUsers) { diff --git a/src/main/java/com/annimon/ffmpegbot/Main.java b/src/main/java/com/annimon/ffmpegbot/Main.java index 8c3ca83..b80d30d 100644 --- a/src/main/java/com/annimon/ffmpegbot/Main.java +++ b/src/main/java/com/annimon/ffmpegbot/Main.java @@ -6,6 +6,10 @@ import com.annimon.tgbotsmodule.Runner; import com.annimon.tgbotsmodule.beans.Config; import com.annimon.tgbotsmodule.services.YamlConfigLoaderService; import org.jetbrains.annotations.NotNull; +import org.telegram.telegrambots.client.okhttp.OkHttpTelegramClient; +import org.telegram.telegrambots.meta.api.methods.GetMe; +import org.telegram.telegrambots.meta.api.objects.User; +import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import java.util.List; @@ -19,7 +23,13 @@ public class Main implements BotModule { public @NotNull BotHandler botHandler(@NotNull Config config) { final var configLoader = new YamlConfigLoaderService(); final var configFile = configLoader.configFile("ffmpegbot", config.getProfile()); - final var wordlyConfig = configLoader.loadFile(configFile, BotConfig.class); - return new MainBotHandler(wordlyConfig); + final var botConfig = configLoader.loadFile(configFile, BotConfig.class); + try { + final var telegramClient = new OkHttpTelegramClient(botConfig.botToken()); + final User bot = telegramClient.execute(new GetMe()); + return new MainBotHandler(botConfig, bot.getUserName()); + } catch (TelegramApiException e) { + throw new IllegalStateException("Unable to get information about bot", e); + } } } diff --git a/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java b/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java index e80fff5..eee465d 100644 --- a/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java +++ b/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java @@ -24,17 +24,17 @@ public class MainBotHandler extends BotHandler { private final CommandRegistry commands; private final MediaProcessingBundle mediaProcessingBundle; - public MainBotHandler(BotConfig botConfig) { + public MainBotHandler(BotConfig botConfig, String botUserName) { super(BotModuleOptions.createDefault(botConfig.botToken())); permissions = new Permissions(botConfig.superUserIds(), botConfig.allowedUserIds()); - commands = new CommandRegistry<>(botConfig.botUsername(), permissions); + commands = new CommandRegistry<>(botUserName, permissions); final var sessions = new Sessions(); final var fallbackFileDownloader = new FallbackFileDownloader( new TelegramFileDownloader(), new TelegramClientFileDownloader( botConfig.downloaderScript(), botConfig.appId(), botConfig.appHash(), - botConfig.botToken(), botConfig.botUsername()) + botConfig.botToken(), botUserName) ); mediaProcessingBundle = new MediaProcessingBundle(sessions, fallbackFileDownloader); commands.registerBundle(mediaProcessingBundle);