diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 7244181..f63ed0f 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -9,10 +9,7 @@ diff --git a/build.gradle b/build.gradle index a662c31..36534f4 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,6 @@ repositories { dependencies { implementation(project(":core")) implementation(project(":longpolling-okhttp")) - implementation(project(":test")) } tasks.register('fat', Jar) { diff --git a/core/build.gradle b/core/build.gradle index e472613..c816d58 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -5,6 +5,7 @@ plugins { group = 'com.github.hdvtdev' version = '1.0.0' + repositories { mavenCentral() } @@ -13,7 +14,3 @@ dependencies { implementation 'com.fasterxml.jackson.core:jackson-databind:2.18.3' } -jar { - from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - duplicatesStrategy = DuplicatesStrategy.EXCLUDE -} diff --git a/core/src/main/java/hdvtdev/telegram/core/Main.java b/core/src/main/java/hdvtdev/telegram/core/Main.java deleted file mode 100644 index e69de29..0000000 diff --git a/core/src/main/java/hdvtdev/telegram/core/UpdateConsumer.java b/core/src/main/java/hdvtdev/telegram/core/UpdateConsumer.java index 4bba6a6..6b96543 100644 --- a/core/src/main/java/hdvtdev/telegram/core/UpdateConsumer.java +++ b/core/src/main/java/hdvtdev/telegram/core/UpdateConsumer.java @@ -1,11 +1,32 @@ package hdvtdev.telegram.core; +import hdvtdev.telegram.core.objects.ChosenInlineResult; +import hdvtdev.telegram.core.objects.InlineQuery; import hdvtdev.telegram.core.objects.Update; +import hdvtdev.telegram.core.objects.business.BusinessConnection; +import hdvtdev.telegram.core.objects.business.BusinessMessagesDeleted; +import hdvtdev.telegram.core.objects.callback.CallbackQuery; +import hdvtdev.telegram.core.objects.chat.ChatJoinRequest; +import hdvtdev.telegram.core.objects.chat.ChatMemberUpdated; +import hdvtdev.telegram.core.objects.chatboost.ChatBoostRemoved; +import hdvtdev.telegram.core.objects.chatboost.ChatBoostUpdated; +import hdvtdev.telegram.core.objects.media.paidmedia.PaidMediaPurchased; +import hdvtdev.telegram.core.objects.message.Message; +import hdvtdev.telegram.core.objects.message.MessageReactionCountUpdated; +import hdvtdev.telegram.core.objects.message.MessageReactionUpdated; +import hdvtdev.telegram.core.objects.payment.PreCheckoutQuery; +import hdvtdev.telegram.core.objects.payment.ShippingQuery; +import hdvtdev.telegram.core.objects.poll.Poll; +import hdvtdev.telegram.core.objects.poll.PollAnswer; import java.util.List; public interface UpdateConsumer { - void getUpdates(List updates); + + + void onUpdates(List updates); + + } diff --git a/core/src/main/java/hdvtdev/telegram/core/UpdateHandler.java b/core/src/main/java/hdvtdev/telegram/core/UpdateHandler.java new file mode 100644 index 0000000..00cf08c --- /dev/null +++ b/core/src/main/java/hdvtdev/telegram/core/UpdateHandler.java @@ -0,0 +1,80 @@ +package hdvtdev.telegram.core; + +import hdvtdev.telegram.core.objects.ChosenInlineResult; +import hdvtdev.telegram.core.objects.InlineQuery; +import hdvtdev.telegram.core.objects.Update; +import hdvtdev.telegram.core.objects.business.BusinessConnection; +import hdvtdev.telegram.core.objects.business.BusinessMessagesDeleted; +import hdvtdev.telegram.core.objects.callback.CallbackQuery; +import hdvtdev.telegram.core.objects.chat.ChatJoinRequest; +import hdvtdev.telegram.core.objects.chat.ChatMemberUpdated; +import hdvtdev.telegram.core.objects.chatboost.ChatBoostRemoved; +import hdvtdev.telegram.core.objects.chatboost.ChatBoostUpdated; +import hdvtdev.telegram.core.objects.media.paidmedia.PaidMediaPurchased; +import hdvtdev.telegram.core.objects.message.Message; +import hdvtdev.telegram.core.objects.message.MessageReactionCountUpdated; +import hdvtdev.telegram.core.objects.message.MessageReactionUpdated; +import hdvtdev.telegram.core.objects.payment.PreCheckoutQuery; +import hdvtdev.telegram.core.objects.payment.ShippingQuery; +import hdvtdev.telegram.core.objects.poll.Poll; +import hdvtdev.telegram.core.objects.poll.PollAnswer; + +import java.util.List; + +public interface UpdateHandler extends UpdateConsumer { + + @Override + default void onUpdates(List updates) { + for (Update update : updates) { + if (update.hasMessage()) onMessage(update.message()); + if (update.hasEditedMessage()) onEditedMessage(update.editedMessage()); + if (update.hasChannelPost()) onChannelPost(update.channelPost()); + if (update.hasEditedChannelPost()) onEditedChannelPost(update.editedChannelPost()); + if (update.hasBusinessConnection()) onBusinessConnection(update.businessConnection()); + if (update.hasBusinessMessage()) onBusinessMessage(update.businessMessage()); + if (update.hasEditedBusinessMessage()) onEditedBusinessMessage(update.editedBusinessMessage()); + if (update.hasDeletedBusinessMessages()) onDeletedBusinessMessages(update.businessMessagesDeleted()); + if (update.hasMessageReaction()) onMessageReaction(update.messageReaction()); + if (update.hasMessageReactionCount()) onMessageReactionCount(update.messageReactionCount()); + if (update.hasInlineQuery()) onInlineQuery(update.inlineQuery()); + if (update.hasChosenInlineResult()) onChosenInlineResult(update.chosenInlineResult()); + if (update.hasCallbackQuery()) onCallbackQuery(update.callbackQuery()); + if (update.hasShippingQuery()) onShippingQuery(update.shippingQuery()); + if (update.hasPreCheckoutQuery()) onPreCheckoutQuery(update.preCheckoutQuery()); + if (update.hasPurchasedPaidMedia()) onPaidMediaPurchased(update.paidMediaPurchased()); + if (update.hasPoll()) onPoll(update.poll()); + if (update.hasPollAnswer()) onPollAnswer(update.pollAnswer()); + if (update.hasMyChatMember()) onMyChatMember(update.myChatMember()); + if (update.hasChatMember()) onChatMember(update.chatMember()); + if (update.hasChatJoinRequest()) onChatJoinRequest(update.chatJoinRequest()); + if (update.hasChatBoost()) onChatBoost(update.chatBoost()); + if (update.hasRemovedChatBoost()) onChatBoostRemoved(update.chatBoostRemoved()); + } + } + + default void onMessage(Message message) {} + default void onEditedMessage(Message message) {} + default void onChannelPost(Message message) {} + default void onEditedChannelPost(Message message) {} + default void onBusinessConnection(BusinessConnection connection) {} + default void onBusinessMessage(Message message) {} + default void onEditedBusinessMessage(Message message) {} + default void onDeletedBusinessMessages(BusinessMessagesDeleted deleted) {} + default void onMessageReaction(MessageReactionUpdated reaction) {} + default void onMessageReactionCount(MessageReactionCountUpdated count) {} + default void onInlineQuery(InlineQuery query) {} + default void onChosenInlineResult(ChosenInlineResult result) {} + default void onCallbackQuery(CallbackQuery callbackQuery) {} + default void onShippingQuery(ShippingQuery query) {} + default void onPreCheckoutQuery(PreCheckoutQuery query) {} + default void onPaidMediaPurchased(PaidMediaPurchased paidMedia) {} + default void onPoll(Poll poll) {} + default void onPollAnswer(PollAnswer answer) {} + default void onMyChatMember(ChatMemberUpdated member) {} + default void onChatMember(ChatMemberUpdated member) {} + default void onChatJoinRequest(ChatJoinRequest request) {} + default void onChatBoost(ChatBoostUpdated boost) {} + default void onChatBoostRemoved(ChatBoostRemoved removedBoost) {} + + +} diff --git a/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessage.java b/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessage.java index 33e8733..6820944 100644 --- a/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessage.java +++ b/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessage.java @@ -1,9 +1,19 @@ package hdvtdev.telegram.core.objects.message; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + import hdvtdev.telegram.core.objects.chat.Chat; -@JsonDeserialize(using = MaybeInaccessibleMessageDeserializer.class) +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.EXISTING_PROPERTY, + property = "date", + defaultImpl = Message.class +) +@JsonSubTypes({ + @JsonSubTypes.Type(value = InaccessibleMessage.class, name = "0") +}) public interface MaybeInaccessibleMessage { long chatId(); diff --git a/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessageDeserializer.java b/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessageDeserializer.java deleted file mode 100644 index f02036c..0000000 --- a/core/src/main/java/hdvtdev/telegram/core/objects/message/MaybeInaccessibleMessageDeserializer.java +++ /dev/null @@ -1,16 +0,0 @@ -package hdvtdev.telegram.core.objects.message; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import java.io.IOException; - -public class MaybeInaccessibleMessageDeserializer extends JsonDeserializer { - - @Override - public MaybeInaccessibleMessage deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - Message msg = p.getCodec().readValue(p, Message.class); - return msg.date() == 0 ? new InaccessibleMessage(msg.chat(), msg.messageId(), 0) : msg; - } -} \ No newline at end of file diff --git a/core/src/main/java/hdvtdev/telegram/core/objects/message/Message.java b/core/src/main/java/hdvtdev/telegram/core/objects/message/Message.java index 92e1e5a..476f236 100644 --- a/core/src/main/java/hdvtdev/telegram/core/objects/message/Message.java +++ b/core/src/main/java/hdvtdev/telegram/core/objects/message/Message.java @@ -3,6 +3,7 @@ package hdvtdev.telegram.core.objects.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; + import hdvtdev.telegram.core.objects.*; import hdvtdev.telegram.core.objects.chat.Chat; import hdvtdev.telegram.core.objects.chat.ChatBackground; @@ -290,4 +291,5 @@ public record Message( public long chatId() { return this.chat.id(); } + } diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index 1b984fe..ef0e284 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -9,6 +9,8 @@ module core { exports hdvtdev.telegram.core.objects.callback; exports hdvtdev.telegram.core.objects.message; exports hdvtdev.telegram.core.objects.media; + exports hdvtdev.telegram.core.objects.media.paidmedia; + exports hdvtdev.telegram.core.objects.media.video; exports hdvtdev.telegram.core.objects.background; exports hdvtdev.telegram.core.objects.business; exports hdvtdev.telegram.core.objects.chat; diff --git a/longpolling-okhttp/src/main/java/hdvtdev/telegram/longpolling/okhttp/OkHttpTelegramBot.java b/longpolling-okhttp/src/main/java/hdvtdev/telegram/longpolling/okhttp/OkHttpTelegramBot.java index 5c97f82..61b7507 100644 --- a/longpolling-okhttp/src/main/java/hdvtdev/telegram/longpolling/okhttp/OkHttpTelegramBot.java +++ b/longpolling-okhttp/src/main/java/hdvtdev/telegram/longpolling/okhttp/OkHttpTelegramBot.java @@ -117,7 +117,6 @@ public class OkHttpTelegramBot implements TelegramBot { enableHandlers = builder.enableHandlers; userStateStorage = builder.userStateStorage; userState = builder.userState; - if (builder.updateConsumer != null) setUpdateConsumer(builder.updateConsumer); /* if (false) { Class updateConsumerClass = builder.updateConsumer == null ? UpdateConsumer.class : builder.updateConsumer.getClass(); @@ -129,6 +128,7 @@ public class OkHttpTelegramBot implements TelegramBot { */ this.TELEGRAM_API_URL = "https://api.telegram.org/bot" + builder.token + "/"; this.TELEGRAM_FILE_API_URL = "https://api.telegram.org/file/bot" + builder.token + "/"; + if (builder.updateConsumer != null) setUpdateConsumer(builder.updateConsumer); } /** @@ -195,7 +195,7 @@ public class OkHttpTelegramBot implements TelegramBot { }); } } - if (updateConsumer != null) CompletableFuture.runAsync(() -> updateConsumer.getUpdates(updates)); + if (updateConsumer != null) CompletableFuture.runAsync(() -> updateConsumer.onUpdates(updates)); } finally { lastUpdateId.set(updates.getLast().updateId()); if (!thread.isShutdown()) getUpdates(); diff --git a/longpolling-okhttp/src/main/java/module-info.java b/longpolling-okhttp/src/main/java/module-info.java index 8834810..e7df579 100644 --- a/longpolling-okhttp/src/main/java/module-info.java +++ b/longpolling-okhttp/src/main/java/module-info.java @@ -1,7 +1,6 @@ module longpolling.okhttp { exports hdvtdev.telegram.longpolling.okhttp; - requires com.fasterxml.jackson.databind; - requires com.fasterxml.jackson.core; requires core; requires okhttp3; + requires com.fasterxml.jackson.databind; } diff --git a/settings.gradle b/settings.gradle index 8c3e3e0..8dac7dc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,4 @@ rootProject.name = 'TeleJ' -include 'longpolling' include 'core' -include 'longpolling:longpolling-okhttp' -findProject(':longpolling:longpolling-okhttp')?.name = 'longpolling-okhttp' -include 'test' include 'longpolling-okhttp' diff --git a/test/build.gradle b/test/build.gradle deleted file mode 100644 index d4eb6b4..0000000 --- a/test/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id 'java' -} - -group = 'com.github.hdvtdev' -version = '1.0.0' - -repositories { - mavenCentral() -} - -dependencies { - implementation(project(":core")) - implementation(project(":longpolling-okhttp")) -} - - diff --git a/test/src/main/java/Main.java b/test/src/main/java/Main.java deleted file mode 100644 index c3a4d31..0000000 --- a/test/src/main/java/Main.java +++ /dev/null @@ -1,27 +0,0 @@ -import hdvtdev.telegram.core.TelegramBot; -import hdvtdev.telegram.core.UpdateConsumer; -import hdvtdev.telegram.core.objects.Update; -import hdvtdev.telegram.longpolling.okhttp.OkHttpTelegramBot; - - -import java.util.List; - -public class Main { - - public static void main(String... a) { - - TelegramBot bot = new OkHttpTelegramBot.Builder(a[0]).enableHandlers(true).updateConsumer(new Upd()).build(); - - } - - public static final class Upd implements UpdateConsumer { - - @Override - public void getUpdates(List updates) { - - } - } - - - -}