110 lines
3.9 KiB
Ruby
110 lines
3.9 KiB
Ruby
class Bot < ActiveRecord::Base
|
|
belongs_to :user
|
|
belongs_to :profile, optional: true
|
|
serialize :telegram_subscriber_ids, Array
|
|
has_and_belongs_to_many :commands
|
|
|
|
# def send_text
|
|
# if self.telegram_api_token
|
|
# Telegram::Bot::Client.run(telegram_api_token) do |bot|
|
|
# bot.api.send_message(chat_id: message.chat.id, text: response_text, parse_mode: "Markdown")
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
def fortune
|
|
`fortune -a`
|
|
end
|
|
|
|
def telegram_listen
|
|
# `echo "#{Time.now} hi from telegram listen" > tglisten.txt`
|
|
return unless self.telegram_api_token
|
|
bot = Telegram::Bot::Client.new(telegram_api_token)
|
|
# Signal.trap('INT') do
|
|
# bot.stop
|
|
# end
|
|
bot.listen do |message|
|
|
# TODO Logging
|
|
# File.open("./logs/#{@botname}.log", 'a') { |f| f.write(["\n", Time.now, message.chat.id, message.from.id, message.from.first_name, message].join("\t")) }
|
|
case message
|
|
when Telegram::Bot::Types::Message
|
|
# Debugging use next to skip/drop the queue
|
|
# next
|
|
# eval(IO.read('./app/models/commands/fortune.rb'), binding)
|
|
case message.text
|
|
when /^\/fortune/i
|
|
response_text = `fortune`
|
|
begin
|
|
bot.api.send_message(chat_id: message.chat.id, reply_to_message_id: message.message_id, text: response_text, parse_mode: "Markdown")
|
|
rescue
|
|
puts "Error from fortune"
|
|
end
|
|
end
|
|
case message.text
|
|
when /^\/subscribe/i, /^\/sub/i, /^\/start/i
|
|
response_text = `fortune -a`
|
|
if self.telegram_subscriber_ids.include? message.chat.id
|
|
response_text = "You remain subscribed to #{bot.api.call("getMe")["result"]["first_name"]}\n\n" + response_text
|
|
else
|
|
self.telegram_subscriber_ids << message.chat.id
|
|
self.save
|
|
response_text = "Now subscribed to #{bot.api.call("getMe")["result"]["first_name"]}\n\n" + response_text
|
|
end
|
|
begin
|
|
bot.api.send_message(chat_id: message.chat.id, reply_to_message_id: message.message_id, text: response_text, parse_mode: "Markdown")
|
|
rescue
|
|
puts "Error from subscribe / start"
|
|
end
|
|
end
|
|
case message.text
|
|
when /^\/stop/i, /^\/unsub/i,/^\/unsubscribe/i
|
|
response_text = `fortune -a`
|
|
if self.telegram_subscriber_ids.include? message.chat.id
|
|
self.telegram_subscriber_ids.delete message.chat.id
|
|
self.save
|
|
response_text = "You are now unsubscribed from #{bot.api.call("getMe")["result"]["first_name"]}\n\n" + response_text
|
|
else
|
|
response_text = "You remain unsubscribed to #{bot.api.call("getMe")["result"]["first_name"]}\n\n" + response_text
|
|
end
|
|
begin
|
|
bot.api.send_message(chat_id: message.chat.id, reply_to_message_id: message.message_id, text: response_text, parse_mode: "Markdown")
|
|
rescue
|
|
puts "Error from start"
|
|
end
|
|
end
|
|
case message.text
|
|
when /^\/wallet/i, '/mywallet'
|
|
# mywallet(message.from.id, bot, message)
|
|
# unless get_wallet(message.from.id)
|
|
# create_wallet(message.from.id, bot, message)
|
|
# end
|
|
telegram_wallet = get_or_create_telegram_wallet(message.from.id)
|
|
response_text = "Hello #{message.from.first_name}
|
|
ICP Account Id:
|
|
```
|
|
#{telegram_wallet.get_icp_id}
|
|
```
|
|
ICP Principal:
|
|
```
|
|
#{telegram_wallet.get_icp_principal}
|
|
```
|
|
"
|
|
begin
|
|
bot.api.send_message(chat_id: message.chat.id, reply_to_message_id: message.message_id, text: response_text, parse_mode: "Markdown")
|
|
rescue
|
|
puts "Error from mywallet"
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def get_or_create_telegram_wallet(telegram_id)
|
|
telegram_wallet = TelegramWallet.where(telegram_id: telegram_id).first_or_initialize
|
|
telegram_wallet.save
|
|
return telegram_wallet
|
|
end
|
|
|
|
end
|