diff --git a/ffmpegbot.yaml.template b/ffmpegbot.yaml.template index 076edec..0067290 100644 --- a/ffmpegbot.yaml.template +++ b/ffmpegbot.yaml.template @@ -1,5 +1,7 @@ # Telegram bot token and bot username botToken: 1234567890:AAAABBBBCCCCDDDDEEEEFF-GGGGHHHHIIII botUsername: yourbotname +# Superusers can execute /run command +superUsers: [12345] # Allowed user ids -allowedUsers: [12345, 12346, 12347] \ No newline at end of file +allowedUsers: [12346, 12347] diff --git a/src/main/java/com/annimon/ffmpegbot/BotConfig.java b/src/main/java/com/annimon/ffmpegbot/BotConfig.java index a659aa6..76e0c8c 100644 --- a/src/main/java/com/annimon/ffmpegbot/BotConfig.java +++ b/src/main/java/com/annimon/ffmpegbot/BotConfig.java @@ -2,9 +2,11 @@ package com.annimon.ffmpegbot; import java.util.Set; -public record BotConfig(String botToken, String botUsername, Set allowedUsers) { +public record BotConfig(String botToken, String botUsername, + Set superUsers, Set allowedUsers) { boolean isUserAllowed(Long userId) { - return allowedUsers().contains(userId); + return superUsers().contains(userId) + || allowedUsers().contains(userId); } } diff --git a/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java b/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java index ac59c7c..411c6ed 100644 --- a/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java +++ b/src/main/java/com/annimon/ffmpegbot/MainBotHandler.java @@ -12,6 +12,9 @@ import com.annimon.tgbotsmodule.commands.authority.For; import org.jetbrains.annotations.NotNull; import org.telegram.telegrambots.meta.api.methods.BotApiMethod; import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.api.objects.User; + +import java.util.EnumSet; public class MainBotHandler extends BotHandler { private final BotConfig botConfig; @@ -20,7 +23,7 @@ public class MainBotHandler extends BotHandler { public MainBotHandler(BotConfig botConfig) { this.botConfig = botConfig; - commands = new CommandRegistry<>(this, ((update, user, fors) -> botConfig.isUserAllowed(user.getId()))); + commands = new CommandRegistry<>(this, this::checkAccess); final var sessions = new Sessions(); mediaProcessingBundle = new MediaProcessingBundle(sessions); commands.registerBundle(mediaProcessingBundle); @@ -50,4 +53,14 @@ public class MainBotHandler extends BotHandler { public String getBotToken() { return botConfig.botToken(); } + + private boolean checkAccess(Update update, @NotNull User user, @NotNull EnumSet roles) { + final long userId = user.getId(); + + if (roles.contains(For.CREATOR) && botConfig.superUsers().contains(userId)) + return true; + if (roles.contains(For.ADMIN) && botConfig.isUserAllowed(userId)) + return true; + return roles.contains(For.USER); + } } diff --git a/src/main/java/com/annimon/ffmpegbot/commands/HelpCommand.java b/src/main/java/com/annimon/ffmpegbot/commands/HelpCommand.java index f8a03e5..9ea4513 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/HelpCommand.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/HelpCommand.java @@ -6,6 +6,7 @@ import com.annimon.tgbotsmodule.commands.context.MessageContext; import org.jetbrains.annotations.NotNull; import java.util.EnumSet; +import java.util.Set; public class HelpCommand implements TextCommand { @@ -14,6 +15,11 @@ public class HelpCommand implements TextCommand { return "/help"; } + @Override + public Set aliases() { + return Set.of("/start"); + } + @SuppressWarnings("unchecked") @Override public EnumSet authority() { @@ -33,8 +39,8 @@ public class HelpCommand implements TextCommand { yt-dlp /dl link [format] — download a media using yt-dlp - link — a link to download (it must be supported by yt-dlp) - format — (optional) a download format. Can be "audio", "240", "360", "480", "720" or "1080" + `link` — a link to download (it must be supported by yt-dlp) + `format` — (optional) a download format. Can be "audio", "240", "360", "480", "720" or "1080" """.stripIndent()).enableHtml().callAsync(ctx.sender); } } diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/InputParametersBundle.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/InputParametersBundle.java index b7da5e0..c89b330 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/InputParametersBundle.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/InputParametersBundle.java @@ -27,6 +27,7 @@ public class InputParametersBundle implements CommandBundle { public void register(@NotNull CommandRegistry commands) { commands.register(new SimpleRegexCommand( Pattern.compile("^/(ss|to?) ?(\\d+|\\d{2}:\\d{2}:\\d{2})?$"), + For.ADMIN, sessionCommand(this::cutCommand))); } diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java index c16eb37..1c69a1d 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java @@ -34,10 +34,10 @@ public class MediaProcessingBundle implements CommandBundle { @Override public void register(@NotNull CommandRegistry commands) { - commands.register(new SimpleCallbackQueryCommand(PREV, ctx -> toggleParameter(ctx, true))); - commands.register(new SimpleCallbackQueryCommand(NEXT, ctx -> toggleParameter(ctx, false))); - commands.register(new SimpleCallbackQueryCommand(DETAIL, sessionCommand(this::details))); - commands.register(new SimpleCallbackQueryCommand(PROCESS, sessionCommand(this::process))); + commands.register(new SimpleCallbackQueryCommand(PREV, For.ADMIN, ctx -> toggleParameter(ctx, true))); + commands.register(new SimpleCallbackQueryCommand(NEXT, For.ADMIN, ctx -> toggleParameter(ctx, false))); + commands.register(new SimpleCallbackQueryCommand(DETAIL, For.ADMIN, sessionCommand(this::details))); + commands.register(new SimpleCallbackQueryCommand(PROCESS, For.ADMIN, sessionCommand(this::process))); } public void handleMessage(final @NotNull CommonAbsSender sender, final @NotNull Message message) { diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ytdlp/YtDlpCommandBundle.java b/src/main/java/com/annimon/ffmpegbot/commands/ytdlp/YtDlpCommandBundle.java index c056750..ae8c322 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ytdlp/YtDlpCommandBundle.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ytdlp/YtDlpCommandBundle.java @@ -17,6 +17,7 @@ public class YtDlpCommandBundle implements CommandBundle { public void register(@NotNull CommandRegistry commands) { commands.register(new SimpleRegexCommand( Pattern.compile("/dl (https?://[^ ]+) ?(audio|\\d+)?p?"), + For.ADMIN, this::download)); }