diff --git a/Gemfile b/Gemfile index 27bf2f3..fac4f97 100644 --- a/Gemfile +++ b/Gemfile @@ -1,67 +1,66 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.3' # Use sqlite3 as the database for Active Record gem 'pg' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby gem 'crono' gem "chartkick" gem 'groupdate' gem "sentry-raven" -gem 'httparty' -gem 'httpclient' +gem 'telegram-bot' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'chromedriver-helper' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] diff --git a/Gemfile.lock b/Gemfile.lock index 01f3a88..8ff9785 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,242 +1,238 @@ GEM remote: https://rubygems.org/ specs: actioncable (5.2.3) actionpack (= 5.2.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) actionmailer (5.2.3) actionpack (= 5.2.3) actionview (= 5.2.3) activejob (= 5.2.3) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) actionpack (5.2.3) actionview (= 5.2.3) activesupport (= 5.2.3) rack (~> 2.0) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) actionview (5.2.3) activesupport (= 5.2.3) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) activejob (5.2.3) activesupport (= 5.2.3) globalid (>= 0.3.6) activemodel (5.2.3) activesupport (= 5.2.3) activerecord (5.2.3) activemodel (= 5.2.3) activesupport (= 5.2.3) arel (>= 9.0) activestorage (5.2.3) actionpack (= 5.2.3) activerecord (= 5.2.3) marcel (~> 0.3.1) activesupport (5.2.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) addressable (2.6.0) public_suffix (>= 2.0.2, < 4.0) archive-zip (0.12.0) io-like (~> 0.3.0) arel (9.0.0) bindex (0.8.1) bootsnap (1.4.4) msgpack (~> 1.0) builder (3.2.3) byebug (11.0.1) capybara (3.28.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) rack (>= 1.6.0) rack-test (>= 0.6.3) regexp_parser (~> 1.5) xpath (~> 3.2) chartkick (3.2.1) childprocess (1.0.1) rake (< 13.0) chromedriver-helper (2.1.1) archive-zip (~> 0.10) nokogiri (~> 1.8) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.12.2) concurrent-ruby (1.1.5) crass (1.0.4) crono (1.1.2) activerecord (>= 4.0) activesupport (>= 4.0) erubi (1.8.0) execjs (2.7.0) faraday (0.15.4) multipart-post (>= 1.2, < 3) ffi (1.11.1) globalid (0.4.2) activesupport (>= 4.2.0) groupdate (4.1.2) activesupport (>= 4.2) - httparty (0.17.0) - mime-types (~> 3.0) - multi_xml (>= 0.5.2) httpclient (2.8.3) i18n (1.6.0) concurrent-ruby (~> 1.0) io-like (0.3.0) jbuilder (2.9.1) activesupport (>= 4.2.0) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) loofah (2.2.3) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) method_source (0.9.2) - mime-types (3.2.2) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.0331) mimemagic (0.3.3) mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.11.3) msgpack (1.3.1) - multi_xml (0.6.0) multipart-post (2.1.1) nio4r (2.4.0) nokogiri (1.10.3) mini_portile2 (~> 2.4.0) pg (1.1.4) public_suffix (3.1.1) puma (3.12.1) rack (2.0.7) rack-test (1.1.0) rack (>= 1.0, < 3) rails (5.2.3) actioncable (= 5.2.3) actionmailer (= 5.2.3) actionpack (= 5.2.3) actionview (= 5.2.3) activejob (= 5.2.3) activemodel (= 5.2.3) activerecord (= 5.2.3) activestorage (= 5.2.3) activesupport (= 5.2.3) bundler (>= 1.3.0) railties (= 5.2.3) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.2.0) loofah (~> 2.2, >= 2.2.2) railties (5.2.3) actionpack (= 5.2.3) activesupport (= 5.2.3) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rake (12.3.3) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) regexp_parser (1.6.0) ruby_dep (1.5.0) rubyzip (1.2.3) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) sass-rails (5.0.7) railties (>= 4.0.0, < 6) sass (~> 3.1) sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) selenium-webdriver (3.142.3) childprocess (>= 0.5, < 2.0) rubyzip (~> 1.2, >= 1.2.2) sentry-raven (2.11.0) faraday (>= 0.7.6, < 1.0) spring (2.1.0) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-rails (3.2.1) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) + telegram-bot (0.14.2) + actionpack (>= 4.0, < 6.0) + activesupport (>= 4.0, < 6.0) + httpclient (~> 2.7) thor (0.20.3) thread_safe (0.3.6) tilt (2.0.9) turbolinks (5.2.0) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) tzinfo (1.2.5) thread_safe (~> 0.1) uglifier (4.1.20) execjs (>= 0.3.0, < 3) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) websocket-driver (0.7.1) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.4) xpath (3.2.0) nokogiri (~> 1.8) PLATFORMS ruby DEPENDENCIES bootsnap (>= 1.1.0) byebug capybara (>= 2.15) chartkick chromedriver-helper coffee-rails (~> 4.2) crono groupdate - httparty - httpclient jbuilder (~> 2.5) listen (>= 3.0.5, < 3.2) pg puma (~> 3.11) rails (~> 5.2.3) sass-rails (~> 5.0) selenium-webdriver sentry-raven spring spring-watcher-listen (~> 2.0.0) + telegram-bot turbolinks (~> 5) tzinfo-data uglifier (>= 1.3.0) web-console (>= 3.3.0) RUBY VERSION ruby 2.5.5p157 BUNDLED WITH 2.0.2 diff --git a/README.md b/README.md index 56ae6d7..f2b7e72 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # README Crea un bellissimo bot che conta gli ASD. -ENV variabili richieste: DOMAIN (abbastanza ovvio, il dominio) e BOT_API_KEY, la vostra api key telegram per il bot. +ENV variabili richieste: DOMAIN (abbastanza ovvio, il dominio) e BOT_API_KEY, la vostra api key telegram per il bot, BOT_USERNAME Inoltre, amici, vi ricordo che dovete avere un certificato SSL ed impostare il webhook telegram. \ No newline at end of file diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index 9780501..0701d78 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -1,119 +1,158 @@ class MessageController < ActionController::API def message_process - bot_api_key = ENV['BOT_API_KEY'] - return false if params[:message].blank? - message = params[:message].to_unsafe_h - if message[:chat][:type] == 'group' || message[:chat][:type] == 'supergroup' - if message[:text].downcase =~ /asd/ - multiplevalue = message[:text].downcase.scan(/asd/).count - unless Group.find_by(chat_id: message[:chat][:id]) - @group = Group.create(chat_id: message[:chat][:id], username: message[:chat][:username]) - else - @group = Group.find_by(chat_id: message[:chat][:id]) - end - unless @group.welcomesent - client.get "http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me) da idea di Valerio Bozzolan, asd! Digita /grafico per ricevere il link ad un grafico, anche in privato per averne uno personale, asd o /classifca per scoprire cose interessanti. L'impostazione automatica è che io invii il conto degli ASD alla fine della serata, così però ti perdi cose belle come la faccina dell'ASD di mezzanotte. Per modificare questa impostazione, basta digitare /nightsend ed invierò il messaggio di conteggio appena invii un asd" - @group.update_attribute(:welcomesent, true) - end + message = params[:message] + return if message.nil? || message[:chat].nil? + unless message[:text].nil? + text = message[:text] + else + text = message[:caption] + end + if text.split('@').count == 2 + if text.split('@')[1] == ENV['BOT_USERNAME'] + text = text.split('@')[0] + end + end + type = message[:chat][:type] + id = message[:chat][:id] + username = message[:chat][:username] + update_id = params[:update_id] + fromid = message[:from][:id] + fromusername = message[:from][:username] - unless Sender.find_by(chat_id: message[:from][:id]) - @sender = Sender.create(chat_id: message[:from][:id], username: message[:from][:username]) - else - @sender = Sender.find_by(chat_id: message[:from][:id]) - end + unless Group.find_by(chat_id: id) + @group = Group.create(chat_id: id, username: username) + else + @group = Group.find_by(chat_id: id) + end + + unless @group.nil? + unless @group.welcomesent + Telegram.bot.send_message(chat_id: @group.chat_id, text: "Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me) da idea di Valerio Bozzolan, asd! Digita /grafico per ricevere il link ad un grafico, anche in privato per averne uno personale, asd o /classifca per scoprire cose interessanti. L'impostazione automaticaè che io invii il conto degli ASD alla fine della serata, così però ti perdi cose belle come la faccina dell'ASD di mezzanotte. Per modificare questa impostazione, basta digitare /nightsend ed invierò il messaggio di conteggio appena invii un asd.") + @group.update_attribute(:welcomesent, true) + end + end + + unless Sender.find_by(chat_id: fromid) + @sender = Sender.create(chat_id: fromid, username: fromusername) + else + @sender = Sender.find_by(chat_id: fromid) + end + + first_name = message[:from][:first_name] + last_name = message[:from][:last_name] + totalname = "#{first_name} #{last_name}" + + if @sender.name.nil? || @sender.name != totalname + @sender.update_attribute(:name, totalname) + end + + if @sender.username != message[:from][:username] + @sender.update_attribute(:username, message[:from][:username]) + end + + title = message[:chat][:title] + if @group.title.nil? || @group.title != title + @group.update_attribute(:title, title) + end + + if @group.username != message[:chat][:username] + @group.update_attribute(:username, message[:chat][:username]) + end + + if type == 'group' || type == 'supergroup' + if text =~ /asd/i + multiplevalue = text.scan(/asd/i).count defmultiplevalue = multiplevalue - 1 - @asd = Asd.new(group: @group, sender: @sender, text: message[:text], update_id: params[:update_id], multiple_value: defmultiplevalue) - defmultiplevalue.each do |multiple| - multiple = Asd.new(group: @group, sender: @sender, text: message[:text]) + @asd = Asd.create(group: @group, sender: @sender, text: text, update_id: update_id, multiple_times: defmultiplevalue) + defmultiplevalue.times do + Asd.create(group: @group, sender: @sender, text: text) end asdcount = @group.asds.count case asdcount when 1 addtext = 'Il primo asd. Benvenuto nella grande famiglia di asdbot' SpecialEvent.create(text: addtext, group: @group, asd: @asd) when 10 addtext = 'Il decimo asd! Complimenti, asd.' SpecialEvent.create(text: addtext, group: @group, asd: @asd) when 100 addtext = 'IL CENTESIMO ASD, ASD! COMPLIMENTS CONGRATULATIONS AUF WIDERSHEN' SpecialEvent.create(text: addtext, group: @group, asd: @asd) when 1000 addtext = '1000 asd, wow! Questo gruppo, così asdoso, asd' SpecialEvent.create(text: addtext, group: @group, asd: @asd) when 10000 - addtext = '10000 è un record mondiale, asd' + addtext = '10000è un record mondiale, asd' SpecialEvent.create(text: addtext, group: @group, asd: @asd) end unless @group.nightsend if SpecialEvent.find_by(asd: @asd) - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendPhoto?chat_id=#{@group.chat_id}&photo=http://www.lanciano.it/faccine/asdone.gif&caption=Così asdoso, asd. #{SpecialEvent.find_by(asd: @asd).text}")) + Telegram.bot.send_photo(chat_id: @group.chat_id, photo: 'http://www.lanciano.it/faccine/asdone.gif', caption: "Così asdoso, asd. #{SpecialEvent.find_by(asd: @asd).text}") SpecialEvent.find_by(asd: @asd).destroy end position = Group.all.sort_by{|group| group.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=Il contasd conta ben #{asdcount} (+ #{defmultiplevalue}), asd. Sei il #{position}º gruppo per ASD inviati.")) + Telegram.bot.send_message(chat_id: @group.chat_id, text: "Il contasd conta ben #{asdcount} (+ #{defmultiplevalue}), asd. Sei il #{position}º gruppo per ASD inviati.") if @asd.created_at.strftime('%H:%M') == '00:00' - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=Asd di mezzanotte 🌚")) + Telegram.bot.send_message(chat_id: @group.chat_id, text: "Asd di mezzanotte %F0%9F%8C%9A") end end end end - if message[:text] == '/start' && (message[:chat][:type] == 'group' || message[:chat][:type] == 'supergroup') - unless Group.find_by(chat_id: message[:chat][:id]) - @group = Group.create(chat_id: message[:chat][:id], username: message[:chat][:username]) + if text == '/start' && (type == 'group' || type == 'supergroup') + unless Group.find_by(chat_id: id) + @group = Group.create(chat_id: id, username: username) else - @group = Group.find_by(chat_id: message[:chat][:id]) + @group = Group.find_by(chat_id: id) end - client.get "http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me) da idea di Valerio Bozzolan, asd! Digita /grafico per ricevere il link ad un grafico, anche in privato per averne uno personale, asd o /classifca per scoprire cose interessanti. L'impostazione automatica è che io invii il conto degli ASD alla fine della serata, così però ti perdi cose belle come la faccina dell'ASD di mezzanotte. Per modificare questa impostazione, basta digitare /nightsend ed invierò il messaggio di conteggio appena invii un asd" + Telegram.bot.send_message(chat_id: @group.chat_id, text: "Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me) da idea di Valerio Bozzolan, asd! Digita /grafico per ricevere il link ad un grafico, anche in privato per averne uno personale, asd o /classifca per scoprire cose interessanti. L'impostazione automaticaè che io invii il conto degli ASD alla fine della serata, così però ti perdi cose belle come la faccina dell'ASD di mezzanotte. Per modificare questa impostazione, basta digitare /nightsend ed invierò il messaggio di conteggio appena invii un asd.") @group.update_attribute(:welcomesent, true) end - if message[:text] == '/classifica' - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Vai su #{ENV['DOMAIN']}/classifica per vedere la classifica. Ci sono #{Group.count} che usano questo bot, comunque.")) + if text == '/classifica' + Telegram.bot.send_message(chat_id: id, text: "Vai su #{ENV['DOMAIN']}/classifica per vedere la classifica. Ci sono #{Group.count} che usano questo bot, comunque.") end - if message[:text] == '/start' && message[:chat][:type] == 'private' - client.get "http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me @ferdi2005) da idea di Valerio Bozzolan, asd! Aggiungimi ad un bel gruppo e conterò gli asd, altrimenti digita /grafico per il tuo grafico personal personal." + if text == '/start' && type == 'private' + Telegram.bot.send_message(chat_id: id, text: "Bella zio! Sono il bot asdoso creato da Ferdinando Traversa (ferdinando.me @ferdi2005) da idea di Valerio Bozzolan, asd! Aggiungimi ad un bel gruppo e conterò gli asd, altrimenti digita /grafico per il tuo grafico personal personal.") end - if message[:text] == '/grafico' && message[:chat][:type] == 'private' - unless Sender.find_by(chat_id: message[:from][:id]) - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Non ho ancora un grafico per te, sei nuovo per me, non ti conosco. Iscriviti in qualche gruppo con questo bot e manda asd a ripetizione, poi torna da me.")) + if text == '/grafico' && type == 'private' + unless Sender.find_by(chat_id: fromid) + Telegram.bot.send_message(chat_id: id, text: 'Non ho ancora un grafico per te, sei nuovo per me, non ti conosco. Iscriviti in qualche gruppo con questo bot e manda asd a ripetizione, poi torna da me.') else - @sender = Sender.find_by(chat_id: message[:from][:id]) - position = 'primo in assoluto' + @sender = Sender.find_by(chat_id: fromid) position = Sender.all.sort_by{|sender| sender.asds.count}.pluck(:id).reverse.find_index(@sender.id) + 1 if Sender.count > 0 - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Guarda il tuo grafico personalizzato per il gruppo su #{ENV['DOMAIN']}/grafico?s=#{@sender.chat_id}")) + Telegram.bot.send_message(chat_id: id, text: "Guarda il tuo grafico personalizzato per il gruppo su #{ENV['DOMAIN']}/grafico?s=#{@sender.chat_id} Inoltre sappi che sei il #{position}º inviatore di asd nel mondo!") end end - if message[:text] == '/grafico' && (message[:chat][:type] == 'group' || message[:chat][:type] == 'supergroup') - unless Group.find_by(chat_id: message[:chat][:id]) - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Non ho ancora un grafico per te, sei nuovo per me, non ti conosco. Invia qualche asd e prova questo comando.")) + if text == '/grafico' && (type == 'group' || type == 'supergroup') + unless Group.find_by(chat_id: id) + Telegram.bot.send_message(chat_id: id, text: 'Non ho ancora un grafico per te, sei nuovo per me, non ti conosco. Invia qualche asd e prova questo comando.') else - @group = Group.find_by(chat_id: message[:chat][:id]) - position = Group.all.sort_by{|group| group.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Guarda il tuo grafico personalizzato per il gruppo su #{ENV['DOMAIN']}/grafico?g=#{@group.chat_id}")) + @group = Group.find_by(chat_id: id) + Telegram.bot.send_message(chat_id: id, text: "Guarda il tuo grafico personalizzato per il gruppo su #{ENV['DOMAIN']}/grafico?g=#{@group.chat_id}") end end - if message[:text] == '/nightsend' && (message[:chat][:type] == 'group' || message[:chat][:type] == 'supergroup') - unless Group.find_by(chat_id: message[:chat][:id]) - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Ok, l'impostazione predefinita è che l'invio del conto degli asd avvenga a mezzanotte, ma con questo comando la modifico. Procedo, asd.")) + if text == '/nightsend' && (type == 'group' || type == 'supergroup') + unless Group.find_by(chat_id: id) + Telegram.bot.send_message(chat_id: id, text: "Ok, l'impostazione predefinitaè che l'invio del conto degli asd avvenga a mezzanotte, ma con questo comando la modifico. Procedo, asd.") @group.update_attribute(:nightsend, false) else - @group = Group.find_by(chat_id: message[:chat][:id]) + @group = Group.find_by(chat_id: id) if @group.nightsend - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Ok, l'impostazione predefinita è che l'invio del conto degli asd avvenga a mezzanotte, ma con questo comando la modifico. Procedo, ora avrai un messaggio ogni asd, asd.")) + Telegram.bot.send_message(chat_id: id, text: "Ok, l'impostazione predefinitaè che l'invio del conto degli asd avvenga a mezzanotte, ma con questo comando la modifico. Procedo, ora avrai un messaggio ogni asd, asd.") @group.update_attribute(:nightsend, false) else - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Sei una persona triste, asd. Vuoi che il conteggio venga inviato a mezzanotte. Bozzolan dice sì, Ferdi dice no. Tu dici sì, allora conteggio a mezzanotte sia, asd")) + Telegram.bot.send_message(chat_id: id, text: "Sei una persona triste, asd. Vuoi che il conteggio venga inviato a mezzanotte. Bozzolan dice sì, Ferdi dice no. Tu dici sì, allora conteggio a mezzanotte sia, asd") @group.update_attribute(:nightsend, true) end end end - render status: 200 + render nothing: true end end diff --git a/app/jobs/send_asd_count_job.rb b/app/jobs/send_asd_count_job.rb index 465c1c3..c3538b2 100644 --- a/app/jobs/send_asd_count_job.rb +++ b/app/jobs/send_asd_count_job.rb @@ -1,18 +1,18 @@ class SendAsdCountJob < ApplicationJob queue_as :default def perform(*args) Group.where(nightsend: true).each do |group| @group = group date = Date.yesterday @asds = Asd.where(created_at: date.midnight..date.end_of_day, group: group) if SpecialEvent.find_by(group: @group) - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendPhoto?chat_id=#{@group.chat_id}&photo=http://www.lanciano.it/faccine/asdone.gif&caption=Così asdoso, asd. #{SpecialEvent.find_by(group: @group).text}")) + Telegram.bot.send_photo(chat_id: @group.chat_id, photo: "http://www.lanciano.it/faccine/asdone.gif", caption: "Così asdoso, asd. #{SpecialEvent.find_by(group: @group).text}") SpecialEvent.find_by(group: @group).destroy end - position = Group.all.sort_by{|group| group.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 + position = Group.all.sort_by{|gp| gp.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 defmultipletimes = @asds.pluck(:multiple_times).sum - HTTParty.get(CGI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=È mezzanotte, ora di sapere! Il contasd di ieri conta ben #{@asds.count}, asd. Sei il #{position}º gruppo per ASD inviati. (compresi quelli multipli, che sono #{defmultipletimes})")) + Telegram.bot.send_message(chat_id: @group.chat_id, text: "È mezzanotte, ora di sapere! Il contasd di ieri conta ben #{@asds.count}, asd. Sei il #{position}º gruppo per ASD inviati. (compresi quelli multipli, che sono #{defmultipletimes})") end end end diff --git a/app/views/message/message_process.html.erb b/app/views/message/message_process.html.erb new file mode 100644 index 0000000..92211ed --- /dev/null +++ b/app/views/message/message_process.html.erb @@ -0,0 +1 @@ +{ status: 200, response: 'ok'} \ No newline at end of file diff --git a/app/views/standardpage/classifica.html.erb b/app/views/standardpage/classifica.html.erb index d7f0596..b5ef3f5 100644 --- a/app/views/standardpage/classifica.html.erb +++ b/app/views/standardpage/classifica.html.erb @@ -1,15 +1,19 @@

LA CLASSIFICA SOMMA, ASD

GRUPPI

    <% @groups.each do |group| %> -
  1. <%= group.username %> --> <%= group.asds.count %> asd
  2. + <% if group.asds.count > 0 %> +
  3. <%= group.title %> --> <%= group.asds.count %> asd
  4. + <% end %> <% end %>

UTENTI

    <% @senders.each do |group| %> -
  1. <%= group.username %> --> <%= group.asds.count %> asd
  2. + <% if group.asds.count > 0 %> +
  3. <%= group.name %> --> <%= group.asds.count %> asd
  4. + <% end %> <% end %>

diff --git a/config/initializers/telegram.rb b/config/initializers/telegram.rb new file mode 100644 index 0000000..6748da5 --- /dev/null +++ b/config/initializers/telegram.rb @@ -0,0 +1,3 @@ +Telegram.bots_config = { + default: ENV['BOT_API_KEY'], +} \ No newline at end of file diff --git a/db/migrate/20190811141634_change_chat_id_to_be_bigint_in_groups.rb b/db/migrate/20190811141634_change_chat_id_to_be_bigint_in_groups.rb new file mode 100644 index 0000000..7c9ea62 --- /dev/null +++ b/db/migrate/20190811141634_change_chat_id_to_be_bigint_in_groups.rb @@ -0,0 +1,5 @@ +class ChangeChatIdToBeBigintInGroups < ActiveRecord::Migration[5.2] + def change + change_column :groups, :chat_id, :bigint + end +end diff --git a/db/migrate/20190811163028_add_title_to_groups.rb b/db/migrate/20190811163028_add_title_to_groups.rb new file mode 100644 index 0000000..c1a1cf8 --- /dev/null +++ b/db/migrate/20190811163028_add_title_to_groups.rb @@ -0,0 +1,5 @@ +class AddTitleToGroups < ActiveRecord::Migration[5.2] + def change + add_column :groups, :title, :string + end +end diff --git a/db/migrate/20190811163105_add_name_to_users.rb b/db/migrate/20190811163105_add_name_to_users.rb new file mode 100644 index 0000000..ab1ba7e --- /dev/null +++ b/db/migrate/20190811163105_add_name_to_users.rb @@ -0,0 +1,5 @@ +class AddNameToUsers < ActiveRecord::Migration[5.2] + def change + add_column :senders, :name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 70222ec..9c7153e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,71 +1,71 @@ # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. # # Note that this schema.rb definition is the authoritative source for your # database schema. If you need to create the application database on another # system, you should be using db:schema:load, not running all the migrations # from scratch. The latter is a flawed and unsustainable approach (the more migrations # you'll amass, the slower it'll run and the greater likelihood for issues). # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_08_11_114154) do +ActiveRecord::Schema.define(version: 2019_08_11_141634) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "asds", force: :cascade do |t| t.bigint "group_id" t.bigint "sender_id" t.integer "update_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "text" t.boolean "nightsend" t.integer "multiple_times" t.index ["group_id"], name: "index_asds_on_group_id" t.index ["sender_id"], name: "index_asds_on_sender_id" end create_table "crono_jobs", force: :cascade do |t| t.string "job_id", null: false t.text "log" t.datetime "last_performed_at" t.boolean "healthy" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["job_id"], name: "index_crono_jobs_on_job_id", unique: true end create_table "groups", force: :cascade do |t| t.bigint "chat_id" t.string "username" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "welcomesent", default: false t.boolean "nightsend" end create_table "senders", force: :cascade do |t| t.integer "chat_id" t.string "username" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "special_events", force: :cascade do |t| t.bigint "group_id" t.string "text" t.bigint "asd_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["asd_id"], name: "index_special_events_on_asd_id" t.index ["group_id"], name: "index_special_events_on_group_id" end add_foreign_key "asds", "groups" add_foreign_key "asds", "senders" add_foreign_key "special_events", "asds" add_foreign_key "special_events", "groups" end