diff --git a/README.md b/README.md index 1e6c446c5..6a6be122a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![codecov](https://codecov.io/gh/pengrad/java-telegram-bot-api/branch/master/graph/badge.svg)](https://codecov.io/gh/pengrad/java-telegram-bot-api) Java library for interacting with [Telegram Bot API](https://core.telegram.org/bots/api) -- Full support of all Bot API 10.1 methods +- Full support of all Bot API 10.3 methods - Telegram [Passport](https://core.telegram.org/passport) and Decryption API - Bot [Payments](https://core.telegram.org/bots/payments) - [Gaming Platform](https://telegram.org/blog/games) @@ -13,14 +13,14 @@ Java library for interacting with [Telegram Bot API](https://core.telegram.org/b Gradle: ```groovy -implementation 'com.github.pengrad:java-telegram-bot-api:10.1.0' +implementation 'com.github.pengrad:java-telegram-bot-api:10.3.0' ``` Maven: ```xml com.github.pengrad java-telegram-bot-api - 10.1.0 + 10.3.0 ``` [JAR with all dependencies on release page](https://github.com/pengrad/java-telegram-bot-api/releases) diff --git a/gradle.properties b/gradle.properties index 4be86b119..fa055e807 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.github.pengrad -VERSION_NAME=10.1.0 +VERSION_NAME=10.3.0 POM_DESCRIPTION=Java API for Telegram Bot API POM_URL=https://github.com/pengrad/java-telegram-bot-api/ diff --git a/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java b/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java index 417b2ffff..27bef3cfa 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java @@ -18,6 +18,7 @@ public BotCommand(String command, String description) { private String command; private String description; + private Boolean is_ephemeral; public String command() { return command; @@ -27,6 +28,15 @@ public String description() { return description; } + public Boolean isEphemeral() { + return is_ephemeral; + } + + public BotCommand isEphemeral(Boolean isEphemeral) { + this.is_ephemeral = isEphemeral; + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -35,13 +45,15 @@ public boolean equals(Object o) { BotCommand that = (BotCommand) o; if (command != null ? !command.equals(that.command) : that.command != null) return false; - return description != null ? description.equals(that.description) : that.description == null; + if (description != null ? !description.equals(that.description) : that.description != null) return false; + return is_ephemeral != null ? is_ephemeral.equals(that.is_ephemeral) : that.is_ephemeral == null; } @Override public int hashCode() { int result = command != null ? command.hashCode() : 0; result = 31 * result + (description != null ? description.hashCode() : 0); + result = 31 * result + (is_ephemeral != null ? is_ephemeral.hashCode() : 0); return result; } @@ -50,6 +62,7 @@ public String toString() { return "BotCommand{" + "command='" + command + '\'' + ", description='" + description + '\'' + + ", is_ephemeral=" + is_ephemeral + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt b/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt new file mode 100644 index 000000000..f319bbd38 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt @@ -0,0 +1,9 @@ +package com.pengrad.telegrambot.model + +import java.io.Serializable + +data class BotSubscriptionUpdated( + @get:JvmName("user") val user: User, + @get:JvmName("invoicePayload") val invoicePayload: String, + @get:JvmName("state") val state: String, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java index 67d7e5c05..e4831ef51 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java @@ -28,6 +28,7 @@ public class ChatAdministratorRights implements Serializable { private Boolean can_manage_topics; private Boolean can_manage_direct_messages; private Boolean can_manage_tags; + private Boolean can_send_welcome_messages; public Boolean isAnonymous() { return is_anonymous != null && is_anonymous; @@ -97,6 +98,10 @@ public Boolean canManageTags() { return can_manage_tags != null && can_manage_tags; } + public Boolean canSendWelcomeMessages() { + return can_send_welcome_messages != null && can_send_welcome_messages; + } + public ChatAdministratorRights canManageChat(boolean canManageChat) { this.can_manage_chat = canManageChat; return this; @@ -177,6 +182,11 @@ public ChatAdministratorRights canManageTags(boolean canManageTags) { return this; } + public ChatAdministratorRights canSendWelcomeMessages(boolean canSendWelcomeMessages) { + this.can_send_welcome_messages = canSendWelcomeMessages; + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -199,7 +209,8 @@ public boolean equals(Object o) { Objects.equals(can_delete_stories, that.can_delete_stories) && Objects.equals(can_manage_topics, that.can_manage_topics) && Objects.equals(can_manage_direct_messages, that.can_manage_direct_messages) && - Objects.equals(can_manage_tags, that.can_manage_tags); + Objects.equals(can_manage_tags, that.can_manage_tags) && + Objects.equals(can_send_welcome_messages, that.can_send_welcome_messages); } @Override @@ -220,7 +231,8 @@ public int hashCode() { can_delete_stories, can_manage_topics, can_manage_direct_messages, - can_manage_tags); + can_manage_tags, + can_send_welcome_messages); } @Override @@ -243,6 +255,7 @@ public String toString() { ", can_manage_topics=" + can_manage_topics + ", can_manage_direct_messages=" + can_manage_direct_messages + ", can_manage_tags=" + can_manage_tags + + ", can_send_welcome_messages=" + can_send_welcome_messages + '}'; } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java index 8de790db6..b1dca42ad 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java @@ -80,6 +80,7 @@ public enum Type { private UniqueGiftColors unique_gift_colors; private Audio first_profile_audio; private User guard_bot; + private Community community; public Long id() { return id; @@ -288,6 +289,10 @@ public User guardBot() { return guard_bot; } + public Community community() { + return community; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -344,7 +349,8 @@ public boolean equals(Object o) { Objects.equals(paid_message_star_count, chat.paid_message_star_count) && Objects.equals(unique_gift_colors, chat.unique_gift_colors) && Objects.equals(first_profile_audio, chat.first_profile_audio) && - Objects.equals(guard_bot, chat.guard_bot); + Objects.equals(guard_bot, chat.guard_bot) && + Objects.equals(community, chat.community); } @Override @@ -407,6 +413,7 @@ public String toString() { ", unique_gift_colors=" + unique_gift_colors + ", first_profile_audio=" + first_profile_audio + ", guard_bot=" + guard_bot + + ", community=" + community + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java index f3c2131fc..08e88a0c9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java @@ -37,6 +37,7 @@ public enum Status { private Boolean can_manage_topics; private Boolean can_manage_direct_messages; private Boolean can_manage_tags; + private Boolean can_send_welcome_messages; private Boolean can_edit_tag; private String tag; private Boolean is_member; @@ -142,6 +143,10 @@ public Boolean canManageTags() { return can_manage_tags != null && can_manage_tags; } + public Boolean canSendWelcomeMessages() { + return can_send_welcome_messages != null && can_send_welcome_messages; + } + public Boolean canEditTag() { return can_edit_tag != null && can_edit_tag; } @@ -225,6 +230,7 @@ public boolean equals(Object o) { Objects.equals(can_manage_topics, that.can_manage_topics) && Objects.equals(can_manage_direct_messages, that.can_manage_direct_messages) && Objects.equals(can_manage_tags, that.can_manage_tags) && + Objects.equals(can_send_welcome_messages, that.can_send_welcome_messages) && Objects.equals(can_edit_tag, that.can_edit_tag) && Objects.equals(tag, that.tag) && Objects.equals(is_member, that.is_member) && @@ -265,6 +271,7 @@ public int hashCode() { can_manage_topics, can_manage_direct_messages, can_manage_tags, + can_send_welcome_messages, can_edit_tag, tag, is_member, @@ -306,6 +313,7 @@ public String toString() { ", can_manage_topics=" + can_manage_topics + ", can_manage_direct_messages=" + can_manage_direct_messages + ", can_manage_tags=" + can_manage_tags + + ", can_send_welcome_messages=" + can_send_welcome_messages + ", can_edit_tag=" + can_edit_tag + ", tag='" + tag + '\'' + ", is_member=" + is_member + diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Community.kt b/library/src/main/java/com/pengrad/telegrambot/model/Community.kt new file mode 100644 index 000000000..d61a6408d --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/Community.kt @@ -0,0 +1,6 @@ +package com.pengrad.telegrambot.model + +data class Community( + @get:JvmName("id") val id: Long, + @get:JvmName("name") val name: String, +) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt new file mode 100644 index 000000000..d5344defc --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model + +data class CommunityChatAdded( + @get:JvmName("community") val community: Community, +) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt new file mode 100644 index 000000000..fe6794568 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model + +data class CommunityChatJoined( + @get:JvmName("community") val community: Community, +) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt new file mode 100644 index 000000000..015443227 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt @@ -0,0 +1,11 @@ +package com.pengrad.telegrambot.model + +class CommunityChatRemoved { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + return other != null && javaClass == other.javaClass + } + + override fun hashCode(): Int = 1 +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Location.java b/library/src/main/java/com/pengrad/telegrambot/model/Location.java index ae2f319c5..0f136708e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Location.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Location.java @@ -17,6 +17,14 @@ public class Location implements Serializable { private Integer heading; private Integer proximity_alert_radius; + private Location() { + } + + public Location(Float latitude, Float longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + public Float longitude() { return longitude; } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Message.java b/library/src/main/java/com/pengrad/telegrambot/model/Message.java index 8aebc1b09..299917ff7 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -37,6 +37,8 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private Long message_thread_id; private DirectMessagesTopic direct_messages_topic; private User from; + private User receiver_user; + private Long ephemeral_message_id; private Chat sender_chat; private String sender_tag; private Integer sender_boost_count; @@ -146,6 +148,9 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private User guest_bot_caller_user; private Chat guest_bot_caller_chat; private String guest_query_id; + private CommunityChatAdded community_chat_added; + private CommunityChatJoined community_chat_joined; + private CommunityChatRemoved community_chat_removed; public Long messageThreadId() { return message_thread_id; @@ -159,6 +164,14 @@ public User from() { return from; } + public User receiverUser() { + return receiver_user; + } + + public Long ephemeralMessageId() { + return ephemeral_message_id; + } + public Chat senderChat() { return sender_chat; } @@ -584,6 +597,18 @@ public String replyToPollOptionId() { return reply_to_poll_option_id; } + public CommunityChatAdded communityChatAdded() { + return community_chat_added; + } + + public CommunityChatJoined communityChatJoined() { + return community_chat_joined; + } + + public CommunityChatRemoved communityChatRemoved() { + return community_chat_removed; + } + public User guestBotCallerUser() { return guest_bot_caller_user; } @@ -626,6 +651,8 @@ public boolean equals(Object o) { Objects.equals(message_thread_id, message.message_thread_id) && Objects.equals(direct_messages_topic, message.direct_messages_topic) && Objects.equals(from, message.from) && + Objects.equals(receiver_user, message.receiver_user) && + Objects.equals(ephemeral_message_id, message.ephemeral_message_id) && Objects.equals(sender_chat, message.sender_chat) && Objects.equals(sender_tag, message.sender_tag) && Objects.equals(sender_boost_count, message.sender_boost_count) && @@ -736,7 +763,10 @@ public boolean equals(Object o) { Objects.equals(reply_to_poll_option_id, message.reply_to_poll_option_id) && Objects.equals(guest_bot_caller_user, message.guest_bot_caller_user) && Objects.equals(guest_bot_caller_chat, message.guest_bot_caller_chat) && - Objects.equals(guest_query_id, message.guest_query_id); + Objects.equals(guest_query_id, message.guest_query_id) && + Objects.equals(community_chat_added, message.community_chat_added) && + Objects.equals(community_chat_joined, message.community_chat_joined) && + Objects.equals(community_chat_removed, message.community_chat_removed); } @Override @@ -751,6 +781,8 @@ public String toString() { ", message_thread_id=" + message_thread_id + ", direct_messages_topic=" + direct_messages_topic + ", from=" + from + + ", receiver_user=" + receiver_user + + ", ephemeral_message_id=" + ephemeral_message_id + ", sender_chat=" + sender_chat + ", sender_tag='" + sender_tag + '\'' + ", sender_boost_count=" + sender_boost_count + @@ -862,6 +894,9 @@ public String toString() { ", guest_bot_caller_user=" + guest_bot_caller_user + ", guest_bot_caller_chat=" + guest_bot_caller_chat + ", guest_query_id='" + guest_query_id + '\'' + + ", community_chat_added=" + community_chat_added + + ", community_chat_joined=" + community_chat_joined + + ", community_chat_removed=" + community_chat_removed + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt b/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt new file mode 100644 index 000000000..ca87d618a --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.model + +data class MessageGenerationStopped( + @get:JvmName("chat") val chat: Chat, + @get:JvmName("messageThreadId") val messageThreadId: Long? = null, + @get:JvmName("draftId") val draftId: Int, +) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Update.java b/library/src/main/java/com/pengrad/telegrambot/model/Update.java index ffd68e65d..669466e9e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Update.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Update.java @@ -42,6 +42,8 @@ public class Update implements Serializable { private PaidMediaPurchased purchased_paid_media; private ManagedBotUpdated managed_bot; private Message guest_message; + private BotSubscriptionUpdated subscription; + private MessageGenerationStopped stopped_message_generation; public Integer updateId() { return update_id; @@ -147,6 +149,14 @@ public Message guestMessage() { return guest_message; } + public BotSubscriptionUpdated subscription() { + return subscription; + } + + public MessageGenerationStopped stoppedMessageGeneration() { + return stopped_message_generation; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -177,7 +187,9 @@ public boolean equals(Object o) { Objects.equals(removed_chat_boost, update.removed_chat_boost) && Objects.equals(purchased_paid_media, update.purchased_paid_media) && Objects.equals(managed_bot, update.managed_bot) && - Objects.equals(guest_message, update.guest_message); + Objects.equals(guest_message, update.guest_message) && + Objects.equals(subscription, update.subscription) && + Objects.equals(stopped_message_generation, update.stopped_message_generation); } @Override @@ -214,6 +226,8 @@ public String toString() { ", purchased_paid_media=" + purchased_paid_media + ", managed_bot=" + managed_bot + ", guest_message=" + guest_message + + ", subscription=" + subscription + + ", stopped_message_generation=" + stopped_message_generation + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt b/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt new file mode 100644 index 000000000..8ee59a2aa --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.ephemeral + +class EphemeralMessageParameters private constructor( + @get:JvmName("receiverUserId") val receiverUserId: Long, + @get:JvmName("callbackQueryId") var callbackQueryId: String?, + @get:JvmName("replaceCallbackQueryMessage") var replaceCallbackQueryMessage: Boolean?, +) { + + constructor(receiverUserId: Long) : this( + receiverUserId = receiverUserId, + callbackQueryId = null, + replaceCallbackQueryMessage = null + ) + + fun callbackQueryId(callbackQueryId: String) = apply { + this.callbackQueryId = callbackQueryId + } + + fun replaceCallbackQueryMessage(replaceCallbackQueryMessage: Boolean) = apply { + this.replaceCallbackQueryMessage = replaceCallbackQueryMessage + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as EphemeralMessageParameters + return receiverUserId == other.receiverUserId && + callbackQueryId == other.callbackQueryId && + replaceCallbackQueryMessage == other.replaceCallbackQueryMessage + } + + override fun hashCode(): Int { + var result = receiverUserId.hashCode() + result = 31 * result + (callbackQueryId?.hashCode() ?: 0) + result = 31 * result + (replaceCallbackQueryMessage?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "EphemeralMessageParameters(receiverUserId=$receiverUserId, callbackQueryId=$callbackQueryId, replaceCallbackQueryMessage=$replaceCallbackQueryMessage)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt b/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt index 1429504f2..832df2dc5 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model.gift.unique +import com.pengrad.telegrambot.model.MessageEntity + @Suppress("unused") data class UniqueGiftInfo( @get:JvmName("gift") val gift: UniqueGift, @@ -10,5 +12,53 @@ data class UniqueGiftInfo( @Deprecated("Use lastResaleCurrency and lastResaleAmount instead") @get:JvmName("lastResaleStarCount") val lastResaleStarCount: Int?, @get:JvmName("lastResaleCurrency") val lastResaleCurrency: String?, - @get:JvmName("lastResaleAmount") val lastResaleAmount: Long? -) \ No newline at end of file + @get:JvmName("lastResaleAmount") val lastResaleAmount: Long?, + @get:JvmName("text") val text: String? = null, + @get:JvmName("entities") val entities: Array? = null, + @get:JvmName("isPrivate") val isPrivate: Boolean? = null, +) { + + @Suppress("DEPRECATION") + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is UniqueGiftInfo) return false + + return gift == other.gift && + origin == other.origin && + ownedGiftId == other.ownedGiftId && + transferStarCount == other.transferStarCount && + nextTransferDate == other.nextTransferDate && + lastResaleStarCount == other.lastResaleStarCount && + lastResaleCurrency == other.lastResaleCurrency && + lastResaleAmount == other.lastResaleAmount && + text == other.text && + entities contentEquals other.entities && + isPrivate == other.isPrivate + } + + @Suppress("DEPRECATION") + override fun hashCode(): Int { + var result = gift.hashCode() + result = 31 * result + origin.hashCode() + result = 31 * result + (ownedGiftId?.hashCode() ?: 0) + result = 31 * result + (transferStarCount ?: 0) + result = 31 * result + (nextTransferDate?.hashCode() ?: 0) + result = 31 * result + (lastResaleStarCount ?: 0) + result = 31 * result + (lastResaleCurrency?.hashCode() ?: 0) + result = 31 * result + (lastResaleAmount?.hashCode() ?: 0) + result = 31 * result + (text?.hashCode() ?: 0) + result = 31 * result + (entities?.contentHashCode() ?: 0) + result = 31 * result + (isPrivate?.hashCode() ?: 0) + return result + } + + @Suppress("DEPRECATION") + override fun toString(): String { + return "UniqueGiftInfo(gift=$gift, origin=$origin, ownedGiftId=$ownedGiftId, " + + "transferStarCount=$transferStarCount, nextTransferDate=$nextTransferDate, " + + "lastResaleStarCount=$lastResaleStarCount, lastResaleCurrency=$lastResaleCurrency, " + + "lastResaleAmount=$lastResaleAmount, text=$text, " + + "entities=${entities?.contentToString()}, isPrivate=$isPrivate)" + } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt new file mode 100644 index 000000000..5fe4b9769 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt @@ -0,0 +1,13 @@ +package com.pengrad.telegrambot.model.request + +class DisabledButton { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + return other != null && javaClass == other.javaClass + } + + override fun hashCode(): Int = 1 + + override fun toString(): String = "DisabledButton()" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt index 6f2f6f0b0..b20a09e66 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt @@ -19,7 +19,8 @@ data class InlineKeyboardButton @JvmOverloads constructor( @get:JvmName("webApp") var webApp: WebAppInfo? = null, @get:JvmName("copyText") var copyText: CopyTextButton? = null, @get:JvmName("iconCustomEmojiId") var iconCustomEmojiId: String? = null, - @get:JvmName("style") var style: String? = null + @get:JvmName("style") var style: String? = null, + @get:JvmName("disabled") var disabled: DisabledButton? = null ) { fun url(url: String): InlineKeyboardButton { @@ -90,4 +91,9 @@ data class InlineKeyboardButton @JvmOverloads constructor( this.style = style return this } + + fun disabled(): InlineKeyboardButton { + this.disabled = DisabledButton() + return this + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java index f8113fe67..62b9c99c9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java @@ -14,6 +14,7 @@ public class InlineKeyboardMarkup extends Keyboard implements Serializable { private final static long serialVersionUID = 0L; private final List> inline_keyboard; + private Boolean force_reply; public InlineKeyboardMarkup() { this.inline_keyboard = new ArrayList<>(); @@ -35,6 +36,15 @@ public InlineKeyboardMarkup addRow(InlineKeyboardButton... keyboard) { return this; } + public InlineKeyboardMarkup forceReply(boolean forceReply) { + this.force_reply = forceReply; + return this; + } + + public Boolean forceReply() { + return force_reply; + } + public InlineKeyboardButton[][] inlineKeyboard() { InlineKeyboardButton[][] res = new InlineKeyboardButton[inline_keyboard.size()][]; for (int i = 0; i < inline_keyboard.size(); i++) { @@ -49,18 +59,20 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; InlineKeyboardMarkup that = (InlineKeyboardMarkup) o; - return Objects.equals(inline_keyboard, that.inline_keyboard); + return Objects.equals(inline_keyboard, that.inline_keyboard) && + Objects.equals(force_reply, that.force_reply); } @Override public int hashCode() { - return Objects.hash(inline_keyboard); + return Objects.hash(inline_keyboard, force_reply); } @Override public String toString() { return "InlineKeyboardMarkup{" + "inline_keyboard=" + inline_keyboard + + ", force_reply=" + force_reply + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt new file mode 100644 index 000000000..49346cba8 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt @@ -0,0 +1,21 @@ +package com.pengrad.telegrambot.model.request + +import com.pengrad.telegrambot.request.ContentTypes +import java.io.File + +class InputMediaVoiceNote : InputMedia { + + constructor(media: String) : super("voice_note", media) + constructor(media: File) : super("voice_note", media) + constructor(media: ByteArray) : super("voice_note", media) + + private var duration: Int? = null + + fun duration(duration: Int): InputMediaVoiceNote { + this.duration = duration + return this + } + + override fun getDefaultFileName(): String = ContentTypes.VOICE_FILE_NAME + override fun getDefaultContentType(): String = ContentTypes.VOICE_MIME_TYPE +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java index 53756c237..3ae3cc3b2 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java @@ -18,6 +18,7 @@ public class ReplyKeyboardMarkup extends Keyboard implements Serializable { private String input_field_placeholder; private boolean selective; private boolean is_persistent; + private Boolean force_reply; public ReplyKeyboardMarkup(String[][] keyboard, boolean resize_keyboard, boolean one_time_keyboard, String input_field_placeholder, boolean selective, boolean is_persistent) { this.keyboard = new ArrayList<>(); @@ -92,4 +93,9 @@ public ReplyKeyboardMarkup isPersistent(boolean is_persistent) { this.is_persistent = is_persistent; return this; } + + public ReplyKeyboardMarkup forceReply(boolean forceReply) { + this.force_reply = forceReply; + return this; + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java index cbac3a119..4d0dc8739 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java @@ -9,6 +9,7 @@ public class ReplyParameters implements Serializable { private final static long serialVersionUID = 0L; private Integer message_id; + private Long ephemeral_message_id; private Object chat_id; private Boolean allow_sending_without_reply; private String quote; @@ -18,6 +19,8 @@ public class ReplyParameters implements Serializable { private Integer checklist_task_id; private String poll_option_id; + public ReplyParameters() {} + public ReplyParameters(Integer messageId) { this.message_id = messageId; } @@ -27,6 +30,16 @@ public ReplyParameters(Integer messageId, Object chatId) { this.chat_id = chatId; } + public ReplyParameters messageId(Integer messageId) { + this.message_id = messageId; + return this; + } + + public ReplyParameters ephemeralMessageId(Long ephemeralMessageId) { + this.ephemeral_message_id = ephemeralMessageId; + return this; + } + public ReplyParameters allowSendingWithoutReply(Boolean allowSendingWithoutReply) { this.allow_sending_without_reply = allowSendingWithoutReply; return this; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt index ec61a5d27..f78504244 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt @@ -1,45 +1,66 @@ package com.pengrad.telegrambot.model.request.richmessages +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.richmessages.richblock.InputRichBlock + class InputRichMessage private constructor( + @get:JvmName("blocks") var blocks: Array?, @get:JvmName("html") var html: String?, @get:JvmName("markdown") var markdown: String?, + @get:JvmName("media") var media: Array?, @get:JvmName("isRtl") var isRtl: Boolean?, @get:JvmName("skipEntityDetection") var skipEntityDetection: Boolean? ) { constructor() : this( + blocks = null, html = null, markdown = null, + media = null, isRtl = null, skipEntityDetection = null ) + fun blocks(vararg blocks: InputRichBlock) = apply { this.blocks = arrayOf(*blocks) } + fun html(html: String) = apply { this.html = html } fun markdown(markdown: String) = apply { this.markdown = markdown } + fun media(vararg media: InputRichMessageMedia) = apply { this.media = arrayOf(*media) } + fun isRtl(isRtl: Boolean) = apply { this.isRtl = isRtl } fun skipEntityDetection(skipEntityDetection: Boolean) = apply { this.skipEntityDetection = skipEntityDetection } + /** + * All the media carried by this rich message, for requests that have to upload them. + */ + fun inputMedia(): List> = + (media?.map { it.media } ?: emptyList()) + (blocks?.flatMap { it.inputMedia() } ?: emptyList()) + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as InputRichMessage - return html == other.html && + return blocks.contentEquals(other.blocks) && + html == other.html && markdown == other.markdown && + media.contentEquals(other.media) && isRtl == other.isRtl && skipEntityDetection == other.skipEntityDetection } override fun hashCode(): Int { - var result = html?.hashCode() ?: 0 + var result = blocks?.contentHashCode() ?: 0 + result = 31 * result + (html?.hashCode() ?: 0) result = 31 * result + (markdown?.hashCode() ?: 0) + result = 31 * result + (media?.contentHashCode() ?: 0) result = 31 * result + (isRtl?.hashCode() ?: 0) result = 31 * result + (skipEntityDetection?.hashCode() ?: 0) return result } override fun toString(): String = - "InputRichMessage(html=$html, markdown=$markdown, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" + "InputRichMessage(blocks=${blocks?.contentToString()}, html=$html, markdown=$markdown, media=${media?.contentToString()}, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt new file mode 100644 index 000000000..bc958c9f1 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages + +import com.pengrad.telegrambot.model.request.InputMedia + +class InputRichMessageMedia( + @get:JvmName("id") val id: String, + @get:JvmName("media") val media: InputMedia<*> +) { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichMessageMedia + return id == other.id && + media == other.media + } + + override fun hashCode(): Int { + var result = id.hashCode() + result = 31 * result + media.hashCode() + return result + } + + override fun toString(): String = "InputRichMessageMedia(id=$id, media=$media)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt new file mode 100644 index 000000000..5c3cf8156 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt @@ -0,0 +1,12 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia + +interface InputRichBlock { + val type: String + + /** + * The media carried by this block, for requests that have to upload them. + */ + fun inputMedia(): List> = emptyList() +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt new file mode 100644 index 000000000..28ba85ec5 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockAnchor( + @get:JvmName("name") val name: String +) : InputRichBlock { + + override val type: String = InputRichBlockType.ANCHOR + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAnchor + return type == other.type && + name == other.name + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + name.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockAnchor(type=$type, name=$name)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt new file mode 100644 index 000000000..cbb83df2d --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaAnimation +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockAnimation private constructor( + @get:JvmName("animation") val animation: InputMediaAnimation, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(animation: InputMediaAnimation) : this( + animation = animation, + caption = null + ) + + override val type: String = InputRichBlockType.ANIMATION + + override fun inputMedia(): List> = listOf(animation) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAnimation + return type == other.type && + animation == other.animation && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + animation.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockAnimation(type=$type, animation=$animation, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt new file mode 100644 index 000000000..2b001c4ac --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaAudio +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockAudio private constructor( + @get:JvmName("audio") val audio: InputMediaAudio, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(audio: InputMediaAudio) : this( + audio = audio, + caption = null + ) + + override val type: String = InputRichBlockType.AUDIO + + override fun inputMedia(): List> = listOf(audio) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAudio + return type == other.type && + audio == other.audio && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + audio.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockAudio(type=$type, audio=$audio, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt new file mode 100644 index 000000000..de9aad648 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt @@ -0,0 +1,40 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockBlockQuotation private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + credit = null + ) + + override val type: String = InputRichBlockType.BLOCKQUOTE + + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockBlockQuotation + return type == other.type && + blocks.contentEquals(other.blocks) && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockBlockQuotation(type=$type, blocks=${blocks.contentToString()}, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt new file mode 100644 index 000000000..167114ee9 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +class InputRichBlockButtons private constructor( + @get:JvmName("buttons") val buttons: Array, + @get:JvmName("align") var align: String? +) : InputRichBlock { + + constructor(vararg buttons: RichMessageButton) : this( + buttons = arrayOf(*buttons), + align = null + ) + + override val type: String = InputRichBlockType.BUTTONS + + fun align(align: String) = apply { this.align = align } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockButtons + return type == other.type && + buttons.contentEquals(other.buttons) && + align == other.align + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + buttons.contentHashCode() + result = 31 * result + (align?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockButtons(type=$type, buttons=${buttons.contentToString()}, align=$align)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt new file mode 100644 index 000000000..7d03f3756 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt @@ -0,0 +1,40 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockCollage private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + caption = null + ) + + override val type: String = InputRichBlockType.COLLAGE + + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockCollage + return type == other.type && + blocks.contentEquals(other.blocks) && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockCollage(type=$type, blocks=${blocks.contentToString()}, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt new file mode 100644 index 000000000..f855cabf3 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt @@ -0,0 +1,44 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockDetails private constructor( + @get:JvmName("summary") val summary: RichText, + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("isOpen") var isOpen: Boolean? +) : InputRichBlock { + + constructor(summary: RichText, vararg blocks: InputRichBlock) : this( + summary = summary, + blocks = arrayOf(*blocks), + isOpen = null + ) + + override val type: String = InputRichBlockType.DETAILS + + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + + fun isOpen(isOpen: Boolean) = apply { this.isOpen = isOpen } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDetails + return type == other.type && + summary == other.summary && + blocks.contentEquals(other.blocks) && + isOpen == other.isOpen + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + summary.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (isOpen?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockDetails(type=$type, summary=$summary, blocks=${blocks.contentToString()}, isOpen=$isOpen)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt new file mode 100644 index 000000000..9ed312327 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt @@ -0,0 +1,17 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockDivider : InputRichBlock { + + override val type: String = InputRichBlockType.DIVIDER + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDivider + return type == other.type + } + + override fun hashCode(): Int = type.hashCode() + + override fun toString(): String = "InputRichBlockDivider(type=$type)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt new file mode 100644 index 000000000..b5406c3b0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaDocument +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockDocument private constructor( + @get:JvmName("document") val document: InputMediaDocument, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(document: InputMediaDocument) : this( + document = document, + caption = null + ) + + override val type: String = InputRichBlockType.DOCUMENT + + override fun inputMedia(): List> = listOf(document) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDocument + return type == other.type && + document == other.document && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + document.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockDocument(type=$type, document=$document, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt new file mode 100644 index 000000000..18da3070b --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockExpandableBlockQuotation private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + credit = null + ) + + override val type: String = InputRichBlockType.EXPANDABLE_BLOCKQUOTE + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockExpandableBlockQuotation + return type == other.type && + text == other.text && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockExpandableBlockQuotation(type=$type, text=$text, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt new file mode 100644 index 000000000..3b6f44717 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockFooter( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.FOOTER + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockFooter + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockFooter(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt new file mode 100644 index 000000000..ce270d074 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt @@ -0,0 +1,29 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia + +class InputRichBlockList(vararg items: InputRichBlockListItem) : InputRichBlock { + + @get:JvmName("items") val items: Array = arrayOf(*items) + + override val type: String = InputRichBlockType.LIST + + override fun inputMedia(): List> = items.flatMap { it.inputMedia() } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockList + return type == other.type && + items.contentEquals(other.items) + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + items.contentHashCode() + return result + } + + override fun toString(): String = + "InputRichBlockList(type=$type, items=${items.contentToString()})" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt new file mode 100644 index 000000000..97b417842 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt @@ -0,0 +1,56 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia + +class InputRichBlockListItem private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("hasCheckbox") var hasCheckbox: Boolean?, + @get:JvmName("isChecked") var isChecked: Boolean?, + @get:JvmName("value") var value: Int?, + @get:JvmName("type") var type: String? +) { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + hasCheckbox = null, + isChecked = null, + value = null, + type = null + ) + + fun hasCheckbox(hasCheckbox: Boolean) = apply { this.hasCheckbox = hasCheckbox } + + fun isChecked(isChecked: Boolean) = apply { this.isChecked = isChecked } + + fun value(value: Int) = apply { this.value = value } + + fun type(type: String) = apply { this.type = type } + + /** + * The media carried by the blocks of this item, for requests that have to upload them. + */ + fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockListItem + return blocks.contentEquals(other.blocks) && + hasCheckbox == other.hasCheckbox && + isChecked == other.isChecked && + value == other.value && + type == other.type + } + + override fun hashCode(): Int { + var result = blocks.contentHashCode() + result = 31 * result + (hasCheckbox?.hashCode() ?: 0) + result = 31 * result + (isChecked?.hashCode() ?: 0) + result = 31 * result + (value ?: 0) + result = 31 * result + (type?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockListItem(blocks=${blocks.contentToString()}, hasCheckbox=$hasCheckbox, isChecked=$isChecked, value=$value, type=$type)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt new file mode 100644 index 000000000..57af93dbf --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt @@ -0,0 +1,56 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.Location +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockMap private constructor( + @get:JvmName("location") val location: Location, + @get:JvmName("zoom") var zoom: Int?, + @get:JvmName("width") var width: Int?, + @get:JvmName("height") var height: Int?, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(location: Location) : this( + location = location, + zoom = null, + width = null, + height = null, + caption = null + ) + + override val type: String = InputRichBlockType.MAP + + fun zoom(zoom: Int) = apply { this.zoom = zoom } + + fun width(width: Int) = apply { this.width = width } + + fun height(height: Int) = apply { this.height = height } + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockMap + return type == other.type && + location == other.location && + zoom == other.zoom && + width == other.width && + height == other.height && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + location.hashCode() + result = 31 * result + (zoom ?: 0) + result = 31 * result + (width ?: 0) + result = 31 * result + (height ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockMap(type=$type, location=$location, zoom=$zoom, width=$width, height=$height, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt new file mode 100644 index 000000000..bedd3504d --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockMathematicalExpression( + @get:JvmName("expression") val expression: String +) : InputRichBlock { + + override val type: String = InputRichBlockType.MATHEMATICAL_EXPRESSION + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockMathematicalExpression + return type == other.type && + expression == other.expression + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + expression.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockMathematicalExpression(type=$type, expression=$expression)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt new file mode 100644 index 000000000..38c36a66f --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockParagraph( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.PARAGRAPH + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockParagraph + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockParagraph(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt new file mode 100644 index 000000000..43e684d75 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaPhoto +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockPhoto private constructor( + @get:JvmName("photo") val photo: InputMediaPhoto, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(photo: InputMediaPhoto) : this( + photo = photo, + caption = null + ) + + override val type: String = InputRichBlockType.PHOTO + + override fun inputMedia(): List> = listOf(photo) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPhoto + return type == other.type && + photo == other.photo && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + photo.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPhoto(type=$type, photo=$photo, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt new file mode 100644 index 000000000..b846b1fd0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockPreformatted private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("language") var language: String? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + language = null + ) + + override val type: String = InputRichBlockType.PRE + + fun language(language: String) = apply { this.language = language } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPreformatted + return type == other.type && + text == other.text && + language == other.language + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (language?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPreformatted(type=$type, text=$text, language=$language)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt new file mode 100644 index 000000000..654a5f690 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockPullQuotation private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + credit = null + ) + + override val type: String = InputRichBlockType.PULLQUOTE + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPullQuotation + return type == other.type && + text == other.text && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPullQuotation(type=$type, text=$text, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt new file mode 100644 index 000000000..b29a68e0e --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt @@ -0,0 +1,30 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockSectionHeading( + @get:JvmName("text") val text: RichText, + @get:JvmName("size") val size: Int +) : InputRichBlock { + + override val type: String = InputRichBlockType.HEADING + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockSectionHeading + return type == other.type && + text == other.text && + size == other.size + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + size + return result + } + + override fun toString(): String = + "InputRichBlockSectionHeading(type=$type, text=$text, size=$size)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt new file mode 100644 index 000000000..09984a0c0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt @@ -0,0 +1,40 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockSlideshow private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + caption = null + ) + + override val type: String = InputRichBlockType.SLIDESHOW + + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockSlideshow + return type == other.type && + blocks.contentEquals(other.blocks) && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockSlideshow(type=$type, blocks=${blocks.contentToString()}, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt new file mode 100644 index 000000000..e26323587 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt @@ -0,0 +1,56 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockTableCell +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockTable private constructor( + @get:JvmName("cells") val cells: Array>, + @get:JvmName("isBordered") var isBordered: Boolean?, + @get:JvmName("isStriped") var isStriped: Boolean?, + @get:JvmName("isCompact") var isCompact: Boolean?, + @get:JvmName("caption") var caption: RichText? +) : InputRichBlock { + + constructor(cells: Array>) : this( + cells = cells, + isBordered = null, + isStriped = null, + isCompact = null, + caption = null + ) + + override val type: String = InputRichBlockType.TABLE + + fun isBordered(isBordered: Boolean) = apply { this.isBordered = isBordered } + + fun isStriped(isStriped: Boolean) = apply { this.isStriped = isStriped } + + fun isCompact(isCompact: Boolean) = apply { this.isCompact = isCompact } + + fun caption(caption: RichText) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockTable + return type == other.type && + cells.contentDeepEquals(other.cells) && + isBordered == other.isBordered && + isStriped == other.isStriped && + isCompact == other.isCompact && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + cells.contentDeepHashCode() + result = 31 * result + (isBordered?.hashCode() ?: 0) + result = 31 * result + (isStriped?.hashCode() ?: 0) + result = 31 * result + (isCompact?.hashCode() ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockTable(type=$type, cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, isCompact=$isCompact, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt new file mode 100644 index 000000000..a98b43a11 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockThinking( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.THINKING + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockThinking + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockThinking(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt new file mode 100644 index 000000000..ccea407aa --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt @@ -0,0 +1,28 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +object InputRichBlockType { + const val PARAGRAPH = "paragraph" + const val HEADING = "heading" + const val PRE = "pre" + const val FOOTER = "footer" + const val DIVIDER = "divider" + const val MATHEMATICAL_EXPRESSION = "mathematical_expression" + const val ANCHOR = "anchor" + const val LIST = "list" + const val BLOCKQUOTE = "blockquote" + const val EXPANDABLE_BLOCKQUOTE = "expandable_blockquote" + const val PULLQUOTE = "pullquote" + const val COLLAGE = "collage" + const val SLIDESHOW = "slideshow" + const val TABLE = "table" + const val DETAILS = "details" + const val MAP = "map" + const val BUTTONS = "buttons" + const val ANIMATION = "animation" + const val AUDIO = "audio" + const val DOCUMENT = "document" + const val PHOTO = "photo" + const val VIDEO = "video" + const val VOICE_NOTE = "voice_note" + const val THINKING = "thinking" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt new file mode 100644 index 000000000..d4b8968d6 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaVideo +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockVideo private constructor( + @get:JvmName("video") val video: InputMediaVideo, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(video: InputMediaVideo) : this( + video = video, + caption = null + ) + + override val type: String = InputRichBlockType.VIDEO + + override fun inputMedia(): List> = listOf(video) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockVideo + return type == other.type && + video == other.video && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + video.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockVideo(type=$type, video=$video, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt new file mode 100644 index 000000000..ef8323262 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaVoiceNote +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockVoiceNote private constructor( + @get:JvmName("voiceNote") val voiceNote: InputMediaVoiceNote, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(voiceNote: InputMediaVoiceNote) : this( + voiceNote = voiceNote, + caption = null + ) + + override val type: String = InputRichBlockType.VOICE_NOTE + + override fun inputMedia(): List> = listOf(voiceNote) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockVoiceNote + return type == other.type && + voiceNote == other.voiceNote && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + voiceNote.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockVoiceNote(type=$type, voiceNote=$voiceNote, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt new file mode 100644 index 000000000..061641583 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt @@ -0,0 +1,77 @@ +package com.pengrad.telegrambot.model.richmessages + +import com.pengrad.telegrambot.model.WebAppInfo +import com.pengrad.telegrambot.model.request.CopyTextButton +import com.pengrad.telegrambot.model.request.DisabledButton +import com.pengrad.telegrambot.model.request.LoginUrl +import com.pengrad.telegrambot.model.request.SwitchInlineQueryChosenChat +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +data class RichMessageButton @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("style") var style: String? = null, + @get:JvmName("url") var url: String? = null, + @get:JvmName("callbackData") var callbackData: String? = null, + @get:JvmName("webApp") var webApp: WebAppInfo? = null, + @get:JvmName("loginUrl") var loginUrl: LoginUrl? = null, + @get:JvmName("switchInlineQuery") var switchInlineQuery: String? = null, + @get:JvmName("switchInlineQueryCurrentChat") var switchInlineQueryCurrentChat: String? = null, + @get:JvmName("switchInlineQueryChosenChat") var switchInlineQueryChosenChat: SwitchInlineQueryChosenChat? = null, + @get:JvmName("copyText") var copyText: CopyTextButton? = null, + @get:JvmName("disabled") var disabled: DisabledButton? = null +) { + + fun style(style: String): RichMessageButton { + this.style = style + return this + } + + fun url(url: String): RichMessageButton { + this.url = url + return this + } + + fun callbackData(callbackData: String): RichMessageButton { + this.callbackData = callbackData + return this + } + + fun webApp(webApp: WebAppInfo): RichMessageButton { + this.webApp = webApp + return this + } + + fun loginUrl(loginUrl: LoginUrl): RichMessageButton { + this.loginUrl = loginUrl + return this + } + + fun switchInlineQuery(switchInlineQuery: String): RichMessageButton { + this.switchInlineQuery = switchInlineQuery + return this + } + + fun switchInlineQueryCurrentChat(switchInlineQueryCurrentChat: String): RichMessageButton { + this.switchInlineQueryCurrentChat = switchInlineQueryCurrentChat + return this + } + + fun switchInlineQueryChosenChat(switchInlineQueryChosenChat: SwitchInlineQueryChosenChat): RichMessageButton { + this.switchInlineQueryChosenChat = switchInlineQueryChosenChat + return this + } + + fun copyText(text: String): RichMessageButton { + return copyText(CopyTextButton(text)) + } + + fun copyText(copyText: CopyTextButton): RichMessageButton { + this.copyText = copyText + return this + } + + fun disabled(): RichMessageButton { + this.disabled = DisabledButton() + return this + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt new file mode 100644 index 000000000..bccbf43e1 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt @@ -0,0 +1,26 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +class RichBlockButtons( + @get:JvmName("buttons") val buttons: Array, + @get:JvmName("align") val align: String? = null +) : RichBlock { + + override val type: String get() = RichBlockType.BUTTONS + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as RichBlockButtons + return buttons.contentEquals(other.buttons) && align == other.align + } + + override fun hashCode(): Int { + var result = buttons.contentHashCode() + result = 31 * result + (align?.hashCode() ?: 0) + return result + } + + override fun toString(): String = "RichBlockButtons(buttons=${buttons.contentToString()}, align=$align)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt new file mode 100644 index 000000000..5a4d57ed6 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.Document + +data class RichBlockDocument( + @get:JvmName("document") val document: Document, + @get:JvmName("caption") val caption: RichBlockCaption? = null +) : RichBlock { + override val type: String get() = RichBlockType.DOCUMENT +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt new file mode 100644 index 000000000..d50710706 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +data class RichBlockExpandableBlockQuotation( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") val credit: RichText? = null +) : RichBlock { + override val type: String get() = RichBlockType.EXPANDABLE_BLOCKQUOTE +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt index 409520951..4b9bb5d71 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt @@ -6,6 +6,7 @@ class RichBlockTable( @get:JvmName("cells") val cells: Array>, @get:JvmName("isBordered") val isBordered: Boolean? = null, @get:JvmName("isStriped") val isStriped: Boolean? = null, + @get:JvmName("isCompact") val isCompact: Boolean? = null, @get:JvmName("caption") val caption: RichText? = null ) : RichBlock { @@ -18,6 +19,7 @@ class RichBlockTable( return cells.contentDeepEquals(other.cells) && isBordered == other.isBordered && isStriped == other.isStriped && + isCompact == other.isCompact && caption == other.caption } @@ -25,9 +27,10 @@ class RichBlockTable( var result = cells.contentDeepHashCode() result = 31 * result + (isBordered?.hashCode() ?: 0) result = 31 * result + (isStriped?.hashCode() ?: 0) + result = 31 * result + (isCompact?.hashCode() ?: 0) result = 31 * result + (caption?.hashCode() ?: 0) return result } - override fun toString(): String = "RichBlockTable(cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, caption=$caption)" + override fun toString(): String = "RichBlockTable(cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, isCompact=$isCompact, caption=$caption)" } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt index 7408aa18e..c5444939b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt @@ -10,14 +10,17 @@ object RichBlockType { const val ANCHOR = "anchor" const val LIST = "list" const val BLOCKQUOTE = "blockquote" + const val EXPANDABLE_BLOCKQUOTE = "expandable_blockquote" const val PULLQUOTE = "pullquote" const val COLLAGE = "collage" const val SLIDESHOW = "slideshow" const val TABLE = "table" const val DETAILS = "details" const val MAP = "map" + const val BUTTONS = "buttons" const val ANIMATION = "animation" const val AUDIO = "audio" + const val DOCUMENT = "document" const val PHOTO = "photo" const val VIDEO = "video" const val VOICE_NOTE = "voice_note" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt index 57a3191c2..fca392891 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextAnchor( - @get:JvmName("name") val name: String -) : RichText { - override val type: String get() = RichTextType.ANCHOR -} +data class RichTextAnchor @JvmOverloads constructor( + @get:JvmName("name") val name: String, + override val type: String = RichTextType.ANCHOR +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt index 15759d4de..1f3bd9b55 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextAnchorLink( +data class RichTextAnchorLink @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("anchorName") val anchorName: String -) : RichText { - override val type: String get() = RichTextType.ANCHOR_LINK -} + @get:JvmName("anchorName") val anchorName: String, + override val type: String = RichTextType.ANCHOR_LINK +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt index e30a640b1..9eeaa7625 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBankCardNumber( +data class RichTextBankCardNumber @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("bankCardNumber") val bankCardNumber: String -) : RichText { - override val type: String get() = RichTextType.BANK_CARD_NUMBER -} + @get:JvmName("bankCardNumber") val bankCardNumber: String, + override val type: String = RichTextType.BANK_CARD_NUMBER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt index abe838685..b9f0e2f21 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBold( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.BOLD -} +data class RichTextBold @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.BOLD +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt index 2ccfa4815..505788bb3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBotCommand( +data class RichTextBotCommand @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("botCommand") val botCommand: String -) : RichText { - override val type: String get() = RichTextType.BOT_COMMAND -} + @get:JvmName("botCommand") val botCommand: String, + override val type: String = RichTextType.BOT_COMMAND +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt new file mode 100644 index 000000000..2ced1084f --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt @@ -0,0 +1,8 @@ +package com.pengrad.telegrambot.model.richmessages.richtext + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +data class RichTextButton @JvmOverloads constructor( + @get:JvmName("button") val button: RichMessageButton, + override val type: String = RichTextType.BUTTON +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt index 2ee11987f..b1809dfa1 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCashtag( +data class RichTextCashtag @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("cashtag") val cashtag: String -) : RichText { - override val type: String get() = RichTextType.CASHTAG -} + @get:JvmName("cashtag") val cashtag: String, + override val type: String = RichTextType.CASHTAG +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt index a43219bb0..f209f2291 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCode( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.CODE -} +data class RichTextCode @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.CODE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt index 6f35924a2..6ef3ee4e8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCustomEmoji( +data class RichTextCustomEmoji @JvmOverloads constructor( @get:JvmName("customEmojiId") val customEmojiId: String, - @get:JvmName("alternativeText") val alternativeText: String -) : RichText { - override val type: String get() = RichTextType.CUSTOM_EMOJI -} + @get:JvmName("alternativeText") val alternativeText: String, + override val type: String = RichTextType.CUSTOM_EMOJI +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt index ff5c1d82d..a5b2ea274 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt @@ -1,9 +1,8 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextDateTime( +data class RichTextDateTime @JvmOverloads constructor( @get:JvmName("text") val text: RichText, @get:JvmName("unixTime") val unixTime: Long, - @get:JvmName("dateTimeFormat") val dateTimeFormat: String -) : RichText { - override val type: String get() = RichTextType.DATE_TIME -} + @get:JvmName("dateTimeFormat") val dateTimeFormat: String, + override val type: String = RichTextType.DATE_TIME +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt index 4acad159d..a5715d02a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextEmailAddress( +data class RichTextEmailAddress @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("emailAddress") val emailAddress: String -) : RichText { - override val type: String get() = RichTextType.EMAIL_ADDRESS -} + @get:JvmName("emailAddress") val emailAddress: String, + override val type: String = RichTextType.EMAIL_ADDRESS +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt index ccc8dc23b..92159a7fb 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextHashtag( +data class RichTextHashtag @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("hashtag") val hashtag: String -) : RichText { - override val type: String get() = RichTextType.HASHTAG -} + @get:JvmName("hashtag") val hashtag: String, + override val type: String = RichTextType.HASHTAG +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt index d8d19b32b..858bfeec9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextItalic( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.ITALIC -} +data class RichTextItalic @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.ITALIC +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt index 5e964d97c..1c47950aa 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMarked( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.MARKED -} +data class RichTextMarked @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.MARKED +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt index 8cae1cf26..8703c3129 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMathematicalExpression( - @get:JvmName("expression") val expression: String -) : RichText { - override val type: String get() = RichTextType.MATHEMATICAL_EXPRESSION -} +data class RichTextMathematicalExpression @JvmOverloads constructor( + @get:JvmName("expression") val expression: String, + override val type: String = RichTextType.MATHEMATICAL_EXPRESSION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt index d354e0985..67562d890 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMention( +data class RichTextMention @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("username") val username: String -) : RichText { - override val type: String get() = RichTextType.MENTION -} + @get:JvmName("username") val username: String, + override val type: String = RichTextType.MENTION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt index 60a5b71b6..757bdee0b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextPhoneNumber( +data class RichTextPhoneNumber @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("phoneNumber") val phoneNumber: String -) : RichText { - override val type: String get() = RichTextType.PHONE_NUMBER -} + @get:JvmName("phoneNumber") val phoneNumber: String, + override val type: String = RichTextType.PHONE_NUMBER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt index 09700dbc0..f37a0d20a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextReference( +data class RichTextReference @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("name") val name: String -) : RichText { - override val type: String get() = RichTextType.REFERENCE -} + @get:JvmName("name") val name: String, + override val type: String = RichTextType.REFERENCE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt index 35f1a3c90..7f5a2c215 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextReferenceLink( +data class RichTextReferenceLink @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("referenceName") val referenceName: String -) : RichText { - override val type: String get() = RichTextType.REFERENCE_LINK -} + @get:JvmName("referenceName") val referenceName: String, + override val type: String = RichTextType.REFERENCE_LINK +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt index e3138bb41..19faf78db 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSpoiler( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SPOILER -} +data class RichTextSpoiler @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SPOILER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt index 932a2a1fe..7817a7dca 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextStrikethrough( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.STRIKETHROUGH -} +data class RichTextStrikethrough @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.STRIKETHROUGH +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt index 118ad673a..8c3bd322c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSubscript( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SUBSCRIPT -} +data class RichTextSubscript @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SUBSCRIPT +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt index 5118f307f..61ca5ac97 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSuperscript( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SUPERSCRIPT -} +data class RichTextSuperscript @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SUPERSCRIPT +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt index f3d0c640e..3d9511bd7 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt @@ -2,9 +2,8 @@ package com.pengrad.telegrambot.model.richmessages.richtext import com.pengrad.telegrambot.model.User -data class RichTextTextMention( +data class RichTextTextMention @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("user") val user: User -) : RichText { - override val type: String get() = RichTextType.TEXT_MENTION -} + @get:JvmName("user") val user: User, + override val type: String = RichTextType.TEXT_MENTION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt index 429d79d9a..10084a90a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt @@ -22,6 +22,7 @@ object RichTextType { const val HASHTAG = "hashtag" const val CASHTAG = "cashtag" const val BOT_COMMAND = "bot_command" + const val BUTTON = "button" const val ANCHOR = "anchor" const val ANCHOR_LINK = "anchor_link" const val REFERENCE = "reference" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt index fb0fba3e0..5855182ec 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextUnderline( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.UNDERLINE -} +data class RichTextUnderline @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.UNDERLINE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt index 0fda6a550..72ea1cdd0 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextUrl( +data class RichTextUrl @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("url") val url: String -) : RichText { - override val type: String get() = RichTextType.URL -} + @get:JvmName("url") val url: String, + override val type: String = RichTextType.URL +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java index 4a3aeb281..6d4614483 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java @@ -3,17 +3,22 @@ import com.pengrad.telegrambot.model.LinkPreviewOptions; import com.pengrad.telegrambot.model.MessageEntity; import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; +import com.pengrad.telegrambot.model.request.InputMedia; import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage; import com.pengrad.telegrambot.response.BaseResponse; import com.pengrad.telegrambot.response.SendResponse; +import java.util.Map; + /** * Stas Parshin * 07 May 2016 */ public class EditMessageText extends BaseRequest { + private boolean isMultipart = false; + public EditMessageText(Object chatId, int messageId, String text) { super(SendResponse.class); add("chat_id", chatId).add("message_id", messageId).add("text", text); @@ -27,11 +32,32 @@ public EditMessageText(String inlineMessageId, String text) { public EditMessageText(Object chatId, int messageId, InputRichMessage richMessage) { super(SendResponse.class); add("chat_id", chatId).add("message_id", messageId).add("rich_message", richMessage); + addAttachments(richMessage); } public EditMessageText(String inlineMessageId, InputRichMessage richMessage) { super(BaseResponse.class); add("inline_message_id", inlineMessageId).add("rich_message", richMessage); + addAttachments(richMessage); + } + + private void addAttachments(InputRichMessage richMessage) { + for (InputMedia m : richMessage.inputMedia()) { + Map attachments = m.getAttachments(); + if (attachments != null && attachments.size() > 0) { + addAll(attachments); + isMultipart = true; + } + if (m.inputFile() != null) { + add(m.getInputFileId(), m.inputFile()); + isMultipart = true; + } + } + } + + @Override + public boolean isMultipart() { + return isMultipart; } public EditMessageText parseMode(ParseMode parseMode) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java b/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java index 240cd84ce..c622c452e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java @@ -80,4 +80,8 @@ public PromoteChatMember canPromoteMembers(boolean canPromoteMembers) { public PromoteChatMember canManageTags(boolean canManageTags) { return add("can_manage_tags", canManageTags); } + + public PromoteChatMember canSendWelcomeMessages(boolean canSendWelcomeMessages) { + return add("can_send_welcome_messages", canSendWelcomeMessages); + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt index c7995c243..b2015867f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -102,6 +103,7 @@ class SendAnimation private constructor( var duration: Int? by optionalRequestParameter() var width: Int? by optionalRequestParameter() var height: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = apply { this.caption = caption } @@ -121,4 +123,5 @@ class SendAnimation private constructor( fun height(height: Int) = apply { this.height = height } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt index c47f2931c..30f44bbdf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -99,6 +100,7 @@ class SendAudio private constructor( var duration: Int? by optionalRequestParameter() var performer: String? by optionalRequestParameter() var title: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -114,4 +116,5 @@ class SendAudio private constructor( fun title(title: String) = applySelf { this.title = title } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt index 293ba495d..aaa1ae88e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -44,9 +45,11 @@ class SendContact private constructor( var lastName: String? by optionalRequestParameter() var vcard: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun lastName(lastName: String) = apply { this.lastName = lastName } fun vcard(vcard: String) = apply { this.vcard = vcard } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt index 07415bf77..f755f0e42 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -98,6 +99,7 @@ class SendDocument private constructor( var captionEntities: List? by optionalRequestParameter() var disableContentTypeDetection: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -109,4 +111,5 @@ class SendDocument private constructor( fun disableContentTypeDetection(disableContentTypeDetection: Boolean) = applySelf { this.disableContentTypeDetection = disableContentTypeDetection } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt index 4fee6d647..db0632a96 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -208,6 +209,7 @@ class SendLivePhoto private constructor( var captionEntities: List? by optionalRequestParameter() var showCaptionAboveMedia: Boolean? by optionalRequestParameter() var hasSpoiler: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } @@ -215,4 +217,6 @@ class SendLivePhoto private constructor( fun captionEntities(vararg captionEntities: MessageEntity) = applySelf { this.captionEntities = captionEntities.toList() } fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = applySelf { this.showCaptionAboveMedia = showCaptionAboveMedia } fun hasSpoiler(hasSpoiler: Boolean) = applySelf { this.hasSpoiler = hasSpoiler } + + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt index 118852969..be7ed73b6 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -46,6 +47,7 @@ class SendLocation private constructor( var livePeriod: Int? by optionalRequestParameter() var heading: Int? by optionalRequestParameter() var proximityAlertRadius: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun horizontalAccuracy(horizontalAccuracy: Float) = applySelf { this.horizontalAccuracy = horizontalAccuracy } @@ -55,4 +57,5 @@ class SendLocation private constructor( fun proximityAlertRadius(proximityAlertRadius: Int) = applySelf { this.proximityAlertRadius = proximityAlertRadius } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt index 92e1754f7..aca955d4d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt @@ -2,6 +2,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.LinkPreviewOptions import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -43,6 +44,7 @@ class SendMessage private constructor( var parseMode: ParseMode? by optionalRequestParameter() var entities: List? by optionalRequestParameter() var linkPreviewOptions: LinkPreviewOptions? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } @@ -52,4 +54,5 @@ class SendMessage private constructor( fun linkPreviewOptions(linkPreviewOptions: LinkPreviewOptions) = applySelf { this.linkPreviewOptions = linkPreviewOptions} + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt index 428f4445f..41b9f9f94 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt @@ -22,6 +22,8 @@ class SendMessageDraft( var messageThreadId: Long? by optionalRequestParameter() var parseMode: ParseMode? by optionalRequestParameter() var entities: List? by optionalRequestParameter() + var canStop: Boolean? by optionalRequestParameter() + var keepOnStop: Boolean? by optionalRequestParameter() fun text(text: String) = applySelf { this.text = text } @@ -31,4 +33,8 @@ class SendMessageDraft( fun entities(entities: List) = applySelf { this.entities = entities } + fun canStop(canStop: Boolean) = applySelf { this.canStop = canStop } + + fun keepOnStop(keepOnStop: Boolean) = applySelf { this.keepOnStop = keepOnStop } + } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt index 97eeee493..031fd37d4 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -97,6 +98,7 @@ class SendPhoto private constructor( var captionEntities: List? by optionalRequestParameter() var showCaptionAboveMedia: Boolean? by optionalRequestParameter() var hasSpoiler: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -110,4 +112,5 @@ class SendPhoto private constructor( fun hasSpoiler(hasSpoiler: Boolean) = applySelf { this.hasSpoiler = hasSpoiler } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt index b0a933c43..a2a266ab0 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import java.io.File @@ -91,7 +92,9 @@ class SendSticker private constructor( } var emoji: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun emoji(emoji: String) = applySelf { this.emoji = emoji } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt index 748103da9..c69aaac36 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -75,6 +76,7 @@ class SendVenue private constructor( var googlePlaceId: String? by optionalRequestParameter() var googlePlaceType: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun foursquareId(foursquareId: String) = applySelf { this.foursquareId = foursquareId } @@ -84,4 +86,5 @@ class SendVenue private constructor( fun googlePlaceType(googlePlaceType: String) = applySelf { this.googlePlaceType = googlePlaceType } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt index a0c5c2f10..05470774b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -109,6 +110,7 @@ class SendVideo private constructor( var hasSpoiler: Boolean? by optionalRequestParameter() var supportsStreaming: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun duration(duration: Int) = applySelf { this.duration = duration } @@ -138,4 +140,5 @@ class SendVideo private constructor( fun supportsStreaming(supportsStreaming: Boolean) = applySelf { this.supportsStreaming = supportsStreaming } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt index 28862020d..4957fd739 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import java.io.File @@ -92,9 +93,11 @@ class SendVideoNote private constructor( var duration: Int? by optionalRequestParameter() var length: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun duration(duration: Int) = apply { this.duration = duration } fun length(length: Int) = apply { this.length = length } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt index 44fd60f42..a504d604e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -96,6 +97,7 @@ class SendVoice private constructor( var parseMode: ParseMode? by optionalRequestParameter() var captionEntities: List? by optionalRequestParameter() var duration: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -107,4 +109,5 @@ class SendVoice private constructor( fun duration(duration: Int) = applySelf { this.duration = duration } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt new file mode 100644 index 000000000..4160dbb41 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt @@ -0,0 +1,34 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class DeleteEphemeralMessage private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt new file mode 100644 index 000000000..27cbe8d0a --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt @@ -0,0 +1,55 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class EditEphemeralMessageCaption private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + + var caption: String? by optionalRequestParameter() + var parseMode: ParseMode? by optionalRequestParameter() + var captionEntities: List? by optionalRequestParameter() + var showCaptionAboveMedia: Boolean? by optionalRequestParameter() + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + fun caption(caption: String) = applySelf { this.caption = caption } + + fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } + + fun captionEntities(captionEntities: List) = applySelf { this.captionEntities = captionEntities } + + fun captionEntities(vararg captionEntities: MessageEntity) = captionEntities(captionEntities.toList()) + + fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = applySelf { this.showCaptionAboveMedia = showCaptionAboveMedia } + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt new file mode 100644 index 000000000..974b9af96 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt @@ -0,0 +1,64 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class EditEphemeralMessageMedia private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*> +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, media: InputMedia<*>) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + media = media + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, media: InputMedia<*>) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + media = media + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + val media: InputMedia<*> by requestParameter(media) + + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + private var multipart = false + + init { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + + override fun isMultipart() = multipart + + override fun getFileName(): String = media.fileName + + override fun getContentType(): String = media.contentType + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt new file mode 100644 index 000000000..e81545371 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt @@ -0,0 +1,39 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class EditEphemeralMessageReplyMarkup private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt new file mode 100644 index 000000000..2bec44088 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt @@ -0,0 +1,98 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.LinkPreviewOptions +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class EditEphemeralMessageText private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String?, + richMessage: InputRichMessage? +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, text: String) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = text, + richMessage = null + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, text: String) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = text, + richMessage = null + ) + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, richMessage: InputRichMessage) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = null, + richMessage = richMessage + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, richMessage: InputRichMessage) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = null, + richMessage = richMessage + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + val text: String? by optionalRequestParameter(text) + val richMessage: InputRichMessage? by optionalRequestParameter(richMessage) + + var parseMode: ParseMode? by optionalRequestParameter() + var entities: List? by optionalRequestParameter() + var linkPreviewOptions: LinkPreviewOptions? by optionalRequestParameter() + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + private var multipart = false + + init { + richMessage?.inputMedia()?.forEach { media -> + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } + + fun entities(entities: List) = applySelf { this.entities = entities } + + fun entities(vararg entities: MessageEntity) = entities(entities.toList()) + + fun linkPreviewOptions(linkPreviewOptions: LinkPreviewOptions) = applySelf { this.linkPreviewOptions = linkPreviewOptions } + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + + override fun isMultipart() = multipart + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt index 72fa1f9ff..845b5a1b3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt @@ -1,8 +1,10 @@ package com.pengrad.telegrambot.request.richmessages +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage import com.pengrad.telegrambot.request.AbstractSendRequest import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @Suppress("unused") @@ -37,4 +39,26 @@ class SendRichMessage private constructor( } val richMessage: InputRichMessage by requestParameter(richMessage) + + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() + + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } + + private var multipart = false + + init { + for (media in richMessage.inputMedia()) { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + override fun isMultipart() = multipart } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt index 5285729d7..a7c05a687 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt @@ -18,6 +18,30 @@ class SendRichMessageDraft( val richMessage: InputRichMessage by requestParameter(richMessage) var messageThreadId: Long? by optionalRequestParameter() + var canStop: Boolean? by optionalRequestParameter() + var keepOnStop: Boolean? by optionalRequestParameter() fun messageThreadId(messageThreadId: Long) = applySelf { this.messageThreadId = messageThreadId } + + fun canStop(canStop: Boolean) = applySelf { this.canStop = canStop } + + fun keepOnStop(keepOnStop: Boolean) = applySelf { this.keepOnStop = keepOnStop } + + private var multipart = false + + init { + for (media in richMessage.inputMedia()) { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + override fun isMultipart() = multipart } diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt index 53b812639..c349ad240 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt @@ -19,14 +19,17 @@ object RichBlockTypeAdapter : JsonDeserializer { RichBlockType.ANCHOR to RichBlockAnchor::class, RichBlockType.LIST to RichBlockList::class, RichBlockType.BLOCKQUOTE to RichBlockBlockQuotation::class, + RichBlockType.EXPANDABLE_BLOCKQUOTE to RichBlockExpandableBlockQuotation::class, RichBlockType.PULLQUOTE to RichBlockPullQuotation::class, RichBlockType.COLLAGE to RichBlockCollage::class, RichBlockType.SLIDESHOW to RichBlockSlideshow::class, RichBlockType.TABLE to RichBlockTable::class, RichBlockType.DETAILS to RichBlockDetails::class, RichBlockType.MAP to RichBlockMap::class, + RichBlockType.BUTTONS to RichBlockButtons::class, RichBlockType.ANIMATION to RichBlockAnimation::class, RichBlockType.AUDIO to RichBlockAudio::class, + RichBlockType.DOCUMENT to RichBlockDocument::class, RichBlockType.PHOTO to RichBlockPhoto::class, RichBlockType.VIDEO to RichBlockVideo::class, RichBlockType.VOICE_NOTE to RichBlockVoiceNote::class, diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt index a7fc39756..040ac8139 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt @@ -1,13 +1,17 @@ package com.pengrad.telegrambot.utility.gson +import com.google.gson.JsonArray import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializer import com.google.gson.JsonElement import com.google.gson.JsonParseException +import com.google.gson.JsonPrimitive +import com.google.gson.JsonSerializationContext +import com.google.gson.JsonSerializer import com.pengrad.telegrambot.model.richmessages.richtext.* import java.lang.reflect.Type -object RichTextTypeAdapter : JsonDeserializer { +object RichTextTypeAdapter : JsonDeserializer, JsonSerializer { private val typeMapping = mapOf( RichTextType.BOLD to RichTextBold::class, @@ -31,6 +35,7 @@ object RichTextTypeAdapter : JsonDeserializer { RichTextType.HASHTAG to RichTextHashtag::class, RichTextType.CASHTAG to RichTextCashtag::class, RichTextType.BOT_COMMAND to RichTextBotCommand::class, + RichTextType.BUTTON to RichTextButton::class, RichTextType.ANCHOR to RichTextAnchor::class, RichTextType.ANCHOR_LINK to RichTextAnchorLink::class, RichTextType.REFERENCE to RichTextReference::class, @@ -57,4 +62,14 @@ object RichTextTypeAdapter : JsonDeserializer { else -> RichTextUnknown(RichTextType.UNKNOWN) } } + + override fun serialize(src: RichText, type: Type, context: JsonSerializationContext): JsonElement { + return when (src) { + is RichTextPlain -> JsonPrimitive(src.text) + is RichTextArray -> JsonArray().apply { + src.elements.forEach { add(context.serialize(it, RichText::class.java)) } + } + else -> context.serialize(src, src.javaClass) + } + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt new file mode 100644 index 000000000..922d6941c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt @@ -0,0 +1,19 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.ephemeral.DeleteEphemeralMessage +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.deleteEphemeralMessage( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: DeleteEphemeralMessage.() -> Unit = {} +) = this.execute(DeleteEphemeralMessage(chatId, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.deleteEphemeralMessage( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: DeleteEphemeralMessage.() -> Unit = {} +) = this.execute(DeleteEphemeralMessage(channelUsername, receiverUserId, ephemeralMessageId), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt new file mode 100644 index 000000000..69d11161b --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageCaption +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageCaption( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + caption: String, + modifier: EditEphemeralMessageCaption.() -> Unit = {} +) = this.execute(EditEphemeralMessageCaption(chatId, receiverUserId, ephemeralMessageId)) { + caption(caption) + modifier() +} + +inline fun TelegramAware.editEphemeralMessageCaption( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + caption: String, + modifier: EditEphemeralMessageCaption.() -> Unit = {} +) = this.execute(EditEphemeralMessageCaption(channelUsername, receiverUserId, ephemeralMessageId)) { + caption(caption) + modifier() +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt new file mode 100644 index 000000000..b57513a3c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt @@ -0,0 +1,22 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageMedia +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageMedia( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*>, + modifier: EditEphemeralMessageMedia.() -> Unit = {} +) = this.execute(EditEphemeralMessageMedia(chatId, receiverUserId, ephemeralMessageId, media), modifier) + +inline fun TelegramAware.editEphemeralMessageMedia( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*>, + modifier: EditEphemeralMessageMedia.() -> Unit = {} +) = this.execute(EditEphemeralMessageMedia(channelUsername, receiverUserId, ephemeralMessageId, media), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt new file mode 100644 index 000000000..9ea5751a6 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt @@ -0,0 +1,40 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageReplyMarkup +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageReplyMarkup( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.execute(EditEphemeralMessageReplyMarkup(chatId, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.editEphemeralMessageReplyMarkup( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.execute(EditEphemeralMessageReplyMarkup(channelUsername, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.removeEphemeralInlineKeyboard( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.editEphemeralMessageReplyMarkup(chatId, receiverUserId, ephemeralMessageId) { + replyMarkup(InlineKeyboardMarkup()) + modifier() +} + +inline fun TelegramAware.removeEphemeralInlineKeyboard( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.editEphemeralMessageReplyMarkup(channelUsername, receiverUserId, ephemeralMessageId) { + replyMarkup(InlineKeyboardMarkup()) + modifier() +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt new file mode 100644 index 000000000..321048ed1 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageText +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageText( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(chatId, receiverUserId, ephemeralMessageId, text), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(channelUsername, receiverUserId, ephemeralMessageId, text), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + richMessage: InputRichMessage, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(chatId, receiverUserId, ephemeralMessageId, richMessage), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + richMessage: InputRichMessage, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(channelUsername, receiverUserId, ephemeralMessageId, richMessage), modifier) diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt index 51ce8cccc..d848bf0d7 100644 --- a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt +++ b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt @@ -7,6 +7,9 @@ import com.pengrad.telegrambot.model.message.MaybeInaccessibleMessage import com.pengrad.telegrambot.model.request.InlineKeyboardButton import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +import com.pengrad.telegrambot.model.request.richmessages.richblock.InputRichBlockParagraph +import com.pengrad.telegrambot.model.richmessages.RichMessageButton import com.pengrad.telegrambot.passport.Credentials import com.pengrad.telegrambot.passport.decrypt.Decrypt import nl.jqno.equalsverifier.EqualsVerifier @@ -37,7 +40,9 @@ class ModelTest { val excludedPackages = listOf( ParseMode::class, BotCommandScope::class, - Decrypt::class + Decrypt::class, + InputRichMessage::class, + InputRichBlockParagraph::class ).map { it.java.`package`.name } classes.addAll(Reflections(packages, SubTypesScanner(false)) @@ -91,6 +96,11 @@ class ModelTest { verifierApi.withIgnoredFields("forum_topic_reopened") verifierApi.withIgnoredFields("general_forum_topic_hidden") verifierApi.withIgnoredFields("general_forum_topic_unhidden") + verifierApi.withIgnoredFields("community_chat_removed") + } + + if (c == InlineKeyboardButton::class.java || c == RichMessageButton::class.java) { + verifierApi.withIgnoredFields("disabled") } verifierApi.verify() diff --git a/pom.xml b/pom.xml index 41763de98..4bc141524 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 com.github.pengrad java-telegram-bot-api - 10.1.0 + 10.3.0 JavaTelegramBotApi Java API for Telegram Bot API https://github.com/pengrad/java-telegram-bot-api/