From c70ffd095a6de5cd5b872796a0d82a8c5afc1511 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 20 Jul 2024 17:22:25 +0300 Subject: Initial commit --- src/types/Animation.zig | 11 +++ src/types/Audio.zig | 11 +++ src/types/BotName.zig | 1 + src/types/BusinessConnection.zig | 8 ++ src/types/BusinessMessagesDeleted.zig | 5 + src/types/CallbackGame.zig | 1 + src/types/CallbackQuery.zig | 10 ++ src/types/Chat.zig | 14 +++ src/types/ChatBackground.zig | 3 + src/types/ChatBoost.zig | 6 ++ src/types/ChatBoostAdded.zig | 1 + src/types/ChatBoostRemoved.zig | 7 ++ src/types/ChatBoostUpdated.zig | 5 + src/types/ChatInviteLink.zig | 11 +++ src/types/ChatJoinRequest.zig | 10 ++ src/types/ChatMemberUpdated.zig | 13 +++ src/types/ChatShared.zig | 7 ++ src/types/ChosenInlineResult.zig | 8 ++ src/types/Contact.zig | 5 + src/types/Dice.zig | 2 + src/types/Document.zig | 8 ++ src/types/EditMessageTextParams.zig | 16 ++++ src/types/EncryptedCredentials.zig | 3 + src/types/EncryptedPassportElement.zig | 30 ++++++ src/types/ExternalReplyInfo.zig | 47 ++++++++++ src/types/File.zig | 4 + src/types/ForumTopicClosed.zig | 1 + src/types/ForumTopicCreated.zig | 3 + src/types/ForumTopicEdited.zig | 2 + src/types/ForumTopicReopened.zig | 1 + src/types/Game.zig | 10 ++ src/types/GeneralForumTopicHidden.zig | 1 + src/types/GeneralForumTopicUnhidden.zig | 1 + src/types/GetMyNameParams.zig | 1 + src/types/GetUpdatesParams.zig | 4 + src/types/Giveaway.zig | 10 ++ src/types/GiveawayCompleted.zig | 5 + src/types/GiveawayCreated.zig | 1 + src/types/GiveawayWinners.zig | 14 +++ src/types/InlineKeyboardButton.zig | 15 +++ src/types/InlineKeyboardMarkup.zig | 3 + src/types/InlineQuery.zig | 17 ++++ src/types/Invoice.zig | 5 + src/types/LinkPreviewOptions.zig | 5 + src/types/Location.zig | 6 ++ src/types/LoginUrl.zig | 4 + src/types/MaskPosition.zig | 11 +++ src/types/Message.zig | 139 ++++++++++++++++++++++++++++ src/types/MessageAutoDeleteTimerChanged.zig | 1 + src/types/MessageEntity.zig | 66 +++++++++++++ src/types/MessageReactionCountUpdated.zig | 7 ++ src/types/MessageReactionUpdated.zig | 11 +++ src/types/OrderInfo.zig | 6 ++ src/types/PaidMediaInfo.zig | 4 + src/types/PassportData.zig | 5 + src/types/PassportFile.zig | 4 + src/types/PhotoSize.zig | 5 + src/types/Poll.zig | 22 +++++ src/types/PollAnswer.zig | 7 ++ src/types/PollOption.zig | 5 + src/types/PreCheckoutQuery.zig | 10 ++ src/types/ProximityAlertTriggered.zig | 5 + src/types/ReactionCount.zig | 4 + src/types/RefundedPayment.zig | 5 + src/types/ReplyParameters.zig | 9 ++ src/types/ResponseParameters.zig | 2 + src/types/SendMessageParams.zig | 18 ++++ src/types/SetMyNameParams.zig | 2 + src/types/SharedUser.zig | 7 ++ src/types/ShippingAddress.zig | 6 ++ src/types/ShippingQuery.zig | 7 ++ src/types/Sticker.zig | 25 +++++ src/types/Story.zig | 4 + src/types/SuccessfulPayment.zig | 9 ++ src/types/SwitchInlineQueryChosenChat.zig | 5 + src/types/TextQuote.zig | 6 ++ src/types/Update.zig | 41 ++++++++ src/types/User.zig | 32 +++++++ src/types/UsersShared.zig | 4 + src/types/Venue.zig | 9 ++ src/types/Video.zig | 11 +++ src/types/VideoChatEnded.zig | 1 + src/types/VideoChatParticipantsInvited.zig | 3 + src/types/VideoChatScheduled.zig | 1 + src/types/VideoChatStarted.zig | 1 + src/types/VideoNote.zig | 8 ++ src/types/Voice.zig | 5 + src/types/WebAppData.zig | 2 + src/types/WebAppInfo.zig | 1 + src/types/WriteAccessAllowed.zig | 3 + src/types/background_fill.zig | 17 ++++ src/types/background_type.zig | 30 ++++++ src/types/chat_boost_source.zig | 20 ++++ src/types/chat_member.zig | 63 +++++++++++++ src/types/message_origin.zig | 29 ++++++ src/types/paid_media.zig | 21 +++++ src/types/parse_mode.zig | 5 + src/types/reaction_type.zig | 13 +++ 98 files changed, 1093 insertions(+) create mode 100644 src/types/Animation.zig create mode 100644 src/types/Audio.zig create mode 100644 src/types/BotName.zig create mode 100644 src/types/BusinessConnection.zig create mode 100644 src/types/BusinessMessagesDeleted.zig create mode 100644 src/types/CallbackGame.zig create mode 100644 src/types/CallbackQuery.zig create mode 100644 src/types/Chat.zig create mode 100644 src/types/ChatBackground.zig create mode 100644 src/types/ChatBoost.zig create mode 100644 src/types/ChatBoostAdded.zig create mode 100644 src/types/ChatBoostRemoved.zig create mode 100644 src/types/ChatBoostUpdated.zig create mode 100644 src/types/ChatInviteLink.zig create mode 100644 src/types/ChatJoinRequest.zig create mode 100644 src/types/ChatMemberUpdated.zig create mode 100644 src/types/ChatShared.zig create mode 100644 src/types/ChosenInlineResult.zig create mode 100644 src/types/Contact.zig create mode 100644 src/types/Dice.zig create mode 100644 src/types/Document.zig create mode 100644 src/types/EditMessageTextParams.zig create mode 100644 src/types/EncryptedCredentials.zig create mode 100644 src/types/EncryptedPassportElement.zig create mode 100644 src/types/ExternalReplyInfo.zig create mode 100644 src/types/File.zig create mode 100644 src/types/ForumTopicClosed.zig create mode 100644 src/types/ForumTopicCreated.zig create mode 100644 src/types/ForumTopicEdited.zig create mode 100644 src/types/ForumTopicReopened.zig create mode 100644 src/types/Game.zig create mode 100644 src/types/GeneralForumTopicHidden.zig create mode 100644 src/types/GeneralForumTopicUnhidden.zig create mode 100644 src/types/GetMyNameParams.zig create mode 100644 src/types/GetUpdatesParams.zig create mode 100644 src/types/Giveaway.zig create mode 100644 src/types/GiveawayCompleted.zig create mode 100644 src/types/GiveawayCreated.zig create mode 100644 src/types/GiveawayWinners.zig create mode 100644 src/types/InlineKeyboardButton.zig create mode 100644 src/types/InlineKeyboardMarkup.zig create mode 100644 src/types/InlineQuery.zig create mode 100644 src/types/Invoice.zig create mode 100644 src/types/LinkPreviewOptions.zig create mode 100644 src/types/Location.zig create mode 100644 src/types/LoginUrl.zig create mode 100644 src/types/MaskPosition.zig create mode 100644 src/types/Message.zig create mode 100644 src/types/MessageAutoDeleteTimerChanged.zig create mode 100644 src/types/MessageEntity.zig create mode 100644 src/types/MessageReactionCountUpdated.zig create mode 100644 src/types/MessageReactionUpdated.zig create mode 100644 src/types/OrderInfo.zig create mode 100644 src/types/PaidMediaInfo.zig create mode 100644 src/types/PassportData.zig create mode 100644 src/types/PassportFile.zig create mode 100644 src/types/PhotoSize.zig create mode 100644 src/types/Poll.zig create mode 100644 src/types/PollAnswer.zig create mode 100644 src/types/PollOption.zig create mode 100644 src/types/PreCheckoutQuery.zig create mode 100644 src/types/ProximityAlertTriggered.zig create mode 100644 src/types/ReactionCount.zig create mode 100644 src/types/RefundedPayment.zig create mode 100644 src/types/ReplyParameters.zig create mode 100644 src/types/ResponseParameters.zig create mode 100644 src/types/SendMessageParams.zig create mode 100644 src/types/SetMyNameParams.zig create mode 100644 src/types/SharedUser.zig create mode 100644 src/types/ShippingAddress.zig create mode 100644 src/types/ShippingQuery.zig create mode 100644 src/types/Sticker.zig create mode 100644 src/types/Story.zig create mode 100644 src/types/SuccessfulPayment.zig create mode 100644 src/types/SwitchInlineQueryChosenChat.zig create mode 100644 src/types/TextQuote.zig create mode 100644 src/types/Update.zig create mode 100644 src/types/User.zig create mode 100644 src/types/UsersShared.zig create mode 100644 src/types/Venue.zig create mode 100644 src/types/Video.zig create mode 100644 src/types/VideoChatEnded.zig create mode 100644 src/types/VideoChatParticipantsInvited.zig create mode 100644 src/types/VideoChatScheduled.zig create mode 100644 src/types/VideoChatStarted.zig create mode 100644 src/types/VideoNote.zig create mode 100644 src/types/Voice.zig create mode 100644 src/types/WebAppData.zig create mode 100644 src/types/WebAppInfo.zig create mode 100644 src/types/WriteAccessAllowed.zig create mode 100644 src/types/background_fill.zig create mode 100644 src/types/background_type.zig create mode 100644 src/types/chat_boost_source.zig create mode 100644 src/types/chat_member.zig create mode 100644 src/types/message_origin.zig create mode 100644 src/types/paid_media.zig create mode 100644 src/types/parse_mode.zig create mode 100644 src/types/reaction_type.zig (limited to 'src/types') diff --git a/src/types/Animation.zig b/src/types/Animation.zig new file mode 100644 index 0000000..f5d6efc --- /dev/null +++ b/src/types/Animation.zig @@ -0,0 +1,11 @@ +const PhotoSize = @import("PhotoSize.zig"); + +file_id: []const u8, +file_unique_id: []const u8, +width: u64, +height: u64, +duration: u64, +thumbnail: ?[]PhotoSize = null, +file_name: ?[]const u8 = null, +mime_type: ?[]const u8 = null, +file_size: ?u64 = null, diff --git a/src/types/Audio.zig b/src/types/Audio.zig new file mode 100644 index 0000000..1914088 --- /dev/null +++ b/src/types/Audio.zig @@ -0,0 +1,11 @@ +const PhotoSize = @import("PhotoSize.zig"); + +file_id: []const u8, +file_unique_id: []const u8, +duration: u64, +performer: ?[]const u8 = null, +title: ?[]const u8 = null, +file_name: ?[]const u8 = null, +mime_type: ?[]const u8 = null, +file_size: ?u64 = null, +thumbnail: ?PhotoSize = null, diff --git a/src/types/BotName.zig b/src/types/BotName.zig new file mode 100644 index 0000000..61a2cb6 --- /dev/null +++ b/src/types/BotName.zig @@ -0,0 +1 @@ +name: []const u8, diff --git a/src/types/BusinessConnection.zig b/src/types/BusinessConnection.zig new file mode 100644 index 0000000..0801235 --- /dev/null +++ b/src/types/BusinessConnection.zig @@ -0,0 +1,8 @@ +const User = @import("User.zig"); + +id: []const u8, +user: User, +user_chat_id: i64, +date: u64, +can_reply: bool, +is_enabled: bool, diff --git a/src/types/BusinessMessagesDeleted.zig b/src/types/BusinessMessagesDeleted.zig new file mode 100644 index 0000000..ef55793 --- /dev/null +++ b/src/types/BusinessMessagesDeleted.zig @@ -0,0 +1,5 @@ +const Chat = @import("Chat.zig"); + +business_connection_id: []const u8, +chat: Chat, +message_ids: []u64, diff --git a/src/types/CallbackGame.zig b/src/types/CallbackGame.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/CallbackGame.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/CallbackQuery.zig b/src/types/CallbackQuery.zig new file mode 100644 index 0000000..8fb96c3 --- /dev/null +++ b/src/types/CallbackQuery.zig @@ -0,0 +1,10 @@ +const MaybeInaccessibleMessage = @import("Message.zig"); +const User = @import("User.zig"); + +id: []const u8, +from: User, +message: ?MaybeInaccessibleMessage = null, +inline_message_id: ?[]const u8 = null, +chat_instance: []const u8, +data: ?[]const u8 = null, +game_short_name: ?[]const u8 = null, diff --git a/src/types/Chat.zig b/src/types/Chat.zig new file mode 100644 index 0000000..f44e480 --- /dev/null +++ b/src/types/Chat.zig @@ -0,0 +1,14 @@ +pub const Type = enum { + private, + group, + supergroup, + channel, +}; + +id: i64, +type: Type, +title: ?[]const u8 = null, +username: ?[]const u8 = null, +first_name: ?[]const u8 = null, +last_name: ?[]const u8 = null, +is_forum: bool = false, diff --git a/src/types/ChatBackground.zig b/src/types/ChatBackground.zig new file mode 100644 index 0000000..34d2e15 --- /dev/null +++ b/src/types/ChatBackground.zig @@ -0,0 +1,3 @@ +const BackgroundType = @import("background_type.zig").BackgroundType; + +type: BackgroundType, diff --git a/src/types/ChatBoost.zig b/src/types/ChatBoost.zig new file mode 100644 index 0000000..353805b --- /dev/null +++ b/src/types/ChatBoost.zig @@ -0,0 +1,6 @@ +const ChatBoostSource = @import("chat_boost_source.zig").ChatBoostSource; + +boost_id: []const u8, +add_date: u64, +expiration_date: u64, +source: ChatBoostSource, diff --git a/src/types/ChatBoostAdded.zig b/src/types/ChatBoostAdded.zig new file mode 100644 index 0000000..487ae70 --- /dev/null +++ b/src/types/ChatBoostAdded.zig @@ -0,0 +1 @@ +boost_count: u64, diff --git a/src/types/ChatBoostRemoved.zig b/src/types/ChatBoostRemoved.zig new file mode 100644 index 0000000..0d61bc5 --- /dev/null +++ b/src/types/ChatBoostRemoved.zig @@ -0,0 +1,7 @@ +const Chat = @import("Chat.zig"); +const ChatBoostSource = @import("chat_boost_source.zig").ChatBoostSource; + +chat: Chat, +boost_id: []const u8, +remove_date: u64, +source: ChatBoostSource, diff --git a/src/types/ChatBoostUpdated.zig b/src/types/ChatBoostUpdated.zig new file mode 100644 index 0000000..e7ad33c --- /dev/null +++ b/src/types/ChatBoostUpdated.zig @@ -0,0 +1,5 @@ +const Chat = @import("Chat.zig"); +const ChatBoost = @import("ChatBoost.zig"); + +chat: Chat, +boost: ChatBoost, diff --git a/src/types/ChatInviteLink.zig b/src/types/ChatInviteLink.zig new file mode 100644 index 0000000..41a1f44 --- /dev/null +++ b/src/types/ChatInviteLink.zig @@ -0,0 +1,11 @@ +const User = @import("User.zig"); + +invite_link: []const u8, +creator: User, +creates_join_request: bool, +is_primary: bool, +is_revoked: bool, +name: ?[]const u8, +expire_date: ?u64, +member_limit: ?u64, +pending_join_request_count: ?u64, diff --git a/src/types/ChatJoinRequest.zig b/src/types/ChatJoinRequest.zig new file mode 100644 index 0000000..f08e070 --- /dev/null +++ b/src/types/ChatJoinRequest.zig @@ -0,0 +1,10 @@ +const Chat = @import("Chat.zig"); +const ChatInviteLink = @import("ChatInviteLink.zig"); +const User = @import("User.zig"); + +chat: Chat, +from: User, +user_chat_id: i64, +date: u64, +bio: ?[]const u8, +invite_link: ?ChatInviteLink, diff --git a/src/types/ChatMemberUpdated.zig b/src/types/ChatMemberUpdated.zig new file mode 100644 index 0000000..8df56ec --- /dev/null +++ b/src/types/ChatMemberUpdated.zig @@ -0,0 +1,13 @@ +const Chat = @import("Chat.zig"); +const ChatInviteLink = @import("ChatInviteLink.zig"); +const ChatMember = @import("chat_member.zig").ChatMember; +const User = @import("User.zig"); + +chat: Chat, +from: User, +date: u64, +old_chat_member: ChatMember, +new_chat_member: ChatMember, +invite_link: ?ChatInviteLink = null, +via_join_request: bool = false, +via_chat_folder_invite_link: bool = false, diff --git a/src/types/ChatShared.zig b/src/types/ChatShared.zig new file mode 100644 index 0000000..7b49f02 --- /dev/null +++ b/src/types/ChatShared.zig @@ -0,0 +1,7 @@ +const PhotoSize = @import("PhotoSize.zig"); + +request_id: u64, +chat_id: i64, +title: ?[]const u8 = null, +username: ?[]const u8 = null, +photo: ?[]PhotoSize = null, diff --git a/src/types/ChosenInlineResult.zig b/src/types/ChosenInlineResult.zig new file mode 100644 index 0000000..e0528cd --- /dev/null +++ b/src/types/ChosenInlineResult.zig @@ -0,0 +1,8 @@ +const Location = @import("Location.zig"); +const User = @import("User.zig"); + +result_id: []const u8, +from: User, +location: ?Location = null, +inline_message_id: ?[]const u8, +query: []const u8, diff --git a/src/types/Contact.zig b/src/types/Contact.zig new file mode 100644 index 0000000..e3000fa --- /dev/null +++ b/src/types/Contact.zig @@ -0,0 +1,5 @@ +phone_number: []const u8, +first_name: []const u8, +last_name: ?[]const u8 = null, +user_id: ?[]u64 = null, +vcard: ?[]const u8 = null, diff --git a/src/types/Dice.zig b/src/types/Dice.zig new file mode 100644 index 0000000..9aa6b06 --- /dev/null +++ b/src/types/Dice.zig @@ -0,0 +1,2 @@ +emoji: []const u8, +value: u8, diff --git a/src/types/Document.zig b/src/types/Document.zig new file mode 100644 index 0000000..811273d --- /dev/null +++ b/src/types/Document.zig @@ -0,0 +1,8 @@ +const PhotoSize = @import("PhotoSize.zig"); + +file_id: []const u8, +file_unique_id: []const u8, +thumbnail: ?PhotoSize = null, +file_name: ?[]const u8, +mime_type: ?[]const u8, +file_size: ?u64 = null, diff --git a/src/types/EditMessageTextParams.zig b/src/types/EditMessageTextParams.zig new file mode 100644 index 0000000..3e7701f --- /dev/null +++ b/src/types/EditMessageTextParams.zig @@ -0,0 +1,16 @@ +const InlineKeyboardMarkup = @import("InlineKeyboardMarkup.zig"); +const LinkPreviewOptions = @import("LinkPreviewOptions.zig"); +const MessageEntity = @import("MessageEntity.zig"); +const ParseMode = @import("parse_mode.zig").ParseMode; + +business_connection_id: ?[]const u8 = null, +// TODO: Integer or String +chat_id: i64, +message_id: u64, +// TODO: Make a different call for this bcs it returns just true :D +// inline_message_id: ?u64 = null, +text: []const u8, +parse_mode: ?ParseMode = null, +entities: ?[]MessageEntity = null, +link_preview_options: ?LinkPreviewOptions = null, +reply_markup: ?InlineKeyboardMarkup = null, diff --git a/src/types/EncryptedCredentials.zig b/src/types/EncryptedCredentials.zig new file mode 100644 index 0000000..6c87689 --- /dev/null +++ b/src/types/EncryptedCredentials.zig @@ -0,0 +1,3 @@ +data: []const u8, +hash: []const u8, +secret: []const u8, diff --git a/src/types/EncryptedPassportElement.zig b/src/types/EncryptedPassportElement.zig new file mode 100644 index 0000000..ca0e2ed --- /dev/null +++ b/src/types/EncryptedPassportElement.zig @@ -0,0 +1,30 @@ +// TODO: Turn this into a tagged union + +const PassportFile = @import("PassportFile.zig"); + +pub const Type = enum { + personal_details, + passport, + driver_license, + identity_card, + internal_passport, + address, + utility_bill, + bank_statement, + rental_agreement, + passport_registration, + temporary_registration, + phone_number, + email, +}; + +type: Type, +data: ?[]const u8, +phone_number: ?[]const u8, +email: ?[]const u8, +files: ?[]PassportFile, +front_side: ?PassportFile, +reverse_side: ?PassportFile, +selfie: ?PassportFile, +translation: ?[]PassportFile, +hash: []const u8, diff --git a/src/types/ExternalReplyInfo.zig b/src/types/ExternalReplyInfo.zig new file mode 100644 index 0000000..89aa004 --- /dev/null +++ b/src/types/ExternalReplyInfo.zig @@ -0,0 +1,47 @@ +const Animation = @import("Animation.zig"); +const Audio = @import("Audio.zig"); +const Chat = @import("Chat.zig"); +const Contact = @import("Contact.zig"); +const Dice = @import("Dice.zig"); +const Document = @import("Document.zig"); +const Game = @import("Game.zig"); +const Giveaway = @import("Giveaway.zig"); +const GiveawayWinners = @import("GiveawayWinners.zig"); +const Invoice = @import("Invoice.zig"); +const LinkPreviewOptions = @import("LinkPreviewOptions.zig"); +const Location = @import("Location.zig"); +const MessageOrigin = @import("message_origin.zig").MessageOrigin; +const PaidMediaInfo = @import("PaidMediaInfo.zig"); +const Poll = @import("Poll.zig"); +const PhotoSize = @import("PhotoSize.zig"); +const Sticker = @import("Sticker.zig"); +const Story = @import("Story.zig"); +const Venue = @import("Venue.zig"); +const Video = @import("Video.zig"); +const VideoNote = @import("VideoNote.zig"); +const Voice = @import("Voice.zig"); + +origin: MessageOrigin, +chat: ?Chat = null, +message_id: ?u64 = null, +link_preview_options: ?LinkPreviewOptions = null, +animation: ?Animation = null, +audio: ?Audio = null, +document: ?Document = null, +paid_media: ?PaidMediaInfo = null, +photo: ?[]PhotoSize = null, +sticker: ?Sticker = null, +story: ?Story = null, +video: ?Video = null, +video_note: ?VideoNote = null, +voice: ?Voice = null, +has_media_spoiler: bool = false, +contact: ?Contact = null, +dice: ?Dice = null, +game: ?Game = null, +giveaway: ?Giveaway = null, +giveaway_winners: ?GiveawayWinners = null, +invoice: ?Invoice = null, +location: ?Location = null, +poll: ?Poll = null, +venue: ?Venue = null, diff --git a/src/types/File.zig b/src/types/File.zig new file mode 100644 index 0000000..3555bc9 --- /dev/null +++ b/src/types/File.zig @@ -0,0 +1,4 @@ +file_id: []const u8, +file_unique_id: []const u8, +file_size: ?u64 = null, +file_path: ?[]const u8 = null, diff --git a/src/types/ForumTopicClosed.zig b/src/types/ForumTopicClosed.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/ForumTopicClosed.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/ForumTopicCreated.zig b/src/types/ForumTopicCreated.zig new file mode 100644 index 0000000..2429de7 --- /dev/null +++ b/src/types/ForumTopicCreated.zig @@ -0,0 +1,3 @@ +name: []const u8, +icon_color: u24, +icon_custom_emoji_id: ?[]const u8 = null, diff --git a/src/types/ForumTopicEdited.zig b/src/types/ForumTopicEdited.zig new file mode 100644 index 0000000..097acb3 --- /dev/null +++ b/src/types/ForumTopicEdited.zig @@ -0,0 +1,2 @@ +name: ?[]const u8 = null, +icon_custom_emoji_id: ?[]const u8 = null, diff --git a/src/types/ForumTopicReopened.zig b/src/types/ForumTopicReopened.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/ForumTopicReopened.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/Game.zig b/src/types/Game.zig new file mode 100644 index 0000000..3738284 --- /dev/null +++ b/src/types/Game.zig @@ -0,0 +1,10 @@ +const Animation = @import("Animation.zig"); +const MessageEntity = @import("MessageEntity.zig"); +const PhotoSize = @import("PhotoSize.zig"); + +title: []const u8, +description: []const u8, +photo: []PhotoSize, +text: ?[]const u8 = null, +text_entities: ?[]MessageEntity = null, +animation: ?Animation = null, diff --git a/src/types/GeneralForumTopicHidden.zig b/src/types/GeneralForumTopicHidden.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/GeneralForumTopicHidden.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/GeneralForumTopicUnhidden.zig b/src/types/GeneralForumTopicUnhidden.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/GeneralForumTopicUnhidden.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/GetMyNameParams.zig b/src/types/GetMyNameParams.zig new file mode 100644 index 0000000..2cb38fa --- /dev/null +++ b/src/types/GetMyNameParams.zig @@ -0,0 +1 @@ +language_code: ?[]const u8 = null diff --git a/src/types/GetUpdatesParams.zig b/src/types/GetUpdatesParams.zig new file mode 100644 index 0000000..0a4e333 --- /dev/null +++ b/src/types/GetUpdatesParams.zig @@ -0,0 +1,4 @@ +offset: ?u64 = null, +limit: ?u64 = null, +timeout: ?u64 = null, +allowed_updates: ?[]const u8 = null, diff --git a/src/types/Giveaway.zig b/src/types/Giveaway.zig new file mode 100644 index 0000000..d1cfa7e --- /dev/null +++ b/src/types/Giveaway.zig @@ -0,0 +1,10 @@ +const Chat = @import("Chat.zig"); + +chats: []Chat, +winners_selection_date: u64, +winner_count: u64, +only_new_members: bool = false, +has_public_winners: bool = false, +prize_description: ?[]const u8 = null, +country_codes: ?[]const u8 = null, +premium_subscription_month_count: ?u64 = null, diff --git a/src/types/GiveawayCompleted.zig b/src/types/GiveawayCompleted.zig new file mode 100644 index 0000000..9e07ad9 --- /dev/null +++ b/src/types/GiveawayCompleted.zig @@ -0,0 +1,5 @@ +const Message = @import("Message.zig"); + +winner_count: u64, +unclaimed_prize_count: ?u64 = null, +giveaway_message: ?Message = null, diff --git a/src/types/GiveawayCreated.zig b/src/types/GiveawayCreated.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/GiveawayCreated.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/GiveawayWinners.zig b/src/types/GiveawayWinners.zig new file mode 100644 index 0000000..b99a7d2 --- /dev/null +++ b/src/types/GiveawayWinners.zig @@ -0,0 +1,14 @@ +const Chat = @import("Chat.zig"); +const User = @import("User.zig"); + +chat: Chat, +giveaway_message_id: u64, +winners_selection_date: u64, +winner_count: u64, +winners: []User, +additional_chat_count: ?u64 = null, +premium_subscription_month_count: ?u64 = null, +unclaimed_prize_count: ?u64 = null, +only_new_members: bool = false, +was_refunded: bool = false, +prize_description: ?[]const u8 = null, diff --git a/src/types/InlineKeyboardButton.zig b/src/types/InlineKeyboardButton.zig new file mode 100644 index 0000000..be156b4 --- /dev/null +++ b/src/types/InlineKeyboardButton.zig @@ -0,0 +1,15 @@ +const CallbackGame = @import("CallbackGame.zig"); +const LoginUrl = @import("LoginUrl.zig"); +const SwitchInlineQueryChosenChat = @import("SwitchInlineQueryChosenChat.zig"); +const WebAppInfo = @import("WebAppInfo.zig"); + +text: []const u8, +url: ?[]const u8 = null, +callback_data: ?[]const u8 = null, +web_app: ?WebAppInfo = null, +login_url: ?LoginUrl = null, +switch_inline_query: ?[]const u8 = null, +switch_inline_query_current_chat: ?[]const u8 = null, +switch_inline_query_chosen_chat: ?SwitchInlineQueryChosenChat = null, +callback_game: ?CallbackGame = null, +pay: bool = false, diff --git a/src/types/InlineKeyboardMarkup.zig b/src/types/InlineKeyboardMarkup.zig new file mode 100644 index 0000000..388d4fc --- /dev/null +++ b/src/types/InlineKeyboardMarkup.zig @@ -0,0 +1,3 @@ +const InlineKeyboardButton = @import("InlineKeyboardButton.zig"); + +inline_keyboard: [][]InlineKeyboardButton, diff --git a/src/types/InlineQuery.zig b/src/types/InlineQuery.zig new file mode 100644 index 0000000..7cbbe20 --- /dev/null +++ b/src/types/InlineQuery.zig @@ -0,0 +1,17 @@ +const Location = @import("Location.zig"); +const User = @import("User.zig"); + +pub const ChatType = enum { + sender, + private, + group, + supergroup, + channel, +}; + +id: []const u8, +from: User, +query: []const u8, +offset: []const u8, +chat_type: ?ChatType, +location: ?Location, diff --git a/src/types/Invoice.zig b/src/types/Invoice.zig new file mode 100644 index 0000000..5ff6bfd --- /dev/null +++ b/src/types/Invoice.zig @@ -0,0 +1,5 @@ +title: []const u8, +description: []const u8, +start_parameter: []const u8, +currency: []const u8, +total_amount: u64, diff --git a/src/types/LinkPreviewOptions.zig b/src/types/LinkPreviewOptions.zig new file mode 100644 index 0000000..c8258e7 --- /dev/null +++ b/src/types/LinkPreviewOptions.zig @@ -0,0 +1,5 @@ +is_disabled: ?bool = null, +url: ?[]const u8 = null, +prefer_small_media: ?bool = null, +prefer_large_media: ?bool = null, +show_above_text: ?bool = null, diff --git a/src/types/Location.zig b/src/types/Location.zig new file mode 100644 index 0000000..1fef4e3 --- /dev/null +++ b/src/types/Location.zig @@ -0,0 +1,6 @@ +latitude: f32, +longitude: f32, +horizontal_accuracy: ?f32 = null, +live_period: ?u64 = null, +heading: ?u64 = null, +proximity_alert_radius: ?u64 = null, diff --git a/src/types/LoginUrl.zig b/src/types/LoginUrl.zig new file mode 100644 index 0000000..37b89f6 --- /dev/null +++ b/src/types/LoginUrl.zig @@ -0,0 +1,4 @@ +url: []const u8, +forward_text: ?[]const u8 = null, +bot_username: ?[]const u8 = null, +request_write_access: ?[]const u8 = null, diff --git a/src/types/MaskPosition.zig b/src/types/MaskPosition.zig new file mode 100644 index 0000000..ba668c4 --- /dev/null +++ b/src/types/MaskPosition.zig @@ -0,0 +1,11 @@ +pub const Point = enum { + forehead, + eyes, + mouth, + chin, +}; + +point: Point, +x_shift: f32, +y_shift: f32, +scale: f32, diff --git a/src/types/Message.zig b/src/types/Message.zig new file mode 100644 index 0000000..448ca86 --- /dev/null +++ b/src/types/Message.zig @@ -0,0 +1,139 @@ +const Animation = @import("Animation.zig"); +const Audio = @import("Audio.zig"); +const Chat = @import("Chat.zig"); +const ChatBackground = @import("ChatBackground.zig"); +const ChatBoostAdded = @import("ChatBoostAdded.zig"); +const ChatShared = @import("ChatShared.zig"); +const Contact = @import("Contact.zig"); +const Dice = @import("Dice.zig"); +const Document = @import("Document.zig"); +const ExternalReplyInfo = @import("ExternalReplyInfo.zig"); +const ForumTopicClosed = @import("ForumTopicClosed.zig"); +const ForumTopicCreated = @import("ForumTopicCreated.zig"); +const ForumTopicEdited = @import("ForumTopicEdited.zig"); +const ForumTopicReopened = @import("ForumTopicReopened.zig"); +const Game = @import("Game.zig"); +const GeneralForumTopicHidden = @import("GeneralForumTopicHidden.zig"); +const GeneralForumTopicUnhidden = @import("GeneralForumTopicUnhidden.zig"); +const Giveaway = @import("Giveaway.zig"); +const GiveawayCompleted = @import("GiveawayCompleted.zig"); +const GiveawayCreated = @import("GiveawayCreated.zig"); +const GiveawayWinners = @import("GiveawayWinners.zig"); +const InlineKeyboardMarkup = @import("InlineKeyboardMarkup.zig"); +const Invoice = @import("Invoice.zig"); +const LinkPreviewOptions = @import("LinkPreviewOptions.zig"); +const Location = @import("Location.zig"); +const MaybeInaccessibleMessage = @This(); +const Message = @This(); +const MessageAutoDeleteTimerChanged = @import("MessageAutoDeleteTimerChanged.zig"); +const MessageEntity = @import("MessageEntity.zig"); +const MessageOrigin = @import("message_origin.zig").MessageOrigin; +const PaidMediaInfo = @import("PaidMediaInfo.zig"); +const PassportData = @import("PassportData.zig"); +const PhotoSize = @import("PhotoSize.zig"); +const Poll = @import("Poll.zig"); +const ProximityAlertTriggered = @import("ProximityAlertTriggered.zig"); +const RefundedPayment = @import("RefundedPayment.zig"); +const Sticker = @import("Sticker.zig"); +const Story = @import("Story.zig"); +const SuccessfulPayment = @import("SuccessfulPayment.zig"); +const TextQuote = @import("TextQuote.zig"); +const User = @import("User.zig"); +const UsersShared = @import("UsersShared.zig"); +const Venue = @import("Venue.zig"); +const Video = @import("Video.zig"); +const VideoChatEnded = @import("VideoChatEnded.zig"); +const VideoChatParticipantsInvited = @import("VideoChatParticipantsInvited.zig"); +const VideoChatScheduled = @import("VideoChatScheduled.zig"); +const VideoChatStarted = @import("VideoChatStarted.zig"); +const VideoNote = @import("VideoNote.zig"); +const Voice = @import("Voice.zig"); +const WebAppData = @import("WebAppData.zig"); +const WriteAccessAllowed = @import("WriteAccessAllowed.zig"); + +message_id: u64, +message_thread_id: ?u64 = null, +from: ?User = null, +sender_chat: ?Chat = null, +sender_boost_count: ?u64 = null, +sender_business_bot: ?User = null, +// If this is a MaybeInaccessibleMessage this will be 0 if this is inaccessible +date: u64, +business_connection_id: ?[]const u8 = null, +chat: Chat, +forward_origin: ?MessageOrigin = null, +is_topic_message: bool = false, +is_automatic_forward: bool = false, +reply_to_message: ?*Message = null, +external_reply: ?ExternalReplyInfo = null, +quote: ?TextQuote = null, +reply_to_story: ?Story = null, +via_bot: ?User = null, +edit_date: ?u64 = null, +has_protected_content: bool = false, +is_from_offline: bool = false, +media_group_id: ?[]const u8 = null, +author_signature: ?[]const u8 = null, +text: ?[]const u8 = null, +entities: ?[]MessageEntity = null, +link_preview_options: ?LinkPreviewOptions = null, +effect_id: ?[]const u8 = null, +animation: ?Animation = null, +audio: ?Audio = null, +document: ?Document = null, +paid_media: ?PaidMediaInfo = null, +photo: ?[]PhotoSize = null, +sticker: ?Sticker = null, +story: ?Story = null, +video: ?Video = null, +video_note: ?VideoNote = null, +voice: ?Voice = null, +caption: ?[]const u8 = null, +caption_entities: ?[]MessageEntity = null, +show_caption_above_media: bool = false, +has_media_spoiler: bool = false, +contact: ?Contact = null, +dice: ?Dice = null, +game: ?Game = null, +poll: ?Poll = null, +venue: ?Venue = null, +location: ?Location = null, +new_chat_members: ?[]User = null, +left_chat_member: ?User = null, +new_chat_title: ?[]const u8 = null, +new_chat_photo: ?[]PhotoSize = null, +delete_chat_photo: bool = false, +group_chat_created: bool = false, +supergroup_chat_created: bool = false, +channel_chat_created: bool = false, +message_auto_delete_timer_changed: ?MessageAutoDeleteTimerChanged = null, +migrate_to_chat_id: ?i64 = null, +migrate_from_chat_id: ?i64 = null, +pinned_message: ?*MaybeInaccessibleMessage = null, +invoice: ?Invoice = null, +successful_payment: ?SuccessfulPayment = null, +refunded_payment: ?RefundedPayment = null, +users_shared: ?UsersShared = null, +chat_shared: ?ChatShared = null, +connected_website: ?[]const u8 = null, +write_access_allowed: ?WriteAccessAllowed = null, +passport_data: ?PassportData = null, +proximity_alert_triggered: ?ProximityAlertTriggered = null, +boost_added: ?ChatBoostAdded = null, +chat_background_set: ?ChatBackground = null, +forum_topic_created: ?ForumTopicCreated = null, +forum_topic_edited: ?ForumTopicEdited = null, +forum_topic_closed: ?ForumTopicClosed = null, +forum_topic_reopened: ?ForumTopicReopened = null, +general_forum_topic_hidden: ?GeneralForumTopicHidden = null, +general_forum_topic_unhidden: ?GeneralForumTopicUnhidden = null, +giveaway_created: ?GiveawayCreated = null, +giveaway: ?Giveaway = null, +giveaway_winners: ?GiveawayWinners = null, +giveaway_completed: ?*GiveawayCompleted = null, +video_chat_scheduled: ?VideoChatScheduled = null, +video_chat_started: ?VideoChatStarted = null, +video_chat_ended: ?VideoChatEnded = null, +video_chat_participants_invited: ?VideoChatParticipantsInvited = null, +web_app_data: ?WebAppData = null, +reply_markup: ?InlineKeyboardMarkup = null, diff --git a/src/types/MessageAutoDeleteTimerChanged.zig b/src/types/MessageAutoDeleteTimerChanged.zig new file mode 100644 index 0000000..c73e682 --- /dev/null +++ b/src/types/MessageAutoDeleteTimerChanged.zig @@ -0,0 +1 @@ +message_auto_delete_time: u64, diff --git a/src/types/MessageEntity.zig b/src/types/MessageEntity.zig new file mode 100644 index 0000000..1c44d20 --- /dev/null +++ b/src/types/MessageEntity.zig @@ -0,0 +1,66 @@ +const std = @import("std"); + +const MessageEntity = @This(); +const User = @import("User.zig"); +const Utf8View = std.unicode.Utf8View; + +pub const Type = enum { + mention, + hashtag, + cashtag, + bot_command, + url, + email, + phone_number, + bold, + italic, + underline, + strikethrough, + spoiler, + blockquote, + expandable_blockquote, + code, + pre, + text_link, + text_mention, + custom_emoji, +}; + +type: Type, +offset: u64, +length: u64, +url: ?[]const u8 = null, +user: ?User = null, +language: ?[]const u8 = null, +custom_emoji_id: ?[]const u8 = null, + +pub fn extract(self: MessageEntity, src: []const u8) ![]const u8 { + if (self.length == 0) { + return ""; + } + + var utf8 = (try Utf8View.init(src)).iterator(); + var i: usize = 0; + + const start = if (i >= self.offset) + utf8.i + else blk: { + while (utf8.nextCodepoint()) |cp| { + i += std.unicode.utf16CodepointSequenceLength(cp) catch unreachable; + if (i >= self.offset) { + break :blk utf8.i; + } + } + return ""; + }; + + i = 0; + while (utf8.nextCodepoint()) |cp| { + i += std.unicode.utf16CodepointSequenceLength(cp) catch unreachable; + if (i >= self.length) { + return src[start..utf8.i]; + } + } + + return src[start..]; +} diff --git a/src/types/MessageReactionCountUpdated.zig b/src/types/MessageReactionCountUpdated.zig new file mode 100644 index 0000000..48a9f24 --- /dev/null +++ b/src/types/MessageReactionCountUpdated.zig @@ -0,0 +1,7 @@ +const Chat = @import("Chat.zig"); +const ReactionCount = @import("ReactionCount.zig"); + +chat: Chat, +message_id: u64, +date: u64, +reactions: []ReactionCount, diff --git a/src/types/MessageReactionUpdated.zig b/src/types/MessageReactionUpdated.zig new file mode 100644 index 0000000..7da679b --- /dev/null +++ b/src/types/MessageReactionUpdated.zig @@ -0,0 +1,11 @@ +const Chat = @import("Chat.zig"); +const ReactionType = @import("reaction_type.zig").ReactionType; +const User = @import("User.zig"); + +chat: Chat, +message_id: u64, +user: ?User = null, +actor_chat: ?Chat = null, +date: u64, +old_reaction: []ReactionType, +new_reaction: []ReactionType, diff --git a/src/types/OrderInfo.zig b/src/types/OrderInfo.zig new file mode 100644 index 0000000..3f94376 --- /dev/null +++ b/src/types/OrderInfo.zig @@ -0,0 +1,6 @@ +const ShippingAddress = @import("ShippingAddress.zig"); + +name: ?[]const u8 = null, +phone_number: ?[]const u8 = null, +email: ?[]const u8 = null, +shipping_address: ?ShippingAddress = null, diff --git a/src/types/PaidMediaInfo.zig b/src/types/PaidMediaInfo.zig new file mode 100644 index 0000000..6de7447 --- /dev/null +++ b/src/types/PaidMediaInfo.zig @@ -0,0 +1,4 @@ +const PaidMedia = @import("paid_media.zig").PaidMedia; + +star_count: u64, +paid_media: []PaidMedia, diff --git a/src/types/PassportData.zig b/src/types/PassportData.zig new file mode 100644 index 0000000..679534c --- /dev/null +++ b/src/types/PassportData.zig @@ -0,0 +1,5 @@ +const EncryptedCredentials = @import("EncryptedCredentials.zig"); +const EncryptedPassportElement = @import("EncryptedPassportElement.zig"); + +data: []EncryptedPassportElement, +credentials: EncryptedCredentials, diff --git a/src/types/PassportFile.zig b/src/types/PassportFile.zig new file mode 100644 index 0000000..2b208fa --- /dev/null +++ b/src/types/PassportFile.zig @@ -0,0 +1,4 @@ +file_id: []const u8, +file_unique_id: []const u8, +file_size: u64, +file_date: u64, diff --git a/src/types/PhotoSize.zig b/src/types/PhotoSize.zig new file mode 100644 index 0000000..887b530 --- /dev/null +++ b/src/types/PhotoSize.zig @@ -0,0 +1,5 @@ +file_id: []const u8, +file_unique_id: []const u8, +width: u64, +height: u64, +file_size: ?u64 = null, diff --git a/src/types/Poll.zig b/src/types/Poll.zig new file mode 100644 index 0000000..ccc3b68 --- /dev/null +++ b/src/types/Poll.zig @@ -0,0 +1,22 @@ +const MessageEntity = @import("MessageEntity.zig"); +const PollOption = @import("PollOption.zig"); + +pub const Type = enum { + regular, + quiz, +}; + +id: []const u8, +question: []const u8, +question_entities: ?[]MessageEntity = null, +options: []PollOption, +total_voter_count: u64, +is_closed: bool, +is_anonymous: bool, +type: Type, +allows_multiple_answers: bool, +correct_option_id: ?u64 = null, +explanation: ?[]const u8 = null, +explanation_entities: ?[]MessageEntity = null, +open_period: ?u64 = null, +close_date: ?u64 = null, diff --git a/src/types/PollAnswer.zig b/src/types/PollAnswer.zig new file mode 100644 index 0000000..7d4985c --- /dev/null +++ b/src/types/PollAnswer.zig @@ -0,0 +1,7 @@ +const Chat = @import("Chat.zig"); +const User = @import("User.zig"); + +poll_id: []const u8, +voter_chat: ?Chat, +user: ?User, +option_ids: []u64, diff --git a/src/types/PollOption.zig b/src/types/PollOption.zig new file mode 100644 index 0000000..870bfee --- /dev/null +++ b/src/types/PollOption.zig @@ -0,0 +1,5 @@ +const MessageEntity = @import("MessageEntity.zig"); + +text: []const u8, +text_entities: ?[]MessageEntity = null, +voter_count: u64, diff --git a/src/types/PreCheckoutQuery.zig b/src/types/PreCheckoutQuery.zig new file mode 100644 index 0000000..48e013f --- /dev/null +++ b/src/types/PreCheckoutQuery.zig @@ -0,0 +1,10 @@ +const OrderInfo = @import("OrderInfo.zig"); +const User = @import("User.zig"); + +id: []const u8, +from: User, +currency: []const u8, +total_amount: u64, +invoice_payload: []const u8, +shipping_option_id: ?[]const u8, +order_info: ?OrderInfo, diff --git a/src/types/ProximityAlertTriggered.zig b/src/types/ProximityAlertTriggered.zig new file mode 100644 index 0000000..db5159d --- /dev/null +++ b/src/types/ProximityAlertTriggered.zig @@ -0,0 +1,5 @@ +const User = @import("User.zig"); + +traveler: User, +watcher: User, +distance: u64, diff --git a/src/types/ReactionCount.zig b/src/types/ReactionCount.zig new file mode 100644 index 0000000..7c6a0bc --- /dev/null +++ b/src/types/ReactionCount.zig @@ -0,0 +1,4 @@ +const ReactionType = @import("reaction_type.zig").ReactionType; + +type: ReactionType, +total_count: u64, diff --git a/src/types/RefundedPayment.zig b/src/types/RefundedPayment.zig new file mode 100644 index 0000000..31f04c0 --- /dev/null +++ b/src/types/RefundedPayment.zig @@ -0,0 +1,5 @@ +currency: []const u8, +total_amount: u64, +invoice_payload: []const u8, +telegram_payment_charge_id: []const u8, +provider_payment_charge_id: []const u8, diff --git a/src/types/ReplyParameters.zig b/src/types/ReplyParameters.zig new file mode 100644 index 0000000..57d75c2 --- /dev/null +++ b/src/types/ReplyParameters.zig @@ -0,0 +1,9 @@ +message_id: u64, +// TODO: Integer OR String +chat_id: ?i64 = null, +allow_sending_without_reply: ?bool = null, +quote: ?[]const u8 = null, +// one of quote_parse_mode or quote_entities +quote_parse_mode: ?[]const u8 = null, +quote_entities: ?[]const u8 = null, +quote_position: ?u64 = null, diff --git a/src/types/ResponseParameters.zig b/src/types/ResponseParameters.zig new file mode 100644 index 0000000..655c4f9 --- /dev/null +++ b/src/types/ResponseParameters.zig @@ -0,0 +1,2 @@ +migrate_to_chat_id: ?i64 = null, +retry_after: ?i64 = null, diff --git a/src/types/SendMessageParams.zig b/src/types/SendMessageParams.zig new file mode 100644 index 0000000..8c84940 --- /dev/null +++ b/src/types/SendMessageParams.zig @@ -0,0 +1,18 @@ +const LinkPreviewOptions = @import("LinkPreviewOptions.zig"); +const MessageEntity = @import("MessageEntity.zig"); +const ParseMode = @import("parse_mode.zig").ParseMode; +const ReplyParameters = @import("ReplyParameters.zig"); + +business_connection_id: ?[]const u8 = null, +// TODO: Integer or String +chat_id: i64, +message_thread_id: ?u64 = null, +text: []const u8, +parse_mode: ?ParseMode = null, +entities: ?[]MessageEntity = null, +link_preview_options: ?LinkPreviewOptions = null, +disable_notification: ?bool = null, +protect_content: ?bool = null, +message_effect_id: ?[]const u8 = null, +reply_parameters: ?ReplyParameters = null, +// TODO: reply_markup: InlineKeyboardMarkup OR ReplyKeyboardMarkup OR ReplyKeyboardRemove OR ForceReply diff --git a/src/types/SetMyNameParams.zig b/src/types/SetMyNameParams.zig new file mode 100644 index 0000000..0bd2f06 --- /dev/null +++ b/src/types/SetMyNameParams.zig @@ -0,0 +1,2 @@ +name: ?[]const u8 = null, +language_code: ?[]const u8 = null, diff --git a/src/types/SharedUser.zig b/src/types/SharedUser.zig new file mode 100644 index 0000000..4afe053 --- /dev/null +++ b/src/types/SharedUser.zig @@ -0,0 +1,7 @@ +const PhotoSize = @import("PhotoSize.zig"); + +user_id: u64, +first_name: ?[]const u8 = null, +last_name: ?[]const u8 = null, +username: ?[]const u8 = null, +photo: ?[]PhotoSize = null, diff --git a/src/types/ShippingAddress.zig b/src/types/ShippingAddress.zig new file mode 100644 index 0000000..f4203fe --- /dev/null +++ b/src/types/ShippingAddress.zig @@ -0,0 +1,6 @@ +country_code: []const u8, +state: []const u8, +city: []const u8, +street_line1: []const u8, +street_line2: []const u8, +post_code: []const u8, diff --git a/src/types/ShippingQuery.zig b/src/types/ShippingQuery.zig new file mode 100644 index 0000000..15abcda --- /dev/null +++ b/src/types/ShippingQuery.zig @@ -0,0 +1,7 @@ +const ShippingAddress = @import("ShippingAddress.zig"); +const User = @import("User.zig"); + +id: []const u8, +from: User, +invoice_payload: []const u8, +shipping_address: ShippingAddress, diff --git a/src/types/Sticker.zig b/src/types/Sticker.zig new file mode 100644 index 0000000..e28df69 --- /dev/null +++ b/src/types/Sticker.zig @@ -0,0 +1,25 @@ +const File = @import("File.zig"); +const MaskPosition = @import("MaskPosition.zig"); +const PhotoSize = @import("PhotoSize.zig"); + +pub const Type = enum { + regular, + mask, + custom_emoji, +}; + +file_id: []const u8, +file_unique_id: []const u8, +type: Type, +width: u64, +height: u64, +is_animated: bool = false, +is_video: bool = false, +thumbnail: ?PhotoSize = null, +emoji: ?[]const u8 = null, +set_name: ?[]const u8 = null, +premium_animation: ?File = null, +mask_position: ?MaskPosition = null, +custom_emoji_id: ?[]const u8 = null, +needs_repainting: bool = false, +file_size: ?u64 = null, diff --git a/src/types/Story.zig b/src/types/Story.zig new file mode 100644 index 0000000..479b7a9 --- /dev/null +++ b/src/types/Story.zig @@ -0,0 +1,4 @@ +const Chat = @import("Chat.zig"); + +chat: Chat, +id: u64, diff --git a/src/types/SuccessfulPayment.zig b/src/types/SuccessfulPayment.zig new file mode 100644 index 0000000..c508f48 --- /dev/null +++ b/src/types/SuccessfulPayment.zig @@ -0,0 +1,9 @@ +const OrderInfo = @import("OrderInfo.zig"); + +currency: []const u8, +total_amount: u64, +invoice_payload: []const u8, +shipping_option_id: ?[]const u8 = null, +order_info: ?OrderInfo = null, +telegram_payment_charge_id: []const u8, +provider_payment_charge_id: []const u8, diff --git a/src/types/SwitchInlineQueryChosenChat.zig b/src/types/SwitchInlineQueryChosenChat.zig new file mode 100644 index 0000000..860f2d9 --- /dev/null +++ b/src/types/SwitchInlineQueryChosenChat.zig @@ -0,0 +1,5 @@ +query: ?[]const u8, +allow_user_chats: ?bool = null, +allow_bot_chats: ?bool = null, +allow_group_chats: ?bool = null, +allow_channel_chats: ?bool = null, diff --git a/src/types/TextQuote.zig b/src/types/TextQuote.zig new file mode 100644 index 0000000..6dc6be2 --- /dev/null +++ b/src/types/TextQuote.zig @@ -0,0 +1,6 @@ +const MessageEntity = @import("MessageEntity.zig"); + +text: []const u8, +entities: ?[]MessageEntity = null, +position: u64, +is_manual: bool = false, diff --git a/src/types/Update.zig b/src/types/Update.zig new file mode 100644 index 0000000..0491110 --- /dev/null +++ b/src/types/Update.zig @@ -0,0 +1,41 @@ +const BusinessConnection = @import("BusinessConnection.zig"); +const BusinessMessagesDeleted = @import("BusinessMessagesDeleted.zig"); +const CallbackQuery = @import("CallbackQuery.zig"); +const ChatBoostRemoved = @import("ChatBoostRemoved.zig"); +const ChatBoostUpdated = @import("ChatBoostUpdated.zig"); +const ChatJoinRequest = @import("ChatJoinRequest.zig"); +const ChatMemberUpdated = @import("ChatMemberUpdated.zig"); +const ChosenInlineResult = @import("ChosenInlineResult.zig"); +const InlineQuery = @import("InlineQuery.zig"); +const Message = @import("Message.zig"); +const MessageReactionCountUpdated = @import("MessageReactionCountUpdated.zig"); +const MessageReactionUpdated = @import("MessageReactionUpdated.zig"); +const Poll = @import("Poll.zig"); +const PollAnswer = @import("PollAnswer.zig"); +const PreCheckoutQuery = @import("PreCheckoutQuery.zig"); +const ShippingQuery = @import("ShippingQuery.zig"); + +// TODO: Make this into a tagged union +update_id: u64, +message: ?Message = null, +edited_message: ?Message = null, +channel_post: ?Message = null, +edited_channel_post: ?Message = null, +business_connection: ?BusinessConnection = null, +business_message: ?Message = null, +edited_business_message: ?Message = null, +deleted_business_messages: ?BusinessMessagesDeleted = null, +message_reaction: ?MessageReactionUpdated = null, +message_reaction_count: ?MessageReactionCountUpdated = null, +inline_query: ?InlineQuery = null, +chosen_inline_result: ?ChosenInlineResult = null, +callback_query: ?CallbackQuery = null, +shipping_query: ?ShippingQuery = null, +pre_checkout_query: ?PreCheckoutQuery = null, +poll: ?Poll = null, +poll_answer: ?PollAnswer = null, +my_chat_member: ?ChatMemberUpdated = null, +chat_member: ?ChatMemberUpdated = null, +chat_join_request: ?ChatJoinRequest = null, +chat_boost: ?ChatBoostUpdated = null, +removed_chat_boost: ?ChatBoostRemoved = null, diff --git a/src/types/User.zig b/src/types/User.zig new file mode 100644 index 0000000..dc06097 --- /dev/null +++ b/src/types/User.zig @@ -0,0 +1,32 @@ +const textutils = @import("../textutils.zig"); + +const User = @This(); + +id: i64, +is_bot: bool, +first_name: []const u8, +last_name: ?[]const u8 = null, +username: ?[]const u8 = null, +language_code: ?[]const u8 = null, +is_premium: bool = false, +added_to_attachment_menu: bool = false, +can_join_groups: bool = false, +can_read_all_group_messages: bool = false, +supports_inline_queries: bool = false, +can_connect_to_business: bool = false, + +pub fn writeFormattedName(self: User, w: anytype) !void { + try w.print("", .{self.id}); + try textutils.escapeXml(w, self.first_name); + if (self.last_name) |last_name| { + try w.writeByte(' '); + try textutils.escapeXml(w, last_name); + } + try w.writeAll(""); + + if (self.username) |username| { + try w.writeAll(" @"); + try textutils.escapeXml(w, username); + } + try w.print(" [{}]", .{self.id}); +} diff --git a/src/types/UsersShared.zig b/src/types/UsersShared.zig new file mode 100644 index 0000000..0fff785 --- /dev/null +++ b/src/types/UsersShared.zig @@ -0,0 +1,4 @@ +const SharedUser = @import("SharedUser.zig"); + +request_id: u64, +users: []SharedUser, diff --git a/src/types/Venue.zig b/src/types/Venue.zig new file mode 100644 index 0000000..6ae61f3 --- /dev/null +++ b/src/types/Venue.zig @@ -0,0 +1,9 @@ +const Location = @import("Location.zig"); + +location: Location, +title: []const u8, +address: []const u8, +foursquare_id: ?[]const u8 = null, +foursquare_type: ?[]const u8 = null, +google_place_id: ?[]const u8 = null, +google_place_type: ?[]const u8 = null, diff --git a/src/types/Video.zig b/src/types/Video.zig new file mode 100644 index 0000000..8330637 --- /dev/null +++ b/src/types/Video.zig @@ -0,0 +1,11 @@ +const PhotoSize = @import("PhotoSize.zig"); + +file_id: []const u8, +file_unique_id: []const u8, +width: u64, +height: u64, +duration: u64, +thumbnail: ?PhotoSize = null, +file_name: ?[]const u8 = null, +mime_type: ?[]const u8 = null, +file_size: ?u64 = null, diff --git a/src/types/VideoChatEnded.zig b/src/types/VideoChatEnded.zig new file mode 100644 index 0000000..748bf44 --- /dev/null +++ b/src/types/VideoChatEnded.zig @@ -0,0 +1 @@ +duration: u64, diff --git a/src/types/VideoChatParticipantsInvited.zig b/src/types/VideoChatParticipantsInvited.zig new file mode 100644 index 0000000..22a46f7 --- /dev/null +++ b/src/types/VideoChatParticipantsInvited.zig @@ -0,0 +1,3 @@ +const User = @import("User.zig"); + +users: []User, diff --git a/src/types/VideoChatScheduled.zig b/src/types/VideoChatScheduled.zig new file mode 100644 index 0000000..a55dfe3 --- /dev/null +++ b/src/types/VideoChatScheduled.zig @@ -0,0 +1 @@ +start_date: u64, diff --git a/src/types/VideoChatStarted.zig b/src/types/VideoChatStarted.zig new file mode 100644 index 0000000..2f72c10 --- /dev/null +++ b/src/types/VideoChatStarted.zig @@ -0,0 +1 @@ +// meant to be empty diff --git a/src/types/VideoNote.zig b/src/types/VideoNote.zig new file mode 100644 index 0000000..aadb318 --- /dev/null +++ b/src/types/VideoNote.zig @@ -0,0 +1,8 @@ +const PhotoSize = @import("PhotoSize.zig"); + +file_id: []const u8, +file_unique_id: []const u8, +length: u64, +duration: u64, +thumbnail: ?PhotoSize = null, +file_size: ?u64 = null, diff --git a/src/types/Voice.zig b/src/types/Voice.zig new file mode 100644 index 0000000..609ee0b --- /dev/null +++ b/src/types/Voice.zig @@ -0,0 +1,5 @@ +file_id: []const u8, +file_unique_id: []const u8, +duration: u64, +mime_type: ?[]const u8 = null, +file_size: ?u64 = null, diff --git a/src/types/WebAppData.zig b/src/types/WebAppData.zig new file mode 100644 index 0000000..e853fdc --- /dev/null +++ b/src/types/WebAppData.zig @@ -0,0 +1,2 @@ +data: []const u8, +button_text: []const u8, diff --git a/src/types/WebAppInfo.zig b/src/types/WebAppInfo.zig new file mode 100644 index 0000000..02fcc5e --- /dev/null +++ b/src/types/WebAppInfo.zig @@ -0,0 +1 @@ +url: []const u8, diff --git a/src/types/WriteAccessAllowed.zig b/src/types/WriteAccessAllowed.zig new file mode 100644 index 0000000..2ff3259 --- /dev/null +++ b/src/types/WriteAccessAllowed.zig @@ -0,0 +1,3 @@ +from_request: ?bool = null, +web_app_name: ?[]const u8 = null, +from_attachment_menu: ?bool = null, diff --git a/src/types/background_fill.zig b/src/types/background_fill.zig new file mode 100644 index 0000000..86aaa59 --- /dev/null +++ b/src/types/background_fill.zig @@ -0,0 +1,17 @@ +const json = @import("../json.zig"); + +pub const BackgroundFill = union(enum) { + solid: struct { + color: u24, + }, + gradient: struct { + top_color: u24, + bottom_color: u24, + rotation_angle: u16, + }, + freeform_gradient: struct { + colors: []const u24, + }, + + pub const jsonParse = json.makeJsonParse(BackgroundFill); +}; diff --git a/src/types/background_type.zig b/src/types/background_type.zig new file mode 100644 index 0000000..220465a --- /dev/null +++ b/src/types/background_type.zig @@ -0,0 +1,30 @@ +const json = @import("../json.zig"); + +const BackgroundFill = @import("background_fill.zig").BackgroundFill; +const Document = @import("Document.zig"); + +pub const BackgroundType = union(enum) { + fill: struct { + fill: BackgroundFill, + dark_theme_dimming: u8, + }, + wallpaper: struct { + document: Document, + dark_theme_dimming: u8, + is_blurred: bool = false, + is_moving: bool = false, + }, + pattern: struct { + document: Document, + fill: BackgroundFill, + intensity: u8, + is_inverted: bool = false, + is_moving: bool = false, + }, + chat_theme: struct { + theme_name: []const u8, + }, + + pub const jsonParse = json.makeJsonParse(BackgroundType); + pub const jsonParseFromValue = json.makeJsonParseFromValue(BackgroundType); +}; diff --git a/src/types/chat_boost_source.zig b/src/types/chat_boost_source.zig new file mode 100644 index 0000000..ead19a0 --- /dev/null +++ b/src/types/chat_boost_source.zig @@ -0,0 +1,20 @@ +const json = @import("../json.zig"); + +const User = @import("User.zig"); + +pub const ChatBoostSource = union(enum) { + premium: struct { + user: User, + }, + gift_code: struct { + user: User, + }, + giveaway: struct { + giveaway_message_id: u64, + user: ?User = null, + is_unclaimed: bool = false, + }, + + pub const jsonParse = json.makeJsonParse(ChatBoostSource); + pub const jsonParseFromValue = json.makeJsonParseFromValue(ChatBoostSource); +}; diff --git a/src/types/chat_member.zig b/src/types/chat_member.zig new file mode 100644 index 0000000..7650299 --- /dev/null +++ b/src/types/chat_member.zig @@ -0,0 +1,63 @@ +const json = @import("../json.zig"); + +const User = @import("User.zig"); + +pub const ChatMember = union(enum) { + creator: struct { + user: User, + is_anonymous: bool, + custom_title: ?[]const u8 = null, + }, + administrator: struct { + user: User, + can_be_edited: bool, + is_anonymous: bool, + can_manage_chat: bool, + can_delete_messages: bool, + can_manage_video_chats: bool, + can_restrict_members: bool, + can_promote_members: bool, + can_change_info: bool, + can_invite_users: bool, + can_post_stories: bool, + can_edit_stories: bool, + can_delete_stories: bool, + can_post_messages: ?bool = null, + can_edit_messages: ?bool = null, + can_pin_messages: ?bool = null, + can_manage_topics: ?bool = null, + custom_title: ?[]const u8 = null, + }, + member: struct { + user: User, + }, + restricted: struct { + user: User, + is_member: bool, + can_send_messages: bool, + can_send_audios: bool, + can_send_documents: bool, + can_send_photos: bool, + can_send_videos: bool, + can_send_video_notes: bool, + can_send_voice_notes: bool, + can_send_polls: bool, + can_send_other_messages: bool, + can_add_web_page_previews: bool, + can_change_info: bool, + can_invite_users: bool, + can_pin_messages: bool, + can_manage_topics: bool, + until_date: u64, + }, + left: struct { + user: User, + }, + banned: struct { + user: User, + until_date: u64, + }, + + pub const jsonParse = json.makeJsonParse(ChatMember); + pub const jsonParseFromValue = json.makeJsonParseFromValueWithTag(ChatMember, "status"); +}; diff --git a/src/types/message_origin.zig b/src/types/message_origin.zig new file mode 100644 index 0000000..5ca1f9f --- /dev/null +++ b/src/types/message_origin.zig @@ -0,0 +1,29 @@ +const json = @import("../json.zig"); + +const Chat = @import("Chat.zig"); +const User = @import("User.zig"); + +pub const MessageOrigin = union(enum) { + user: struct { + date: u64, + sender_user: User, + }, + hidden_user: struct { + date: u64, + sender_user_name: []const u8, + }, + chat: struct { + date: u64, + sender_chat: Chat, + author_signature: ?[]const u8, + }, + channel: struct { + date: u64, + chat: Chat, + message_id: u64, + author_signature: ?[]const u8, + }, + + pub const jsonParse = json.makeJsonParse(MessageOrigin); + pub const jsonParseFromValue = json.makeJsonParseFromValue(MessageOrigin); +}; diff --git a/src/types/paid_media.zig b/src/types/paid_media.zig new file mode 100644 index 0000000..3b50250 --- /dev/null +++ b/src/types/paid_media.zig @@ -0,0 +1,21 @@ +const json = @import("../json.zig"); + +const PhotoSize = @import("PhotoSize.zig"); +const Video = @import("Video.zig"); + +pub const PaidMedia = union(enum) { + preview: struct { + width: ?u64 = null, + height: ?u64 = null, + duration: ?u64 = null, + }, + photo: struct { + photo: []PhotoSize, + }, + video: struct { + video: Video, + }, + + pub const jsonParse = json.makeJsonParse(PaidMedia); + pub const jsonParseFromValue = json.makeJsonParseFromValue(PaidMedia); +}; diff --git a/src/types/parse_mode.zig b/src/types/parse_mode.zig new file mode 100644 index 0000000..7285c64 --- /dev/null +++ b/src/types/parse_mode.zig @@ -0,0 +1,5 @@ +pub const ParseMode = enum { + markdownv2, + html, + markdown, +}; diff --git a/src/types/reaction_type.zig b/src/types/reaction_type.zig new file mode 100644 index 0000000..416def9 --- /dev/null +++ b/src/types/reaction_type.zig @@ -0,0 +1,13 @@ +const json = @import("../json.zig"); + +pub const ReactionType = union(enum) { + emoji: struct { + emoji: []const u8, + }, + custom_emoji: struct { + custom_emoji_id: []const u8, + }, + + pub const jsonParse = json.makeJsonParse(ReactionType); + pub const jsonParseFromValue = json.makeJsonParseFromValue(ReactionType); +}; -- cgit v1.2.3