tele_notify 0.1.1
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 +7 -0
 - data/.gitignore +6 -0
 - data/Gemfile +17 -0
 - data/README.markdown +123 -0
 - data/Rakefile +34 -0
 - data/lib/generators/tele_notify/migration/migration_generator.rb +35 -0
 - data/lib/generators/tele_notify/migration/templates/active_record/migration.rb +19 -0
 - data/lib/generators/tele_notify/migration/templates/active_record/tele_notify.rb +15 -0
 - data/lib/tele_notify.rb +12 -0
 - data/lib/tele_notify/engine.rb +3 -0
 - data/lib/tele_notify/telegram_controller.rb +13 -0
 - data/lib/tele_notify/telegram_user.rb +56 -0
 - data/lib/tele_notify/version.rb +3 -0
 - data/tele_notify.gemspec +27 -0
 - metadata +88 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bbe50097b22b33be87df0e943fd2e9d73299e60a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3aa23a75e190c554ed96ad13b12c81d26cbbba12
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4879a4cdcf1abcd3facfe76fe70f0e17b036ae6c700ab773d17077be1d3e23b56f50977422c6144ea3fdab7b972492eced586ed04d99efa3e85f3f896a688005
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 41bff14abafba193d77e8a5ab0c2a11604e15f3307879a1d448bfc3b9959847b2b25d5dcb81100de4c947e49b99638e56463f92a9fbdab862c24886476d65664
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            source 'https://rubygems.org'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # Specify your gem's dependencies in acts_as_votable.gemspec
         
     | 
| 
      
 4 
     | 
    
         
            +
            gemspec
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            rails_version = ENV['RAILS_VERSION'] || 'default'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            rails = case rails_version
         
     | 
| 
      
 9 
     | 
    
         
            +
            when 'master'
         
     | 
| 
      
 10 
     | 
    
         
            +
              { :github => 'rails/rails'}
         
     | 
| 
      
 11 
     | 
    
         
            +
            when 'default'
         
     | 
| 
      
 12 
     | 
    
         
            +
              '~> 3.2.0'
         
     | 
| 
      
 13 
     | 
    
         
            +
            else
         
     | 
| 
      
 14 
     | 
    
         
            +
              "~> #{rails_version}"
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            gem 'rails', rails
         
     | 
    
        data/README.markdown
    ADDED
    
    | 
         @@ -0,0 +1,123 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # TeleNotify
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            TeleNotify by [ppati000](http://twitter.com/ppati000) enables your Rails app to send notifications/messages to your users via Telegram's Bot API. Forget email newsletters!
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            A working demo can be tested [here](http://telenotify.herokuapp.com/). For the source, see the [TeleTest repository](https://github.com/ppati000/TeleTest/)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            Note: For any news, questions, suggestions or anything else, contact and/or follow me on [Twitter](http://twitter.com/ppati000) or send me a [mail](mailto:ppati000@me.com)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ### Prerequisites
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Needless to say, you need a Telegram bot account first. To generate a new Telegram bot, message [@botfather](https://telegram.me/botfather) on Telegram. For more information, see the [official guide](https://core.telegram.org/bots#botfather).
         
     | 
| 
      
 14 
     | 
    
         
            +
            During this process, you will obtain a token which you will need in the following steps.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ### Install
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Just add the following to your Gemfile.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 21 
     | 
    
         
            +
            #Gemfile
         
     | 
| 
      
 22 
     | 
    
         
            +
            gem 'tele_notify', '~> 0.1'
         
     | 
| 
      
 23 
     | 
    
         
            +
            ```
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            And follow that up with a ``bundle install``.
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### Setup and Database Migrations
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            TeleNotify uses a telegram_users table to store all users. To
         
     | 
| 
      
 30 
     | 
    
         
            +
            generate and run the migration just use.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                rails generate tele_notify:migration
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            This will also generate a config file in ```config/initializers/tele_notify.rb```. Make sure to set your Telegram token and application URLs here. It should look something like this:
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 37 
     | 
    
         
            +
            #Set your home URL, so Telegram callbacks work
         
     | 
| 
      
 38 
     | 
    
         
            +
            #For production, just use your URL (e.g. https://myapp.com)
         
     | 
| 
      
 39 
     | 
    
         
            +
            #You MUST NOT include a trailing slash and it MUST be https!
         
     | 
| 
      
 40 
     | 
    
         
            +
            #INVALID URLS: e.g. http://myapp.com or https://myapp.com/
         
     | 
| 
      
 41 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_home_url("YOUR PRODUCTION URL")
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            #For development, download ngrok from https://ngrok.com/.
         
     | 
| 
      
 44 
     | 
    
         
            +
            #Extract it and run "./ngrok http 3000"
         
     | 
| 
      
 45 
     | 
    
         
            +
            #Then copy the URL you get from the console window.
         
     | 
| 
      
 46 
     | 
    
         
            +
            #Remember to use the HTTPS URL!
         
     | 
| 
      
 47 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_dev_url("YOUR NGROK DEVELOPMENT URL")
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            #Set your Telegram Bot API token here
         
     | 
| 
      
 50 
     | 
    
         
            +
            #Don't have your token yet? Create your bot using https://telegram.me/botfather
         
     | 
| 
      
 51 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_token("YOUR TOKEN")
         
     | 
| 
      
 52 
     | 
    
         
            +
            ```
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            Next, add two lines of code to make your ApplicationController look like this:
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 57 
     | 
    
         
            +
            #app/controllers/application_controller.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            class ApplicationController < ActionController::Base
         
     | 
| 
      
 59 
     | 
    
         
            +
              protect_from_forgery with: :exception
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              #IMPORTANT! THESE TWO LINES MUST COME AFTER protect_from_forgery!
         
     | 
| 
      
 62 
     | 
    
         
            +
              skip_before_filter :verify_authenticity_token, :only => :webhook
         
     | 
| 
      
 63 
     | 
    
         
            +
              include TeleNotify::Controller
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              #other code...
         
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            Last but not least, add a callback URL for Telegram in ```config/routes.rb```, which must be the same as your token.
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 72 
     | 
    
         
            +
            #config/routes.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            Rails.application.routes.draw do
         
     | 
| 
      
 74 
     | 
    
         
            +
              post '/<your token>' => 'application#webhook'
         
     | 
| 
      
 75 
     | 
    
         
            +
            end
         
     | 
| 
      
 76 
     | 
    
         
            +
            ```
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            Now that everything is done, you can finally run ```rake db:migrate```. Congratulations! Yout successfully installed TeleNotify!
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            ## Using TeleNotify
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            To give users the ability to sign up for your Telegram Notifications, put a link to your telegram bot somewhere in your app. This can be as simple as
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            ```html
         
     | 
| 
      
 85 
     | 
    
         
            +
            <a href="https://telegram.me/YOUR_BOT_USERNAME">Send us a message to receive Push Notifications via Telegram!"</a>
         
     | 
| 
      
 86 
     | 
    
         
            +
            ```
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            Any user that sends a message to your bot will be stored in the database with their telegram_id and their first_name.
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            Send messages to those users like this: (e.g. from some controller in your app)
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 93 
     | 
    
         
            +
            #in some controller action
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            #sends message to a user
         
     | 
| 
      
 96 
     | 
    
         
            +
            TeleNotify::TelegramUser.find(1).send_message("How Obama won the internet: Read more at http://example.com")
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            #finds a user by his Telegram ID and sends him a message
         
     | 
| 
      
 99 
     | 
    
         
            +
            TeleNotify::TelegramUser.find_by(telegram_id: 12345678).send_message("Some other notification")
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            #sends a message to everyone who signed up
         
     | 
| 
      
 102 
     | 
    
         
            +
            TeleNotify::TelegramUser.send_message_to_all("Check out our new stuff!")
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            ```
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            ## Testing
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            All testing is currently here: [TeleTest repository](https://github.com/ppati000/TeleTest/)
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            ## Changes
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            0.1
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              * Initial release
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            ## Contributing
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              Fork it. Commit your changes. Make a pull request :)
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            ## License
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            TeleNotify was initially forked from [Acts as votable](https://github.com/ryanto/acts_as_votable) by ryanto. It is released under the [MIT
         
     | 
| 
      
 123 
     | 
    
         
            +
            License](http://www.opensource.org/licenses/MIT).
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            begin
         
     | 
| 
      
 2 
     | 
    
         
            +
              require 'bundler/setup'
         
     | 
| 
      
 3 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 4 
     | 
    
         
            +
              puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
         
     | 
| 
      
 5 
     | 
    
         
            +
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'rdoc/task'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            RDoc::Task.new(:rdoc) do |rdoc|
         
     | 
| 
      
 10 
     | 
    
         
            +
              rdoc.rdoc_dir = 'rdoc'
         
     | 
| 
      
 11 
     | 
    
         
            +
              rdoc.title    = 'TeleNotify'
         
     | 
| 
      
 12 
     | 
    
         
            +
              rdoc.options << '--line-numbers'
         
     | 
| 
      
 13 
     | 
    
         
            +
              rdoc.rdoc_files.include('README.rdoc')
         
     | 
| 
      
 14 
     | 
    
         
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            Bundler::GemHelper.install_tasks
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Rake::TestTask.new(:test) do |t|
         
     | 
| 
      
 27 
     | 
    
         
            +
              t.libs << 'lib'
         
     | 
| 
      
 28 
     | 
    
         
            +
              t.libs << 'test'
         
     | 
| 
      
 29 
     | 
    
         
            +
              t.pattern = 'test/**/*_test.rb'
         
     | 
| 
      
 30 
     | 
    
         
            +
              t.verbose = false
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            task default: :test
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rails/generators/migration'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module TeleNotify
         
     | 
| 
      
 4 
     | 
    
         
            +
              class MigrationGenerator < Rails::Generators::Base
         
     | 
| 
      
 5 
     | 
    
         
            +
                include Rails::Generators::Migration
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                desc "Generates migration for votable (votes table)"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def self.orm
         
     | 
| 
      
 10 
     | 
    
         
            +
                  Rails::Generators.options[:rails][:orm]
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def self.source_root
         
     | 
| 
      
 14 
     | 
    
         
            +
                  File.join(File.dirname(__FILE__), 'templates', (orm.to_s unless orm.class.eql?(String)) )
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def self.orm_has_migration?
         
     | 
| 
      
 18 
     | 
    
         
            +
                  [:active_record].include? orm
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def self.next_migration_number(path)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  Time.now.utc.strftime("%Y%m%d%H%M%S")
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def create_migration_file
         
     | 
| 
      
 26 
     | 
    
         
            +
                  if self.class.orm_has_migration?
         
     | 
| 
      
 27 
     | 
    
         
            +
                    migration_template 'migration.rb', 'db/migrate/tele_notify_migration.rb'
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                def copy_initializer
         
     | 
| 
      
 32 
     | 
    
         
            +
                  copy_file 'tele_notify.rb', 'config/initializers/tele_notify.rb'
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class TeleNotifyMigration < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              def self.up
         
     | 
| 
      
 4 
     | 
    
         
            +
                create_table :telegram_users do |t|
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.integer :telegram_id
         
     | 
| 
      
 6 
     | 
    
         
            +
                  t.string :first_name
         
     | 
| 
      
 7 
     | 
    
         
            +
                  t.string :username
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  t.timestamps
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                add_index :telegram_users, :telegram_id
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def self.down
         
     | 
| 
      
 16 
     | 
    
         
            +
                drop_table :telegram_users
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #Set your home URL, so Telegram callbacks work
         
     | 
| 
      
 2 
     | 
    
         
            +
            #For production, just use your URL (e.g. https://myapp.com)
         
     | 
| 
      
 3 
     | 
    
         
            +
            #You MUST NOT include a trailing slash and it MUST be https!
         
     | 
| 
      
 4 
     | 
    
         
            +
            #INVALID URLS: e.g. http://myapp.com or https://myapp.com/
         
     | 
| 
      
 5 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_home_url("YOUR PRODUCTION URL")
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            #For development, download ngrok from https://ngrok.com/.
         
     | 
| 
      
 8 
     | 
    
         
            +
            #Extract it and run "./ngrok http 3000"
         
     | 
| 
      
 9 
     | 
    
         
            +
            #Then copy the URL you get from the console window.
         
     | 
| 
      
 10 
     | 
    
         
            +
            #Remember to use the HTTPS URL!
         
     | 
| 
      
 11 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_dev_url("YOUR NGROK DEVELOPMENT URL")
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            #Set your Telegram Bot API token here
         
     | 
| 
      
 14 
     | 
    
         
            +
            #Don't have your token yet? Create your bot using https://telegram.me/botfather
         
     | 
| 
      
 15 
     | 
    
         
            +
            TeleNotify::TelegramUser.configure_token("YOUR TOKEN")
         
     | 
    
        data/lib/tele_notify.rb
    ADDED
    
    
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TeleNotify
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Controller
         
     | 
| 
      
 3 
     | 
    
         
            +
                def webhook
         
     | 
| 
      
 4 
     | 
    
         
            +
                  if params[:message]
         
     | 
| 
      
 5 
     | 
    
         
            +
                    user = TelegramUser.create( { telegram_id: params[:message][:from][:id], first_name: params[:message][:from][:first_name] } )
         
     | 
| 
      
 6 
     | 
    
         
            +
                    if user
         
     | 
| 
      
 7 
     | 
    
         
            +
                      user.send_message("Notifications are now active. To cancel, stop this bot in Telegram.")
         
     | 
| 
      
 8 
     | 
    
         
            +
                    end
         
     | 
| 
      
 9 
     | 
    
         
            +
                    render :nothing => true, :status => :ok
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rest-client'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module TeleNotify
         
     | 
| 
      
 4 
     | 
    
         
            +
              class TelegramUser < ::ActiveRecord::Base
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                validates_presence_of :telegram_id
         
     | 
| 
      
 7 
     | 
    
         
            +
                validates_uniqueness_of :telegram_id
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                @@next_update_id = 0
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def self.configure_home_url(url)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @@home_url = url
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def self.configure_dev_url(url)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @@dev_url = url
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def self.active_url
         
     | 
| 
      
 20 
     | 
    
         
            +
                  if Rails.env.production?
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @@home_url
         
     | 
| 
      
 22 
     | 
    
         
            +
                  else
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @@dev_url
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def self.configure_token(token)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  if token =~ /^[0-9]+:[\w-]+$/ #hacker proof
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @@token = token
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @@url = "https://api.telegram.org/bot" + token + "/"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @@callback_url = active_url + "/" + @@token
         
     | 
| 
      
 33 
     | 
    
         
            +
                    RestClient.post(@@url + "setWebhook", { url: @@callback_url })
         
     | 
| 
      
 34 
     | 
    
         
            +
                  else
         
     | 
| 
      
 35 
     | 
    
         
            +
                    raise "Invalid token! Please add a valid Telegram token in config/initializers/tele_notify.rb or see https://github.com/ppati000/tele_notify for further instructions."
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def self.send_message_to_all(text)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  success = true
         
     | 
| 
      
 41 
     | 
    
         
            +
                  TeleNotify::TelegramUser.all.each do |user|
         
     | 
| 
      
 42 
     | 
    
         
            +
                    success = false if !user.send_message(text)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  success
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                def send_message(text)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  response = JSON.parse(RestClient.post(@@url + "sendMessage", chat_id: self.telegram_id, text: text), { symbolize_names: true })
         
     | 
| 
      
 50 
     | 
    
         
            +
                  response[:ok]
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
    
        data/tele_notify.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            $:.push File.expand_path("../lib", __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "tele_notify/version"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 6 
     | 
    
         
            +
              s.name        = "tele_notify"
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.version     = TeleNotify::VERSION
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.platform    = Gem::Platform::RUBY
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.authors     = ["ppati000", "Ryan"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              s.email       = ["ppati000@me.com"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.homepage    = "https://github.com/ppati000/tele_notify"
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.summary     = "Rails gem to send notifications via Telegram"
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.description = "TeleNotify by ppati000 enables your Rails app to send notifications/messages to your users via Telegram's Bot API. Forget email newsletters!
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              * See installation instructions, demo app and source on https://github.com/ppati000/tele_notify. *"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              s.rubyforge_project = "acts_as_votable"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              s.files         = `git ls-files`.split("\n")
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              s.add_dependency "rest-client", "~> 2.0.0.rc1"
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              s.add_development_dependency "sqlite3", '~> 1.3.9'
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: tele_notify
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - ppati000
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Ryan
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-07-29 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: rest-client
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 18 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 19 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 20 
     | 
    
         
            +
                    version: 2.0.0.rc1
         
     | 
| 
      
 21 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 22 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 23 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 24 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 25 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 27 
     | 
    
         
            +
                    version: 2.0.0.rc1
         
     | 
| 
      
 28 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 29 
     | 
    
         
            +
              name: sqlite3
         
     | 
| 
      
 30 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 31 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 32 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: 1.3.9
         
     | 
| 
      
 35 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 36 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 37 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 38 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 39 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 41 
     | 
    
         
            +
                    version: 1.3.9
         
     | 
| 
      
 42 
     | 
    
         
            +
            description: |-
         
     | 
| 
      
 43 
     | 
    
         
            +
              TeleNotify by ppati000 enables your Rails app to send notifications/messages to your users via Telegram's Bot API. Forget email newsletters!
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                * See installation instructions, demo app and source on https://github.com/ppati000/tele_notify. *
         
     | 
| 
      
 46 
     | 
    
         
            +
            email:
         
     | 
| 
      
 47 
     | 
    
         
            +
            - ppati000@me.com
         
     | 
| 
      
 48 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 49 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 50 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 51 
     | 
    
         
            +
            files:
         
     | 
| 
      
 52 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 53 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 54 
     | 
    
         
            +
            - README.markdown
         
     | 
| 
      
 55 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/generators/tele_notify/migration/migration_generator.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/generators/tele_notify/migration/templates/active_record/migration.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/generators/tele_notify/migration/templates/active_record/tele_notify.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/tele_notify.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/tele_notify/engine.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/tele_notify/telegram_controller.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/tele_notify/telegram_user.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/tele_notify/version.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - tele_notify.gemspec
         
     | 
| 
      
 65 
     | 
    
         
            +
            homepage: https://github.com/ppati000/tele_notify
         
     | 
| 
      
 66 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 67 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 68 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 69 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 70 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 72 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 73 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 74 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 75 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 76 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 77 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 78 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 79 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 80 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 81 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 82 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 83 
     | 
    
         
            +
            rubyforge_project: acts_as_votable
         
     | 
| 
      
 84 
     | 
    
         
            +
            rubygems_version: 2.4.5
         
     | 
| 
      
 85 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 86 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 87 
     | 
    
         
            +
            summary: Rails gem to send notifications via Telegram
         
     | 
| 
      
 88 
     | 
    
         
            +
            test_files: []
         
     |