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