telegramAPI 1.0.0beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8f925231513665a638dfd6b3501547457ce62658
4
+ data.tar.gz: 1b757bde5cd5daa0b677c648d53635d661d1d33f
5
+ SHA512:
6
+ metadata.gz: ef59985fdb020e209247be51d162f6849cd33540ffa5d2f115906d47d21173077e7960dce00956101fce0d1d3f7a18fcfeaa291909059fbdf4ff86f3d5e36daf
7
+ data.tar.gz: af4bb8cc0dbd6e03d8f7a395bfce388358bd5ff805ebb735b6012a0c6d06ca86a6ca28aaa3409b85f67963598bda52cfecc63510e589edc332ef9b7e730924ea
@@ -0,0 +1,87 @@
1
+ require 'open-uri'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'uri'
6
+ require 'rest-client' # sudo gem install rest-client
7
+ require_relative 'TelegramObjects'
8
+
9
+ class TelegramAPI
10
+ @@core = "https://api.telegram.org/bot"
11
+
12
+ def initialize t
13
+ @token = t
14
+ @last_update = 0
15
+ end
16
+
17
+ def query api, params={}
18
+ p=[]
19
+ params_s=""
20
+
21
+ params.each do |param| p<<param.join("=") end
22
+ params_s="?"+p.join("&") if p.length!=0
23
+
24
+ JSON.parse(open(@@core+@token+"/"+api+params_s).read)
25
+ end
26
+
27
+ def getMe
28
+ User.new self.query("getMe")
29
+ end
30
+
31
+ def getUpdates options={}
32
+ r=self.query "getUpdates", {"offset"=>@last_update.to_s}.merge(options)
33
+ if r['ok']!=true then return nil end
34
+ up=ArrayOf.new(r['result'],Update).to_a
35
+ if up[-1]!=nil then @last_update=up[-1].update_id+1 end
36
+ return up
37
+ end
38
+
39
+ def sendMessage to, text, options={}
40
+ Message.new self.query("sendMessage", {"chat_id"=>to.to_s, "text"=>URI::encode(text)}.merge(options))
41
+ end
42
+
43
+ def forwardMessage to, from, msg
44
+ Message.new self.query("forwardMessage", {"chat_id"=>to, "from_chat_id"=>from, "message_id"=>msg})
45
+ end
46
+
47
+ def sendPhoto to, path, options={}
48
+ Message.new JSON.parse(RestClient.post(@@core+@token+"/sendPhoto", {:photo=>File.new(path,'rb'), :chat_id=>to.to_s}.merge(options)).body)["result"]
49
+ end
50
+
51
+ # Max size: 50MB
52
+ # Format: Ogg OPUS. On ubuntu: avconv -i input.ext -acodec libopus output.ogg
53
+ def sendAudio to, path, options={}
54
+ RestClient.post @@core+@token+"/sendAudio", {:audio=>File.new(path, 'rb'), :chat_id=>to.to_s}.merge(options)
55
+ end
56
+
57
+ def sendDocument to, path, options={}
58
+ RestClient.post @@core+@token+"/sendDocument", {:document=>File.new(path,'rb'), :chat_id=>to.to_s}.merge(options)
59
+ end
60
+
61
+ def sendStickerFromFile to, path, options={}
62
+ RestClient.post @@core+@token+"/sendStiker", {:sticker=>File.new(path,'rb'), :chat_id=>to.to_s}.merge(options)
63
+ end
64
+
65
+ def sendSticker to, id, options={}
66
+ RestClient.post @@core+@token+"/sendSticker", {:sticker=>id, :chat_id=>to.to_s}.merge(options)
67
+ end
68
+
69
+ # Max size: 50MB
70
+ # Fromat: mp4
71
+ def sendVideo to, path, options={}
72
+ RestClient.post @@core+@token+"/sendVideo", {:video=>File.new(path,'rb'), :chat_id=>to.to_s}.merge(options)
73
+ end
74
+
75
+ def sendLocation to, lat, long, options={}
76
+ self.query "sendLocation", {"chat_id"=>to, "latitude"=>lat, "longitude"=>long}.merge(options)
77
+ end
78
+
79
+ # act is one between: typing, upload_photo, record_video, record_audio, upload_audio, upload_document, find_location
80
+ def sendChatAction to, act
81
+ self.query "sendChatAction", {"chat_id"=>to, "action"=>act}
82
+ end
83
+
84
+ def getUserProfilePhotos id, options={}
85
+ self.query "getUserProfilePhotos", {"user_id"=>id}.merge(options)
86
+ end
87
+ end
@@ -0,0 +1,198 @@
1
+ class Update
2
+ attr_accessor :update_id, :message
3
+ def initialize json
4
+ return if !json
5
+ @update_id = json["update_id"]
6
+ @message = Message.new json["message"]
7
+ end
8
+ end
9
+
10
+ class User
11
+ attr_accessor :id, :first_name, :last_name, :username
12
+ def initialize json
13
+ return if !json
14
+ @id = json["id"]
15
+ @first_name = json["first_name"]
16
+ @last_name = json["last_name"]
17
+ @username = json["username"]
18
+ end
19
+ end
20
+
21
+ class GroupChat
22
+ attr_accessor :id, :title
23
+ def initialize json
24
+ return if !json
25
+ @id = json["id"]
26
+ @title = json["title"]
27
+ end
28
+ end
29
+
30
+ class ArrayOf
31
+ attr_accessor :array, :type
32
+ def initialize ar, cl
33
+ return if !ar
34
+ @array = []
35
+ @type = cl
36
+ ar.each do |e|
37
+ @array<<cl.new(e)
38
+ end
39
+ end
40
+
41
+ def to_a
42
+ @array
43
+ end
44
+ end
45
+
46
+ class Message
47
+ attr_accessor :message_id, :from, :date, :chat, :forward_from, :forward_date,
48
+ :reply_to_message, :text, :audio, :document, :photo, :sticker, :video,
49
+ :contact, :location, :new_chat_participant, :left_chat_participant,
50
+ :new_chat_title, :new_chat_photo, :delete_chat_photo, :group_chat_create
51
+
52
+ def initialize json
53
+ return if !json
54
+ @message_id = json["message_id"]
55
+ @from = User.new json["from"]
56
+ @date = json["date"]
57
+ @chat = !json["chat"] ? nil : (json["chat"].has_key?("title") ? GroupChat.new(json["chat"]) : User.new(json["chat"]))
58
+ @forward_from = User.new json["forward_from"]
59
+ @forward_date = json["forward_date"]
60
+ @reply_to_message = Message.new json["reply_to_message"]
61
+ @text = json["text"]
62
+ @audio = Audio.new json["audio"]
63
+ @document = Document.new json["document"]
64
+ @photo = ArrayOf.new(json["photo"], PhotoSize).to_a
65
+ @sticker = Sticker.new json["sticker"]
66
+ @video = Video.new json["video"]
67
+ @contact = Contact.new json["contact"]
68
+ @location = Location.new json["location"]
69
+ @new_chat_participant = User.new json["new_chat_participant"]
70
+ @left_chat_participant = User.new json["left_chat_participant"]
71
+ @new_chat_title = json["new_chat_title"]
72
+ @new_chat_photo = ArrayOf.new(json["new_chat_photo"],PhotoSize).to_a
73
+ @delete_chat_photo = json["delete_chat_photo"]
74
+ @group_chat_create = json["group_chat_create"]
75
+ end
76
+ end
77
+
78
+ class PhotoSize
79
+ attr_accessor :file_id, :width, :height, :file_size
80
+ def initialize json
81
+ return if !json
82
+ @file_id = json["file_id"]
83
+ @width = json["width"]
84
+ @height = json["height"]
85
+ @file_size = json["file_size"]
86
+ end
87
+ end
88
+
89
+ class Audio
90
+ attr_accessor :file_id, :duration, :mime_type, :file_size
91
+ def initialize json
92
+ return if !json
93
+ @file_id = json["file_id"]
94
+ @duration = json["duration"]
95
+ @mime_type = json["mime_type"]
96
+ @file_size = json["file_size"]
97
+ end
98
+ end
99
+
100
+ class Document
101
+ attr_accessor :file_id, :thumb, :file_name, :mime_type, :file_size
102
+ def initialize json
103
+ return if !json
104
+ @file_id = json["file_id"]
105
+ @thumb = PhotoSize.new json["thumb"]
106
+ @file_name = json["file_name"]
107
+ @mime_type = json["mime_type"]
108
+ @file_size = json["file_size"]
109
+ end
110
+ end
111
+
112
+ class Sticker
113
+ attr_accessor :file_id, :width, :height, :thumb, :file_size
114
+ def initialize json
115
+ return if !json
116
+ @file_id = json["file_id"]
117
+ @width = json["width"]
118
+ @height = json["height"]
119
+ @thumb = PhotoSize.new json["thumb"]
120
+ @file_size = json["file_size"]
121
+ end
122
+ end
123
+
124
+ class Video
125
+ attr_accessor :file_id, :width, :height, :duration, :thumb, :mime_type, :file_size, :caption
126
+ def initialize json
127
+ return if !json
128
+ @file_id = json["file_id"]
129
+ @width = json["width"]
130
+ @height = json["height"]
131
+ @duration = json["duration"]
132
+ @thumb = PhotoSize.new json["thumb"]
133
+ @mime_type = json["mime_type"]
134
+ @file_size = json["file_size"]
135
+ @caption = json["caption"]
136
+ end
137
+ end
138
+
139
+ class Contact
140
+ attr_accessor :phone_number, :first_name, :last_name, :user_id
141
+ def initialize json
142
+ return if !json
143
+ @phone_number = json["phone_number"]
144
+ @first_name = json["first_name"]
145
+ @last_name = json["last_name"]
146
+ @user_id = json["user_id"]
147
+ end
148
+ end
149
+
150
+ class Location
151
+ attr_accessor :latitude, :longitude
152
+ def initialize json
153
+ return if !json
154
+ @latitute = json["latitude"]
155
+ @longitude = json["longitude"]
156
+ end
157
+ end
158
+
159
+ class UserProfilePhotos
160
+ attr_accessor :total_count, :photos
161
+ def initialize json
162
+ return if !json
163
+ @total_count = json["total_count"]
164
+ @photos = []
165
+ json["photos"].each do |p|
166
+ @photos<<ArrayOf.new(p).to_a
167
+ end
168
+ end
169
+ end
170
+
171
+ class ReplyKeyboardMarkup
172
+ attr_accessor :keyboard, :resize_keyboard, :one_time_keyboard, :selective
173
+ def initialize json
174
+ return if !json
175
+ @keyboard = json["keyboard"]
176
+ @resize_keyboard = json["resize_keyboard"]
177
+ @one_time_keyboard = json["one_time_keyboard"]
178
+ @selective = json["selective"]
179
+ end
180
+ end
181
+
182
+ class ReplyKeyboardHide
183
+ attr_accessor :hide_keyboard, :selective
184
+ def initialize json
185
+ return if !json
186
+ @hide_keyboard = json["hide_keyboard"]
187
+ @selective = json["selective"]
188
+ end
189
+ end
190
+
191
+ class ForceReply
192
+ attr_accessor :force_reply, :selective
193
+ def initialize json
194
+ return if !json
195
+ @force_reply = json["force_reply"]
196
+ @selective = json["selective"]
197
+ end
198
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: telegramAPI
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0beta
5
+ platform: ruby
6
+ authors:
7
+ - Benedetto Nespoli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A lightweight Ruby API for Telegram-Bots
14
+ email: benedetto.nespoli@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/telegramAPI.rb
20
+ - lib/telegramObjects.rb
21
+ homepage: http://rubygems.org/gems/telegramAPI
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">"
37
+ - !ruby/object:Gem::Version
38
+ version: 1.3.1
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.2.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Telegram api for Bots
45
+ test_files: []