diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index 23bd456..f19e9e1 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -1,11 +1,99 @@ class MessageController < ApplicationController def message_process - message = params[:message][:message] - ProcessMessageJob.perform_later(message) + bot_api_key = '836213850:AAG-aBtJB8khJ53DNRlzORUVcFWOH5SOF9o' + unless params[:message].blank? + message = params[:message].to_unsafe_h + if message[:chat][:type] == 'group' || message[:chat][:type] == 'supergroup' + logger.debug '1ok' + if message[:text].downcase =~ /asd/ + logger.debug '2ok' + asdcount = 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 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 + asdcount.times do + @asd = Asd.new(group: @group, sender: @sender, text: message[:text], update_id: params[:update_id]) + if @asd.save + asdcount = @group.asds.count + case asdcount + when 1 + addtext = 'Il primo asd. Benvenuto nella grande famiglia di asdbot' + when 10 + addtext = 'Il decimo asd! Complimenti, asd.' + when 100 + addtext = 'IL CENTESIMO ASD, ASD! COMPLIMENTS CONGRATULATIONS AUF WIDERSHEN' + when 1000 + addtext = '1000 asd, wow! Questo gruppo, così asdoso, asd' + when 10000 + addtext = '10000 è un record mondiale, asd' + else + noasdface = true + addtext = '' + end + unless noasdface + HTTParty.get(URI.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.")) + end + position = 'primo in assoluto' + position = Group.all.sort_by{|group| group.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 if Group.count > 0 + HTTParty.get(URI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{@group.chat_id}&text=Il contasd conta ben #{asdcount}, asd. Sei il #{position}º gruppo per ASD inviati. #{addtext}")) + end + end + end + end + + message = params[:message].to_unsafe_h + + 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]) + else + @group = Group.find_by(chat_id: message[:chat][:id]) + end + HTTParty.get(URI.escape("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 (reyboz.it), asd! Digita /grafico per ricevere il link ad un grafico, anche in privato per averne uno personale, asd o /classifca per scoprire cose interessanti.")) + end + + if message[:text] == '/classifica' + HTTParty.get(URI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Vai su #{request.domain}/classifica per vedere la classifica.")) + end + if message[:text] == '/start' && message[:chat][:type] == 'private' + HTTParty.get(URI.escape("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 (reyboz.it), 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(URI.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.")) + else + @sender = Sender.find_by(chat_id: message[:from][:id]) + position = 'primo in assoluto' + position = Sender.all.sort_by{|sender| sender.asds.count}.pluck(:id).reverse.find_index(@sender.id) + 1 if Sender.count > 0 + HTTParty.get(URI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Amico caro, la funzionalità grafico sta arrivando, arriva quando questo numero (#{Group.count}) uguale a 20, forse. Nel frattempo ti posso solo dire che hai al tuo attivo ben #{@sender.asds.count} asd e sei il #{position}º inviatore di ASD classifica globale!")) + end + end + + if message[:text] == '/grafico' && (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]) + HTTParty.get(URI.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.")) + else + @group = Group.find_by(chat_id: message[:chat][:id]) + position = 'primo in assoluto' + position = Group.all.sort_by{|group| group.asds.count}.pluck(:id).reverse.find_index(@group.id) + 1 if Group.count > 0 + HTTParty.get(URI.escape("http://api.telegram.org/bot#{bot_api_key}/sendMessage?chat_id=#{message[:chat][:id]}&text=Amico caro, la funzionalità grafico sta arrivando, arriverà quando questo numero (#{Group.count}) sarà uguale a 20, forse. Nel frattempo ti posso solo dire che hai al tuo attivo ben #{@group.asds.count} asd e sei il #{position}º gruppo!")) + end + end + end end def classifica @groups = Group.all.sort_by{|sender| sender.asds.count}.reverse @senders = Sender.all.sort_by{|sender| sender.asds.count}.reverse end end diff --git a/app/models/asd.rb b/app/models/asd.rb index 188787a..e9e5d5b 100644 --- a/app/models/asd.rb +++ b/app/models/asd.rb @@ -1,4 +1,5 @@ class Asd < ApplicationRecord belongs_to :group belongs_to :sender + validates :update_id, uniqueness: true end diff --git a/config/routes.rb b/config/routes.rb index 4a28474..a027d11 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - get 'message_process', to: 'message#message_process' + post 'message_process', to: 'message#message_process' get 'classifica', to: 'message#classifica' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/db/migrate/20190810150332_create_groups.rb b/db/migrate/20190810150332_create_groups.rb index a7d6161..43089fb 100644 --- a/db/migrate/20190810150332_create_groups.rb +++ b/db/migrate/20190810150332_create_groups.rb @@ -1,10 +1,10 @@ class CreateGroups < ActiveRecord::Migration[5.2] def change create_table :groups do |t| - t.integer :chat_id, :limit => 18 + t.bigint :chat_id t.string :username t.timestamps end end end diff --git a/db/migrate/20190810152558_create_senders.rb b/db/migrate/20190810152558_create_senders.rb index d347648..7fa02f0 100644 --- a/db/migrate/20190810152558_create_senders.rb +++ b/db/migrate/20190810152558_create_senders.rb @@ -1,10 +1,10 @@ class CreateSenders < ActiveRecord::Migration[5.2] def change create_table :senders do |t| - t.integer :chat_id, :limit => 18 + t.integer :chat_id t.string :username t.timestamps end end end diff --git a/db/migrate/20190810152645_create_asds.rb b/db/migrate/20190810152645_create_asds.rb index 9cb57d4..1e428d0 100644 --- a/db/migrate/20190810152645_create_asds.rb +++ b/db/migrate/20190810152645_create_asds.rb @@ -1,10 +1,11 @@ class CreateAsds < ActiveRecord::Migration[5.2] def change create_table :asds do |t| t.references :group, foreign_key: true t.references :sender, foreign_key: true - + t.integer :update_id + t.timestamps end end end