class TelegramBot::TelegramScrumBot

Attributes

bot[R]
github_repository[RW]
github_username[RW]
logger[R]
user_message[R]

Public Class Methods

new(username:, repository:) click to toggle source
# File lib/telegram-bot/bot.rb, line 17
def initialize(username:, repository:)
  @github_username   = username
  @github_repository = repository
  
  @logger = Logger.new(STDOUT, Logger::DEBUG)
  @bot    = TelegramBot.new(token: @@telegram_token, logger: @logger)
  @logger.debug "starting telegram bot"
end
set_token(token) click to toggle source
# File lib/telegram-bot/bot.rb, line 13
def self.set_token(token)
  @@telegram_token = token
end

Public Instance Methods

get_answer_from_user() click to toggle source
# File lib/telegram-bot/bot.rb, line 177
def get_answer_from_user
  answer = @bot.get_updates(fail_silently: true).last
  @logger.info "@#{answer.from.username}: #{answer.text}"
  result = answer.text
  answer.reply do |reply|
    reply.text = "la configuracion ha sido actualizada a: #{result}"
    reply.send_with(bot)
  end
  result
end
get_github_issues() click to toggle source
# File lib/telegram-bot/bot.rb, line 119
def get_github_issues
  if @github_username.empty?
    message = "Debe indicar el usuario de Github, puede hacerlo con /setgithubuser"
  elsif @github_repository.empty?
    message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
  else
    begin
      github = GitHubWrapper::Repository.find(username:   @github_username, 
                                              repository: @github_repository)

      message = "Incidentes registrados en: @#{github.username}/#{github.repository}:\n\n"
      github.get_issues(state: 'open').each do |issue|
        if issue.instance_of?(GitHubWrapper::Issue)
          message << "  issue ##{issue.number}\n  #{issue.title}\n"
          message << "  -----\n\n"
        else
          message << issue
        end
      end
    rescue TypeError => e
      message << "User/Repository not found: #{e}"
    rescue StandardError => e
      message << "Error: #{e}"
    end
  end
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
get_github_repository() click to toggle source
# File lib/telegram-bot/bot.rb, line 81
def get_github_repository
  message = "La configuración establecida para el repositorio de github es: #{@github_repository}"
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
get_github_user() click to toggle source
# File lib/telegram-bot/bot.rb, line 63
def get_github_user
  message = "La configuración establecida para el usuario de github es: #{@github_username}"
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
help() click to toggle source
# File lib/telegram-bot/bot.rb, line 90
def help
  message = "Hola soy Scrum Hackathon Bot, puedo ayudarte consultando Issues de un repositorio y a sincronizarlos con un tablero de Trello.\n\n"
  message << "Puedes controlarme con los siguientes comandos:\n\n"
  message << "/start - mensaje de bienvenida\n"
  message << "/setup - asistente de configuración del bot\n\n"
  message << "Configuraciones:\n"
  message << "/setgithubuser - establece la configuración del usuario de github\n"
  message << "/setgithubrepository - establece la configuración del repositorio de github\n\n"
  message << "/getgithubuser - obtiene la configuración del usuario de github\n"    
  message << "/getgithubrepository - obtiene la configuración del repositorio de github\n\n"
  message << "Comandos:\n"
  message << "/issues - consultar el listado de Issues en el repositorio de Github\n"
  message << "/trello - sincroniza los issues del repositorio en un tablero de Trello\n"
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
no_response_for(command) click to toggle source
# File lib/telegram-bot/bot.rb, line 168
def no_response_for(command)
  message = "No tengo idea de lo que el comando #{command.inspect} significa."
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
run() click to toggle source
# File lib/telegram-bot/bot.rb, line 188
def run
  @bot.get_updates(fail_silently: true) do |user_message|
    @logger.info "@#{user_message.from.username}: #{user_message.text}"
    @user_message  = user_message
    command        = user_message.get_command_for(@bot)
    
    user_message.reply do |reply|
      case command
      when /start/i
        result_hash = start
      when /setup/i
        result_hash = setup
      when /thanks/i
        result_hash = thanks
      when /setgithubuser/i
        result_hash = set_github_user
      when /getgithubuser/i
        result_hash = get_github_user
      when /setgithubrepository/i
        result_hash = set_github_repository
      when /getgithubrepository/i
        result_hash = get_github_repository
      when /help/i
        result_hash = help
      when /issues/i
        result_hash = get_github_issues
      when /trello/i
        result_hash = update_trello
      else
        result_hash = no_response_for(command)
      end

      reply.text = result_hash[:bot_message]
      puts "sending #{reply.text.inspect} to @#{user_message.from.username}"
      reply.send_with(@bot)

      if result_hash[:require_answer]
        response = get_answer_from_user
        instance_variable_set("@#{result_hash[:answer_variable]}", response)
      end
    end
  end
end
set_github_repository() click to toggle source
# File lib/telegram-bot/bot.rb, line 72
def set_github_repository
  message = "Por favor defina el repositorio de github a utilizar:"
  {
    bot_message:     message,
    require_answer:  true,
    answer_variable: :github_repository
  }
end
set_github_user() click to toggle source
# File lib/telegram-bot/bot.rb, line 54
def set_github_user
  message = "Por favor defina el usuario de github a utilizar:"
  {
    bot_message:     message,
    require_answer:  true,
    answer_variable: :github_username
  }
end
setup() click to toggle source
# File lib/telegram-bot/bot.rb, line 35
def setup
  message =  "Bienvenido al asistente de configuración del bot:\n\n"
  if @github_username.empty? || @github_repository.empty?
    if @github_username.empty?
      message << "Debe establecer el usuario de Github con /setgithubuser\n"
    end
    if @github_repository.empty?
      message << "Debe establecer el repositorio de Github con /setgithubrepository\n"
    end
  else
    message << "Todo se encuentra correctamente configurado, consulte /help para mas información\n"
  end
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
start() click to toggle source
# File lib/telegram-bot/bot.rb, line 26
def start
  message = "Hola #{@user_message.from.first_name}, para iniciar puedes utilizar el comando /setup."
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
thanks() click to toggle source
# File lib/telegram-bot/bot.rb, line 110
def thanks
  message = "You welcome!"
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end
update_trello() click to toggle source
# File lib/telegram-bot/bot.rb, line 151
def update_trello
  if github_username.empty?
    message = "Debe indicar el usuario de Github, puede hacerlo con /setgithubuser"
  elsif github_repository.empty?
    message = "Debe indicar el repositorio de Github, puede hacerlo con /setgithubrepository"
  else
    trello = TelegramBot::TrelloConnector.new(username: @github_username, 
                                              repository: @github_repository)
    message = trello.show_statistics
  end
  {
    bot_message:     message,
    require_answer:  false,
    answer_variable: nil
  }
end