telegram-webhooks 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ed5d036d01bde71e42d38b13d03a7e5c00e0950b
4
+ data.tar.gz: 299d4f61442d2c12dac11983bf10e4ba8d2cec89
5
+ SHA512:
6
+ metadata.gz: 9e038cdb1646acdb7cb8339e577ad9a558646bf68c143920d2c4cb6c7ceaff76d95eb915a4af49624ff6501510aff75d88ea329a73888f7b61c691a26fe3ff5f
7
+ data.tar.gz: e38d3bfbf1dd14d454957049ecde4d51598fa0424e0a7f525a281dc6526418f538b98ee5f8b4a5a2e11227b135c0172247e666ff36a93024ce7b9a266db14e19
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ require 'net/http'
3
+ require 'json'
4
+
5
+ require 'telegram/bot'
6
+ require 'telegram/chat'
7
+ require 'telegram/message'
8
+ require 'telegram/update'
9
+ require 'telegram/user'
10
+
11
+ # Is a representation of Telegram API
12
+ module Telegram
13
+ @telegram_token = ''
14
+
15
+ def self.token=(telegram_token)
16
+ @telegram_token = telegram_token
17
+ end
18
+
19
+ def self.method_missing(method_name, *args, &_block)
20
+ uri = URI("https://api.telegram.org/bot#{@telegram_token}/#{method_name}")
21
+ Net::HTTP.post_form(uri, args.first)
22
+ end
23
+
24
+ def self.path_verified(path)
25
+ path.start_with? "/#{@telegram_token}"
26
+ end
27
+
28
+ def self.parse_update(raw_update)
29
+ Update.from_hash JSON.parse(raw_update)
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Encapsulates the Bot behavior, inherit your app from Bot class
4
+ class Bot
5
+ def call(env)
6
+ return [403, {}, []] unless Telegram.path_verified env['PATH_INFO']
7
+
8
+ update = Telegram.parse_update(env['rack.input'].read)
9
+
10
+ self.class.commands.each do |command, block|
11
+ instance_exec(update, &block) if update.message.contains_command?(command)
12
+ end
13
+
14
+ [200, {}, []]
15
+ end
16
+
17
+ def self.commands
18
+ @commands ||= {}
19
+ end
20
+
21
+ def self.on(command, &block)
22
+ commands[:"#{command}"] = block
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Is a representation of Telegrams Chat object
4
+ class Chat
5
+ attr_reader :id, :type, :title, :username, :first_name, :last_name
6
+
7
+ def self.from_hash(chat)
8
+ return nil unless chat.is_a? Hash
9
+
10
+ Chat.new(id: chat['id'], type: chat['type'], title: chat['title'], username: chat['username'], first_name: chat['first_name'], last_name: chat['last_name'])
11
+ end
12
+
13
+ def initialize(id:, type:, title: nil, username: nil, first_name: nil, last_name: nil)
14
+ @id = id
15
+ @type = type
16
+ @title = title
17
+ @username = username
18
+ @first_name = first_name
19
+ @last_name = last_name
20
+ end
21
+
22
+ def reply(text, opts = {})
23
+ Telegram.sendMessage opts.merge(chat_id: id, text: text)
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Is a representation of Telegrams Message object
4
+ class Message
5
+ attr_reader :chat, :text
6
+
7
+ def self.from_hash(message)
8
+ return nil unless message.is_a? Hash
9
+
10
+ chat = Chat.from_hash message['chat']
11
+ from = User.from_hash message['from']
12
+
13
+ Message.new(message_id: message['message_id'], from: from, chat: chat, text: message['text'])
14
+ end
15
+
16
+ def initialize(message_id:, from:nil, chat:, text:)
17
+ @message_id = message_id
18
+ @from = from
19
+ @chat = chat
20
+ @text = text
21
+ end
22
+
23
+ def contains_command?(command)
24
+ if command.is_a?(Symbol) && text.split(' ').first.eql?("/#{command}")
25
+ true
26
+ elsif text.start_with?(command.to_s)
27
+ true
28
+ else
29
+ false
30
+ end
31
+ end
32
+
33
+ def reply(text, opts = {})
34
+ chat.reply text, opts.merge(reply_to_message_id: @message_id)
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Is a representation of Telegrams Update object
4
+ class Update
5
+ attr_reader :message
6
+
7
+ def self.from_hash(update)
8
+ return nil unless update.is_a? Hash
9
+
10
+ message = Message.from_hash update['message']
11
+
12
+ Update.new(update_id: update['update_id'], message: message)
13
+ end
14
+
15
+ def initialize(update_id:, message: nil, inline_query: nil, chosen_inline_result: nil)
16
+ @update_id = update_id
17
+ @message = message
18
+ @inline_query = inline_query
19
+ @chosen_inline_result = chosen_inline_result
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Is a representation of Telegrams user object
4
+ class User
5
+ attr_reader :first_name, :last_name, :username
6
+
7
+ def self.from_hash(user)
8
+ return nil unless user.is_a? Hash
9
+
10
+ User.new(id: user['id'], first_name: user['first_name'], last_name: user['last_name'], username: user['username'])
11
+ end
12
+
13
+ def initialize(id:, first_name:, last_name:nil, username:nil)
14
+ @id = id
15
+ @first_name = first_name
16
+ @last_name = last_name
17
+ @username = username
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: telegram-webhooks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Steffen Schröder
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.4
27
+ description: This project gives you a nice DSL-like interface for the Telegram Bot
28
+ API
29
+ email: steffen@schroeder-blog.de
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - "./lib/telegram.rb"
35
+ - "./lib/telegram/bot.rb"
36
+ - "./lib/telegram/chat.rb"
37
+ - "./lib/telegram/message.rb"
38
+ - "./lib/telegram/update.rb"
39
+ - "./lib/telegram/user.rb"
40
+ homepage: https://github.com/ChaosSteffen/telegram-webhooks
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.5.1
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: A DSL-like interface for the Telegram messengers Bot API
64
+ test_files: []