From a48699c7c3e2da3e2689de57f2ab33e99c6a1128 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 25 Dec 2025 17:37:39 -0800 Subject: [PATCH] [Claude Haiki] Update to new, working Crystal version --- shard.yml | 2 +- spec/telepathy_spec.cr | 6 +- src/telepathy/bot.cr | 8 +- src/telepathy/model/audio.cr | 27 +++-- src/telepathy/model/chat.cr | 52 ++++++--- src/telepathy/model/contact.cr | 19 +++- src/telepathy/model/document.cr | 23 ++-- src/telepathy/model/location.cr | 11 +- src/telepathy/model/message.cr | 152 ++++++++++++++++++-------- src/telepathy/model/message_entity.cr | 25 +++-- src/telepathy/model/photo_size.cr | 19 +++- src/telepathy/model/response.cr | 11 +- src/telepathy/model/update.cr | 28 +++-- src/telepathy/model/user.cr | 27 +++-- src/telepathy/model/venue.cr | 19 +++- src/telepathy/model/video.cr | 31 ++++-- src/telepathy/model/video_note.cr | 23 ++-- src/telepathy/model/voice.cr | 19 +++- 18 files changed, 344 insertions(+), 158 deletions(-) diff --git a/shard.yml b/shard.yml index b125767..808b198 100644 --- a/shard.yml +++ b/shard.yml @@ -4,6 +4,6 @@ version: 0.1.2 authors: - Danila Fedorin -crystal: 0.23.1 +crystal: 1.0.0 license: MIT diff --git a/spec/telepathy_spec.cr b/spec/telepathy_spec.cr index fb93ffb..809304e 100644 --- a/spec/telepathy_spec.cr +++ b/spec/telepathy_spec.cr @@ -1,9 +1,7 @@ require "./spec_helper" describe Telepathy do - # TODO: Write tests - - it "works" do - false.should eq(true) + it "loads the library" do + Telepathy.should be_truthy end end diff --git a/src/telepathy/bot.cr b/src/telepathy/bot.cr index f9e01ad..8e4839b 100644 --- a/src/telepathy/bot.cr +++ b/src/telepathy/bot.cr @@ -46,19 +46,19 @@ module Telepathy Utils.send_photo(@api_token, chat_id, photo, caption, disable_notification, reply_to_message_id) end - def command(command_name, &block: Update, Array(String) -> Void) + def command(command_name, &block : Update, Array(String) -> Void) @command_hooks[command_name] = block end - def message(&block: Update -> Void) + def message(&block : Update -> Void) @message_hooks.push(block) end - def poll_start(&block: -> Void) + def poll_start(&block : -> Void) @poll_start_hooks.push(block); end - def poll_end(&block: -> Void) + def poll_end(&block : -> Void) @poll_end_hooks.push(block); end diff --git a/src/telepathy/model/audio.cr b/src/telepathy/model/audio.cr index 2e3e868..c65f5f1 100644 --- a/src/telepathy/model/audio.cr +++ b/src/telepathy/model/audio.cr @@ -2,13 +2,24 @@ require "json" module Telepathy class Audio - JSON.mapping( - file_id: String, - duration: Int64, - performer: String?, - title: String?, - mime_type: String?, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String + + @[JSON::Field(key: "duration")] + property duration : Int64 + + @[JSON::Field(key: "performer")] + property performer : String? + + @[JSON::Field(key: "title")] + property title : String? + + @[JSON::Field(key: "mime_type")] + property mime_type : String? + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end diff --git a/src/telepathy/model/chat.cr b/src/telepathy/model/chat.cr index aa47610..1127201 100644 --- a/src/telepathy/model/chat.cr +++ b/src/telepathy/model/chat.cr @@ -3,20 +3,42 @@ require "./message.cr" module Telepathy class Chat - JSON.mapping( - id: Int64, - type: String, - title: String?, - username: String?, - first_name: String?, - last_name: String?, - all_members_are_administrators: Bool?, - # TODO photo - description: String?, - invite_link: String?, - pinned_message: Message?, - sticker_set_name: String?, - can_set_sticker_set: Bool? - ) + include JSON::Serializable + + @[JSON::Field(key: "id")] + property id : Int64 + + @[JSON::Field(key: "type")] + property type : String + + @[JSON::Field(key: "title")] + property title : String? + + @[JSON::Field(key: "username")] + property username : String? + + @[JSON::Field(key: "first_name")] + property first_name : String? + + @[JSON::Field(key: "last_name")] + property last_name : String? + + @[JSON::Field(key: "all_members_are_administrators")] + property all_members_are_administrators : Bool? + + @[JSON::Field(key: "description")] + property description : String? + + @[JSON::Field(key: "invite_link")] + property invite_link : String? + + @[JSON::Field(key: "pinned_message")] + property pinned_message : Message? + + @[JSON::Field(key: "sticker_set_name")] + property sticker_set_name : String? + + @[JSON::Field(key: "can_set_sticker_set")] + property can_set_sticker_set : Bool? end end diff --git a/src/telepathy/model/contact.cr b/src/telepathy/model/contact.cr index 564858b..08cc015 100644 --- a/src/telepathy/model/contact.cr +++ b/src/telepathy/model/contact.cr @@ -2,11 +2,18 @@ require "json" module Telepathy class Contact - JSON.mapping( - phone_number: String, - first_name: String, - last_name: String?, - user_id: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "phone_number")] + property phone_number : String + + @[JSON::Field(key: "first_name")] + property first_name : String + + @[JSON::Field(key: "last_name")] + property last_name : String? + + @[JSON::Field(key: "user_id")] + property user_id : Int64? end end diff --git a/src/telepathy/model/document.cr b/src/telepathy/model/document.cr index 1fe9754..f78c880 100644 --- a/src/telepathy/model/document.cr +++ b/src/telepathy/model/document.cr @@ -3,12 +3,21 @@ require "./photo_size.cr" module Telepathy class Document - JSON.mapping( - file_id: String, - thumb: PhotoSize?, - file_name: String?, - mime_type: String?, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String + + @[JSON::Field(key: "thumb")] + property thumb : PhotoSize? + + @[JSON::Field(key: "file_name")] + property file_name : String? + + @[JSON::Field(key: "mime_type")] + property mime_type : String? + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end diff --git a/src/telepathy/model/location.cr b/src/telepathy/model/location.cr index 796aae5..a7a0478 100644 --- a/src/telepathy/model/location.cr +++ b/src/telepathy/model/location.cr @@ -2,9 +2,12 @@ require "json" module Telepathy class Location - JSON.mapping( - longitude: Float32, - latitude: Float32 - ) + include JSON::Serializable + + @[JSON::Field(key: "longitude")] + property longitude : Float32 + + @[JSON::Field(key: "latitude")] + property latitude : Float32 end end diff --git a/src/telepathy/model/message.cr b/src/telepathy/model/message.cr index daf02f8..49e179d 100644 --- a/src/telepathy/model/message.cr +++ b/src/telepathy/model/message.cr @@ -14,48 +14,114 @@ require "./venue.cr" module Telepathy class Message - JSON.mapping( - message_id: Int64, - from: User?, - date: Int64, - chat: Chat, - forward_from: User?, - forward_from_chat: Chat?, - forward_from_message_id: Int64?, - forward_signature: String?, - forward_date: Int64?, - reply_to_message: Message?, - edit_date: Int64?, - media_group_id: String?, - author_signature: String?, - text: String?, - entities: Array(MessageEntity)?, - caption_entities: Array(MessageEntity)?, - audio: Audio?, - document: Document?, - photo: Array(PhotoSize)?, - video: Video?, - voice: Voice?, - video_note: VideoNote?, - # TODO game - # TODO sticker - caption: String?, - contact: Contact?, - location: Location?, - venue: Venue?, - new_chat_members: Array(User)?, - left_chat_member: User?, - new_chat_title: String?, - # new_chat_photo - delete_chat_photo: Bool?, - group_chat_created: Bool?, - supergroup_chat_created: Bool?, - channel_chat_created: Bool?, - migrate_to_chat_id: Int64?, - migrate_from_chat_id: Int64?, - pinned_message: Message? - # invoice - # successful_payment - ) + include JSON::Serializable + + @[JSON::Field(key: "message_id")] + property message_id : Int64 + + @[JSON::Field(key: "from")] + property from : User? + + @[JSON::Field(key: "date")] + property date : Int64 + + @[JSON::Field(key: "chat")] + property chat : Chat + + @[JSON::Field(key: "forward_from")] + property forward_from : User? + + @[JSON::Field(key: "forward_from_chat")] + property forward_from_chat : Chat? + + @[JSON::Field(key: "forward_from_message_id")] + property forward_from_message_id : Int64? + + @[JSON::Field(key: "forward_signature")] + property forward_signature : String? + + @[JSON::Field(key: "forward_date")] + property forward_date : Int64? + + @[JSON::Field(key: "reply_to_message")] + property reply_to_message : Message? + + @[JSON::Field(key: "edit_date")] + property edit_date : Int64? + + @[JSON::Field(key: "media_group_id")] + property media_group_id : String? + + @[JSON::Field(key: "author_signature")] + property author_signature : String? + + @[JSON::Field(key: "text")] + property text : String? + + @[JSON::Field(key: "entities")] + property entities : Array(MessageEntity)? + + @[JSON::Field(key: "caption_entities")] + property caption_entities : Array(MessageEntity)? + + @[JSON::Field(key: "audio")] + property audio : Audio? + + @[JSON::Field(key: "document")] + property document : Document? + + @[JSON::Field(key: "photo")] + property photo : Array(PhotoSize)? + + @[JSON::Field(key: "video")] + property video : Video? + + @[JSON::Field(key: "voice")] + property voice : Voice? + + @[JSON::Field(key: "video_note")] + property video_note : VideoNote? + + @[JSON::Field(key: "caption")] + property caption : String? + + @[JSON::Field(key: "contact")] + property contact : Contact? + + @[JSON::Field(key: "location")] + property location : Location? + + @[JSON::Field(key: "venue")] + property venue : Venue? + + @[JSON::Field(key: "new_chat_members")] + property new_chat_members : Array(User)? + + @[JSON::Field(key: "left_chat_member")] + property left_chat_member : User? + + @[JSON::Field(key: "new_chat_title")] + property new_chat_title : String? + + @[JSON::Field(key: "delete_chat_photo")] + property delete_chat_photo : Bool? + + @[JSON::Field(key: "group_chat_created")] + property group_chat_created : Bool? + + @[JSON::Field(key: "supergroup_chat_created")] + property supergroup_chat_created : Bool? + + @[JSON::Field(key: "channel_chat_created")] + property channel_chat_created : Bool? + + @[JSON::Field(key: "migrate_to_chat_id")] + property migrate_to_chat_id : Int64? + + @[JSON::Field(key: "migrate_from_chat_id")] + property migrate_from_chat_id : Int64? + + @[JSON::Field(key: "pinned_message")] + property pinned_message : Message? end end diff --git a/src/telepathy/model/message_entity.cr b/src/telepathy/model/message_entity.cr index 88aad95..b36fc97 100644 --- a/src/telepathy/model/message_entity.cr +++ b/src/telepathy/model/message_entity.cr @@ -1,14 +1,23 @@ require "json" require "./user.cr" -module Telepathy +module Telepathy class MessageEntity - JSON.mapping( - type: String, - offset: Int64, - length: Int64, - url: String?, - user: User? - ) + include JSON::Serializable + + @[JSON::Field(key: "type")] + property type : String + + @[JSON::Field(key: "offset")] + property offset : Int64 + + @[JSON::Field(key: "length")] + property length : Int64 + + @[JSON::Field(key: "url")] + property url : String? + + @[JSON::Field(key: "user")] + property user : User? end end diff --git a/src/telepathy/model/photo_size.cr b/src/telepathy/model/photo_size.cr index b90075d..624887d 100644 --- a/src/telepathy/model/photo_size.cr +++ b/src/telepathy/model/photo_size.cr @@ -2,11 +2,18 @@ require "json" module Telepathy class PhotoSize - JSON.mapping( - file_id: String?, - width: Int64, - height: Int64, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String? + + @[JSON::Field(key: "width")] + property width : Int64 + + @[JSON::Field(key: "height")] + property height : Int64 + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end diff --git a/src/telepathy/model/response.cr b/src/telepathy/model/response.cr index 886c8f3..98806af 100644 --- a/src/telepathy/model/response.cr +++ b/src/telepathy/model/response.cr @@ -2,9 +2,12 @@ require "json" module Telepathy class Response(T) - JSON.mapping( - ok: Bool, - result: T - ) + include JSON::Serializable + + @[JSON::Field(key: "ok")] + property ok : Bool + + @[JSON::Field(key: "result")] + property result : T end end diff --git a/src/telepathy/model/update.cr b/src/telepathy/model/update.cr index 2a1e6fd..eb405c3 100644 --- a/src/telepathy/model/update.cr +++ b/src/telepathy/model/update.cr @@ -2,17 +2,21 @@ require "json" module Telepathy class Update - JSON.mapping( - update_id: Int64, - message: Message?, - edited_message: Message?, - channel_post: Message?, - edited_channel_post: Message? - # TODO inline_query - # TODO chosen_inline_result - # TODO callback_query - # shipping_query - # pre_checkout_query - ) + include JSON::Serializable + + @[JSON::Field(key: "update_id")] + property update_id : Int64 + + @[JSON::Field(key: "message")] + property message : Message? + + @[JSON::Field(key: "edited_message")] + property edited_message : Message? + + @[JSON::Field(key: "channel_post")] + property channel_post : Message? + + @[JSON::Field(key: "edited_channel_post")] + property edited_channel_post : Message? end end diff --git a/src/telepathy/model/user.cr b/src/telepathy/model/user.cr index cf60651..f6f4b0c 100644 --- a/src/telepathy/model/user.cr +++ b/src/telepathy/model/user.cr @@ -2,13 +2,24 @@ require "json" module Telepathy class User - JSON.mapping( - id: Int64, - is_bot: Bool, - first_name: String, - last_name: String?, - username: String?, - language_code: String? - ) + include JSON::Serializable + + @[JSON::Field(key: "id")] + property id : Int64 + + @[JSON::Field(key: "is_bot")] + property is_bot : Bool + + @[JSON::Field(key: "first_name")] + property first_name : String + + @[JSON::Field(key: "last_name")] + property last_name : String? + + @[JSON::Field(key: "username")] + property username : String? + + @[JSON::Field(key: "language_code")] + property language_code : String? end end diff --git a/src/telepathy/model/venue.cr b/src/telepathy/model/venue.cr index cabe902..6075fee 100644 --- a/src/telepathy/model/venue.cr +++ b/src/telepathy/model/venue.cr @@ -3,11 +3,18 @@ require "./location.cr" module Telepathy class Venue - JSON.mapping( - location: Location, - title: String, - address: String, - foursquare_id: String? - ) + include JSON::Serializable + + @[JSON::Field(key: "location")] + property location : Location + + @[JSON::Field(key: "title")] + property title : String + + @[JSON::Field(key: "address")] + property address : String + + @[JSON::Field(key: "foursquare_id")] + property foursquare_id : String? end end diff --git a/src/telepathy/model/video.cr b/src/telepathy/model/video.cr index b2a0c28..7106dd5 100644 --- a/src/telepathy/model/video.cr +++ b/src/telepathy/model/video.cr @@ -3,14 +3,27 @@ require "./photo_size.cr" module Telepathy class Video - JSON.mapping( - file_id: String, - width: Int64, - height: Int64, - duration: Int64, - thumb: PhotoSize?, - mime_type: String?, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String + + @[JSON::Field(key: "width")] + property width : Int64 + + @[JSON::Field(key: "height")] + property height : Int64 + + @[JSON::Field(key: "duration")] + property duration : Int64 + + @[JSON::Field(key: "thumb")] + property thumb : PhotoSize? + + @[JSON::Field(key: "mime_type")] + property mime_type : String? + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end diff --git a/src/telepathy/model/video_note.cr b/src/telepathy/model/video_note.cr index 2906519..690b2c0 100644 --- a/src/telepathy/model/video_note.cr +++ b/src/telepathy/model/video_note.cr @@ -3,12 +3,21 @@ require "./photo_size.cr" module Telepathy class VideoNote - JSON.mapping( - file_id: String, - length: Int64, - duration: Int64, - thumb: PhotoSize?, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String + + @[JSON::Field(key: "length")] + property length : Int64 + + @[JSON::Field(key: "duration")] + property duration : Int64 + + @[JSON::Field(key: "thumb")] + property thumb : PhotoSize? + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end diff --git a/src/telepathy/model/voice.cr b/src/telepathy/model/voice.cr index 7cecd40..d80fc8f 100644 --- a/src/telepathy/model/voice.cr +++ b/src/telepathy/model/voice.cr @@ -3,11 +3,18 @@ require "./photo_size.cr" module Telepathy class Voice - JSON.mapping( - file_id: String, - duration: Int64, - mime_type: String?, - file_size: Int64? - ) + include JSON::Serializable + + @[JSON::Field(key: "file_id")] + property file_id : String + + @[JSON::Field(key: "duration")] + property duration : Int64 + + @[JSON::Field(key: "mime_type")] + property mime_type : String? + + @[JSON::Field(key: "file_size")] + property file_size : Int64? end end