1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-03 17:55:52 +03:00

Сравнить коммиты

...

3 Коммитов

Автор SHA1 Сообщение Дата
Max Melentiev
99fbe41b16 Fixed support for *channel_post updates 2016-12-09 13:33:55 +03:00
Max Melentiev
88178113d7 Support (edited_)channel_post updates, add api methods from 2.3, 2.3.1 2016-12-09 13:23:58 +03:00
printercu
1a2ac0dd83 Update README.md 2016-11-16 21:31:02 +03:00
8 изменённых файлов: 63 добавлений и 43 удалений

Просмотреть файл

@@ -1,3 +1,8 @@
# 0.10.2
- Support `(edited_)channel_post` updates.
- New methods from 2.3, 2.3.1 API updates.
# 0.10.0 # 0.10.0
- Integration helpers for RSpec. - Integration helpers for RSpec.

Просмотреть файл

@@ -13,7 +13,7 @@ group :development do
gem 'pry', '~> 0.10.1' gem 'pry', '~> 0.10.1'
gem 'pry-byebug', '~> 3.2.0' gem 'pry-byebug', '~> 3.2.0'
gem 'telegram-bot-types', '~> 0.2.0' gem 'telegram-bot-types', '~> 0.3.0'
gem 'rspec', '~> 3.5.0' gem 'rspec', '~> 3.5.0'
gem 'rspec-its', '~> 1.1.0' gem 'rspec-its', '~> 1.1.0'

Просмотреть файл

@@ -24,6 +24,9 @@ Here is sample [telegram_bot_app](https://github.com/telegram-bot-rb/telegram_bo
with session, keyboards and inline queries. with session, keyboards and inline queries.
Run it on your local machine in 1 minute! Run it on your local machine in 1 minute!
And here is [app teamplate](https://github.com/telegram-bot-rb/rails_template)
to generate clean app in seconds.
## Installation ## Installation
Add this line to your application's Gemfile: Add this line to your application's Gemfile:

Просмотреть файл

@@ -60,30 +60,28 @@ module Telegram
raise Error, err_msg raise Error, err_msg
end end
# Splited to the sections similar to API docs.
%w( %w(
deleteWebhook
getUpdates
getWebhookInfo
setWebhook
answerCallbackQuery answerCallbackQuery
answerInlineQuery
editMessageCaption
editMessageReplyMarkup
editMessageText
forwardMessage forwardMessage
getChat getChat
getChatAdministrators getChatAdministrators
getChatMember getChatMember
getChatMembersCount getChatMembersCount
getFile getFile
getGameHighScores
getMe getMe
getUpdates
getUserProfilePhotos getUserProfilePhotos
getWebhookInfo
kickChatMember kickChatMember
leaveChat leaveChat
sendAudio sendAudio
sendChatAction sendChatAction
sendContact sendContact
sendDocument sendDocument
sendGame
sendLocation sendLocation
sendMessage sendMessage
sendPhoto sendPhoto
@@ -91,9 +89,17 @@ module Telegram
sendVenue sendVenue
sendVideo sendVideo
sendVoice sendVoice
setGameScore
setWebhook
unbanChatMember unbanChatMember
editMessageCaption
editMessageReplyMarkup
editMessageText
answerInlineQuery
getGameHighScores
sendGame
setGameScore
).each do |method| ).each do |method|
define_method(method.underscore) { |*args| request(method, *args) } define_method(method.underscore) { |*args| request(method, *args) }
end end

Просмотреть файл

@@ -139,9 +139,9 @@ module Telegram
# Helper for asserting message is sent. Note that options are checked # Helper for asserting message is sent. Note that options are checked
# with `hash_including`. For strict checks use #make_telegram_request. # with `hash_including`. For strict checks use #make_telegram_request.
def send_telegram_message(bot, text = nil, options = {}) def send_telegram_message(bot, text = nil, options = {})
description = "send telegram message #{text.inspect}"
text = a_string_matching(text) if text.is_a?(Regexp) text = a_string_matching(text) if text.is_a?(Regexp)
options = options.merge(text: text) if text options = options.merge(text: text) if text
description = "send telegram message #{text.inspect}"
MakeTelegramRequest.new(bot, :sendMessage, description: description). MakeTelegramRequest.new(bot, :sendMessage, description: description).
with(hash_including(options)) with(hash_including(options))
end end

Просмотреть файл

@@ -50,7 +50,7 @@ module Telegram
# ControllerClass.new(bot, from: telegram_user, chat: telegram_chat). # ControllerClass.new(bot, from: telegram_user, chat: telegram_chat).
# process(:help, *args) # process(:help, *args)
# #
class UpdatesController < AbstractController::Base class UpdatesController < AbstractController::Base # rubocop:disable ClassLength
abstract! abstract!
require 'telegram/bot/updates_controller/session' require 'telegram/bot/updates_controller/session'
@@ -80,10 +80,12 @@ module Telegram
PAYLOAD_TYPES = %w( PAYLOAD_TYPES = %w(
message message
edited_message
channel_post
edited_channel_post
inline_query inline_query
chosen_inline_result chosen_inline_result
callback_query callback_query
edited_message
).freeze ).freeze
CMD_REGEX = %r{\A/([a-z\d_]{,31})(@(\S+))?(\s|$)}i CMD_REGEX = %r{\A/([a-z\d_]{,31})(@(\S+))?(\s|$)}i
CONFLICT_CMD_REGEX = Regexp.new("^(#{PAYLOAD_TYPES.join('|')}|\\d)") CONFLICT_CMD_REGEX = Regexp.new("^(#{PAYLOAD_TYPES.join('|')}|\\d)")
@@ -181,11 +183,13 @@ module Telegram
cmd &&= self.class.action_for_command(cmd) cmd &&= self.class.action_for_command(cmd)
[true, cmd, args] if cmd [true, cmd, args] if cmd
end end
alias_method :action_for_channel_post, :action_for_message
# It doesn't extract commands from edited messages. Just process # It doesn't extract commands from edited messages. Just process
# them as usual ones. # them as usual ones.
def action_for_edited_message def action_for_edited_message
end end
alias_method :action_for_edited_channel_post, :action_for_edited_message
def action_for_inline_query def action_for_inline_query
[false, payload_type, [payload['query'], payload['offset']]] [false, payload_type, [payload['query'], payload['offset']]]

Просмотреть файл

@@ -1,6 +1,6 @@
module Telegram module Telegram
module Bot module Bot
VERSION = '0.10.0'.freeze VERSION = '0.10.2'.freeze
def self.gem_version def self.gem_version
Gem::Version.new VERSION Gem::Version.new VERSION

Просмотреть файл

@@ -102,42 +102,44 @@ RSpec.describe Telegram::Bot::UpdatesController do
it { should eq [false, payload_type, payload.values_at(:data)] } it { should eq [false, payload_type, payload.values_at(:data)] }
end end
context 'when payload is edited_message' do
let(:payload_type) { 'edited_message' }
it { should eq [false, payload_type, [payload]] }
end
context 'when payload is not supported' do context 'when payload is not supported' do
let(:payload_type) { '_unsupported_' } let(:payload_type) { '_unsupported_' }
it { should eq [false, :unsupported_payload_type, []] } it { should eq [false, :unsupported_payload_type, []] }
end end
context 'when payload is message' do %w(message channel_post).each do |type|
let(:payload_type) { 'message' } context 'when payload is edited_message' do
let(:payload) { {'text' => text} } let(:payload_type) { "edited_#{type}" }
let(:text) { 'test' } it { should eq [false, payload_type, [payload]] }
it { should eq [false, payload_type, [payload]] }
context 'with command' do
let(:text) { "/test#{"@#{mention}" if mention} arg 1 2" }
let(:mention) {}
it { should eq [true, 'test', %w(arg 1 2)] }
context 'with mention' do
let(:mention) { bot.username }
it { should eq [true, 'test', %w(arg 1 2)] }
end
context 'with mention for other bot' do
let(:mention) { other_bot_name }
it { should eq [false, 'message', [payload]] }
end
end end
context 'without text' do context 'when payload is message' do
let(:payload) { {'audio' => {'file_id' => 123}} } let(:payload_type) { type }
let(:payload) { {'text' => text} }
let(:text) { 'test' }
it { should eq [false, payload_type, [payload]] } it { should eq [false, payload_type, [payload]] }
context 'with command' do
let(:text) { "/test#{"@#{mention}" if mention} arg 1 2" }
let(:mention) {}
it { should eq [true, 'test', %w(arg 1 2)] }
context 'with mention' do
let(:mention) { bot.username }
it { should eq [true, 'test', %w(arg 1 2)] }
end
context 'with mention for other bot' do
let(:mention) { other_bot_name }
it { should eq [false, payload_type, [payload]] }
end
end
context 'without text' do
let(:payload) { {'audio' => {'file_id' => 123}} }
it { should eq [false, payload_type, [payload]] }
end
end end
end end
end end