tulul/lycantulul_bot

View on GitHub
lib/lycantulul_bot/lycantulul/input_processor_job.rb

Summary

Maintainability
F
3 wks
Test Coverage

Method perform has a Cognitive Complexity of 611 (exceeds 5 allowed). Consider refactoring.
Open

    def perform(message, bot)
      @bot = bot
      log("incoming message from #{message.from.first_name}: #{message.text}")

      if MAINTENANCE.call
Severity: Minor
Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 wk to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

Class has too many lines. [1029/100]
Open

  class InputProcessorJob
    include SuckerPunch::Job

    attr_accessor :bot

This cop checks if the length a class exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Assignment Branch Condition size for perform is too high. [481.7/15]
Open

    def perform(message, bot)
      @bot = bot
      log("incoming message from #{message.from.first_name}: #{message.text}")

      if MAINTENANCE.call

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method has too many lines. [473/10]
Open

    def perform(message, bot)
      @bot = bot
      log("incoming message from #{message.from.first_name}: #{message.text}")

      if MAINTENANCE.call

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Assignment Branch Condition size for message_action is too high. [223.1/15]
Open

    def message_action(game, action, aux = nil)
      case action
      when BROADCAST_ROLE
        log('game starts')
        opening = 'MULAI! MWA HA HA HA'

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Perceived complexity for perform is too high. [200/7]
Open

    def perform(message, bot)
      @bot = bot
      log("incoming message from #{message.from.first_name}: #{message.text}")

      if MAINTENANCE.call

This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

Example:

def my_method                   # 1
  if cond                       # 1
    case var                    # 2 (0.8 + 4 * 0.2, rounded)
    when 1 then func_one
    when 2 then func_two
    when 3 then func_three
    when 4..10 then func_other
    end
  else                          # 1
    do_something until a && b   # 2
  end                           # ===
end                             # 7 complexity points

File input_processor_job.rb has 1033 lines of code (exceeds 250 allowed). Consider refactoring.
Open

module Lycantulul
  class InputProcessorJob
    include SuckerPunch::Job

    attr_accessor :bot
Severity: Major
Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 2 days to fix

    Method perform has 473 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        def perform(message, bot)
          @bot = bot
          log("incoming message from #{message.from.first_name}: #{message.text}")
    
          if MAINTENANCE.call
    Severity: Major
    Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 2 days to fix

      Cyclomatic complexity for perform is too high. [153/6]
      Open

          def perform(message, bot)
            @bot = bot
            log("incoming message from #{message.from.first_name}: #{message.text}")
      
            if MAINTENANCE.call

      This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

      An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

      Method has too many lines. [156/10]
      Open

          def message_action(game, action, aux = nil)
            case action
            when BROADCAST_ROLE
              log('game starts')
              opening = 'MULAI! MWA HA HA HA'

      This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

      Assignment Branch Condition size for check_win is too high. [62.1/15]
      Open

          def check_win(game)
            log('checking win condition')
            game.reload
            win = false
            ending = ''

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

      Method message_action has 156 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def message_action(game, action, aux = nil)
            case action
            when BROADCAST_ROLE
              log('game starts')
              opening = 'MULAI! MWA HA HA HA'
      Severity: Major
      Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 6 hrs to fix

        Method has too many lines. [43/10]
        Open

            def check_win(game)
              log('checking win condition')
              game.reload
              win = false
              ending = ''

        This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

        Class InputProcessorJob has 39 methods (exceeds 20 allowed). Consider refactoring.
        Open

          class InputProcessorJob
            include SuckerPunch::Job
        
            attr_accessor :bot
        
        
        Severity: Minor
        Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 5 hrs to fix

          Assignment Branch Condition size for send is too high. [39.75/15]
          Open

              def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                options = {
                  chat_id: message.chat.id,
                  text: text[0...4000],
                }

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Method message_action has a Cognitive Complexity of 29 (exceeds 5 allowed). Consider refactoring.
          Open

              def message_action(game, action, aux = nil)
                case action
                when BROADCAST_ROLE
                  log('game starts')
                  opening = 'MULAI! MWA HA HA HA'
          Severity: Minor
          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 4 hrs to fix

          Cognitive Complexity

          Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

          A method's cognitive complexity is based on a few simple rules:

          • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
          • Code is considered more complex for each "break in the linear flow of the code"
          • Code is considered more complex when "flow breaking structures are nested"

          Further reading

          Cyclomatic complexity for message_action is too high. [28/6]
          Open

              def message_action(game, action, aux = nil)
                case action
                when BROADCAST_ROLE
                  log('game starts')
                  opening = 'MULAI! MWA HA HA HA'

          This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

          An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

          Method has too many lines. [31/10]
          Open

              def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                options = {
                  chat_id: message.chat.id,
                  text: text[0...4000],
                }

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Method has too many lines. [29/10]
          Open

              def summon(game, who)
                if (Time.now - game.last_summon_query rescue 11).ceil > 10
                  to_call =
                    case who
                    when :all

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Assignment Branch Condition size for check_round_finished is too high. [31.56/15]
          Open

              def check_round_finished(game, round, force = false)
                log("checking round finished #{round}")
                game.reload
                return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Method has too many lines. [21/10]
          Open

              def check_round_finished(game, round, force = false)
                log("checking round finished #{round}")
                game.reload
                return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Perceived complexity for message_action is too high. [18/7]
          Open

              def message_action(game, action, aux = nil)
                case action
                when BROADCAST_ROLE
                  log('game starts')
                  opening = 'MULAI! MWA HA HA HA'

          This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

          Example:

          def my_method                   # 1
            if cond                       # 1
              case var                    # 2 (0.8 + 4 * 0.2, rounded)
              when 1 then func_one
              when 2 then func_two
              when 3 then func_three
              when 4..10 then func_other
              end
            else                          # 1
              do_something until a && b   # 2
            end                           # ===
          end                             # 7 complexity points

          Method send has a Cognitive Complexity of 21 (exceeds 5 allowed). Consider refactoring.
          Open

              def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                options = {
                  chat_id: message.chat.id,
                  text: text[0...4000],
                }
          Severity: Minor
          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 2 hrs to fix

          Cognitive Complexity

          Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

          A method's cognitive complexity is based on a few simple rules:

          • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
          • Code is considered more complex for each "break in the linear flow of the code"
          • Code is considered more complex when "flow breaking structures are nested"

          Further reading

          Assignment Branch Condition size for summon is too high. [25.48/15]
          Open

              def summon(game, who)
                if (Time.now - game.last_summon_query rescue 11).ceil > 10
                  to_call =
                    case who
                    when :all

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Cyclomatic complexity for check_round_finished is too high. [15/6]
          Open

              def check_round_finished(game, round, force = false)
                log("checking round finished #{round}")
                game.reload
                return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

          An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

          Perceived complexity for check_round_finished is too high. [16/7]
          Open

              def check_round_finished(game, round, force = false)
                log("checking round finished #{round}")
                game.reload
                return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

          Example:

          def my_method                   # 1
            if cond                       # 1
              case var                    # 2 (0.8 + 4 * 0.2, rounded)
              when 1 then func_one
              when 2 then func_two
              when 3 then func_three
              when 4..10 then func_other
              end
            else                          # 1
              do_something until a && b   # 2
            end                           # ===
          end                             # 7 complexity points

          Assignment Branch Condition size for send_welcome_message is too high. [23.28/15]
          Open

              def send_welcome_message(game)
                game.reload
                welcomed = game.clear_unwelcomed
                if !welcomed.empty? && game.waiting?
                  additional_text =

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Assignment Branch Condition size for check_voting_finished is too high. [23.04/15]
          Open

              def check_voting_finished(game, round, force = false)
                log("checking voting finished: #{round}")
                game.reload
                return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Perceived complexity for send is too high. [13/7]
          Open

              def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                options = {
                  chat_id: message.chat.id,
                  text: text[0...4000],
                }

          This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

          Example:

          def my_method                   # 1
            if cond                       # 1
              case var                    # 2 (0.8 + 4 * 0.2, rounded)
              when 1 then func_one
              when 2 then func_two
              when 3 then func_three
              when 4..10 then func_other
              end
            else                          # 1
              do_something until a && b   # 2
            end                           # ===
          end                             # 7 complexity points

          Assignment Branch Condition size for send_faux_seer is too high. [21.59/15]
          Open

              def send_faux_seer(game, seer)
                log("sending seer instruction to #{seer.full_name}")
                chosen = seer
                while chosen.user_id == seer.user_id
                  chosen = game.living_players.sample

          This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

          Cyclomatic complexity for send is too high. [11/6]
          Open

              def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                options = {
                  chat_id: message.chat.id,
                  text: text[0...4000],
                }

          This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

          An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

          Method has too many lines. [15/10]
          Open

              def check_voting_finished(game, round, force = false)
                log("checking voting finished: #{round}")
                game.reload
                return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Cyclomatic complexity for check_voting_finished is too high. [10/6]
          Open

              def check_voting_finished(game, round, force = false)
                log("checking voting finished: #{round}")
                game.reload
                return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

          An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

          Perceived complexity for check_voting_finished is too high. [11/7]
          Open

              def check_voting_finished(game, round, force = false)
                log("checking voting finished: #{round}")
                game.reload
                return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')

          This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

          Example:

          def my_method                   # 1
            if cond                       # 1
              case var                    # 2 (0.8 + 4 * 0.2, rounded)
              when 1 then func_one
              when 2 then func_two
              when 3 then func_three
              when 4..10 then func_other
              end
            else                          # 1
              do_something until a && b   # 2
            end                           # ===
          end                             # 7 complexity points

          Method has too many lines. [14/10]
          Open

              def send_welcome_message(game)
                game.reload
                welcomed = game.clear_unwelcomed
                if !welcomed.empty? && game.waiting?
                  additional_text =

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Cyclomatic complexity for summon is too high. [9/6]
          Open

              def summon(game, who)
                if (Time.now - game.last_summon_query rescue 11).ceil > 10
                  to_call =
                    case who
                    when :all

          This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

          An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

          Method has too many lines. [13/10]
          Open

              def send_faux_seer(game, seer)
                log("sending seer instruction to #{seer.full_name}")
                chosen = seer
                while chosen.user_id == seer.user_id
                  chosen = game.living_players.sample

          This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

          Method check_round_finished has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
          Open

              def check_round_finished(game, round, force = false)
                log("checking round finished #{round}")
                game.reload
                return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?
                log('continuing')
          Severity: Minor
          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

          Cognitive Complexity

          Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

          A method's cognitive complexity is based on a few simple rules:

          • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
          • Code is considered more complex for each "break in the linear flow of the code"
          • Code is considered more complex when "flow breaking structures are nested"

          Further reading

          Perceived complexity for summon is too high. [8/7]
          Open

              def summon(game, who)
                if (Time.now - game.last_summon_query rescue 11).ceil > 10
                  to_call =
                    case who
                    when :all

          This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

          Example:

          def my_method                   # 1
            if cond                       # 1
              case var                    # 2 (0.8 + 4 * 0.2, rounded)
              when 1 then func_one
              when 2 then func_two
              when 3 then func_three
              when 4..10 then func_other
              end
            else                          # 1
              do_something until a && b   # 2
            end                           # ===
          end                             # 7 complexity points

          Method check_win has 43 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              def check_win(game)
                log('checking win condition')
                game.reload
                win = false
                ending = ''
          Severity: Minor
          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

            Assignment Branch Condition size for can_cancel_game? is too high. [15.17/15]
            Open

                def can_cancel_game?(message, game)
                  ret = @bot.api.get_chat_administrators(chat_id: message.chat.id)['result'].any?{ |cm| cm['user']['id'] == message.from.id } rescue false
                  ret || game.creator_id == message.from.id
                end

            This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

            Assignment Branch Condition size for remind is too high. [15.81/15]
            Open

                def remind(game, round, time, next_reminder, state)
                  log('reminding voting')
                  game.reload
                  return unless next_reminder && round == game.round && !game.night? && !game.waiting? && !game.finished?
                  log('continuing')

            This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

            Assignment Branch Condition size for send_kill_voting is too high. [15.56/15]
            Open

                def send_kill_voting(game, chat_id)
                  lw = game.living_werewolves + game.living_super_werewolves
                  single_w = lw.size == 1
                  killables = convert_to_square_keyboard(game.killables.map{ |kl| kl[:full_name] })
            
            

            This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

            Method check_voting_finished has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
            Open

                def check_voting_finished(game, round, force = false)
                  log("checking voting finished: #{round}")
                  game.reload
                  return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?
                  log('continuing')
            Severity: Minor
            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

            Cognitive Complexity

            Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

            A method's cognitive complexity is based on a few simple rules:

            • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
            • Code is considered more complex for each "break in the linear flow of the code"
            • Code is considered more complex when "flow breaking structures are nested"

            Further reading

            Method summon has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
            Open

                def summon(game, who)
                  if (Time.now - game.last_summon_query rescue 11).ceil > 10
                    to_call =
                      case who
                      when :all
            Severity: Minor
            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

            Cognitive Complexity

            Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

            A method's cognitive complexity is based on a few simple rules:

            • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
            • Code is considered more complex for each "break in the linear flow of the code"
            • Code is considered more complex when "flow breaking structures are nested"

            Further reading

            Method send has 31 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

                def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)
                  options = {
                    chat_id: message.chat.id,
                    text: text[0...4000],
                  }
            Severity: Minor
            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

              Method summon has 29 lines of code (exceeds 25 allowed). Consider refactoring.
              Open

                  def summon(game, who)
                    if (Time.now - game.last_summon_query rescue 11).ceil > 10
                      to_call =
                        case who
                        when :all
              Severity: Minor
              Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 1 hr to fix

                Avoid deeply nested control flow statements.
                Open

                            if in_private?(message)
                              if check_player(message)
                                send(message, 'Udah kedaftar!')
                              else
                                Lycantulul::RegisteredPlayer.create_from_message(message.from)
                Severity: Major
                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                  Avoid deeply nested control flow statements.
                  Open

                              if in_group?(message)
                                if group = Lycantulul::Group.get(message)
                                  if !group.pending_time_id
                                    keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: group.time_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)
                                    pending = send(message, 'Ubah waktu apa?', reply: true, keyboard: keyboard, async: false)
                  Severity: Major
                  Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                    Avoid deeply nested control flow statements.
                    Open

                                return unless message.from.username == 'araishikeiwai'
                    Severity: Major
                    Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                      Avoid deeply nested control flow statements.
                      Open

                                  if in_group?(message)
                                    if game = check_game(message)
                                      if check_player(message)
                                        if game.waiting?
                                          user = message.from
                      Severity: Major
                      Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                        Avoid deeply nested control flow statements.
                        Open

                                    if in_group?(message)
                                      if game = check_game(message)
                                        if game.waiting?
                                          if can_cancel_game?(message, game)
                                            game.finish(stats: false)
                        Severity: Major
                        Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                          Avoid deeply nested control flow statements.
                          Open

                                      if in_group?(message)
                                        if game = check_game(message)
                                          summon(game, :all)
                                        else
                                          send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)
                          Severity: Major
                          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                            Avoid deeply nested control flow statements.
                            Open

                                        if new_member.username =~ /bot$/i && message.chat&.username =~ /lycantulul/i
                                          unless new_member.username == 'tulul_stats_bot'
                                            @bot.api.kick_chat_member(chat_id: '@lycantulul', user_id: new_member.id) rescue nil
                                          end
                                        elsif !Lycantulul::RegisteredPlayer.get(new_member.id) && !new_member.username == 'lycantulul_bot'
                            Severity: Major
                            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                              Avoid deeply nested control flow statements.
                              Open

                                          if in_group?(message)
                                            if group = Lycantulul::Group.get(message)
                                              if group.pending_time_id
                                                group.cancel_pending_time
                                                send(message, 'Yosh. Udah boleh /ganti_settingan_waktu lagi', reply: true)
                              Severity: Major
                              Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                Avoid deeply nested control flow statements.
                                Open

                                            if in_group?(message)
                                              start_new_game(message)
                                            else
                                              wrong_room(message)
                                            end
                                Severity: Major
                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                  Avoid deeply nested control flow statements.
                                  Open

                                              if in_group?(message)
                                                if game = check_game(message)
                                                  if game.waiting?
                                                    if !MAINTENANCE_PREVENT.call
                                                      if game.players.count >= MINIMUM_PLAYER.call
                                  Severity: Major
                                  Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                    Avoid deeply nested control flow statements.
                                    Open

                                                if in_group?(message)
                                                  if game = check_game(message)
                                                    summon(game, :alive)
                                                  else
                                                    send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)
                                    Severity: Major
                                    Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                      Avoid deeply nested control flow statements.
                                      Open

                                                  if in_private?(message)
                                                    if game = check_werewolf_in_game(message)
                                                      log('werewolf confirmed')
                                                      case game.add_victim(message.from.id, message.text)
                                                      when Lycantulul::Game::RESPONSE_OK
                                      Severity: Major
                                      Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                        Avoid deeply nested control flow statements.
                                        Open

                                                    if in_group?(message)
                                                      if game = check_game(message)
                                                        if game.waiting?
                                                          game.toggle_voting_scheme
                                                          send(message, "Sistem voting berubah jadi #{game.voting_scheme}", reply: true)
                                        Severity: Major
                                        Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                          Avoid deeply nested control flow statements.
                                          Open

                                                      if in_group?(message)
                                                        if game = check_game(message)
                                                          if check_player(message)
                                                            if game.waiting?
                                                              user = message.from
                                          Severity: Major
                                          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                            Avoid deeply nested control flow statements.
                                            Open

                                                        if in_group?(message)
                                                          if game = check_game(message)
                                                            unless game.waiting?
                                                              unless game.night?
                                                                if (Time.now - game.last_voting_list_query rescue 11).ceil > 10
                                            Severity: Major
                                            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                              Avoid deeply nested control flow statements.
                                              Open

                                                          if in_private?(message)
                                                            if check_player(message)
                                                              send_to_player(message.chat.id, Lycantulul::RegisteredPlayer.get(message.from.id).statistics, parse_mode: 'HTML')
                                                            else
                                                              send(message, 'Maaf belum kedaftar, /start dulu yak')
                                              Severity: Major
                                              Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                Avoid deeply nested control flow statements.
                                                Open

                                                          elsif left_member = message.left_chat_member
                                                            if game = check_game(message)
                                                              game.players.with_id(left_member.id).destroy rescue nil
                                                            end
                                                Severity: Major
                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                  Avoid deeply nested control flow statements.
                                                  Open

                                                              if in_group?(message)
                                                                if game = check_game(message)
                                                                  if game.waiting?
                                                                    if !game.pending_custom_id
                                                                      keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: game.role_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)
                                                  Severity: Major
                                                  Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                    Avoid deeply nested control flow statements.
                                                    Open

                                                                if in_group?(message)
                                                                  if game = check_game(message)
                                                                    if game.waiting?
                                                                      if game.pending_custom_id
                                                                        game.cancel_pending_custom
                                                    Severity: Major
                                                    Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                      Avoid deeply nested control flow statements.
                                                      Open

                                                                  if in_group?(message)
                                                                    if game = check_game(message)
                                                                      unless game.waiting?
                                                                        unless game.night?
                                                                          summon(game, :voting)
                                                      Severity: Major
                                                      Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                        Avoid deeply nested control flow statements.
                                                        Open

                                                                    return unless message.from.username == 'araishikeiwai'
                                                        Severity: Major
                                                        Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                          Avoid deeply nested control flow statements.
                                                          Open

                                                                      if in_group?(message)
                                                                        if game = check_game(message)
                                                                          if (Time.now - game.last_player_list_query rescue 11).ceil > 10
                                                                            list_players(game)
                                                                          end
                                                          Severity: Major
                                                          Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                            Avoid deeply nested control flow statements.
                                                            Open

                                                                        if in_group?(message)
                                                                          if game = check_game(message)
                                                                            if game.waiting?
                                                                              if game.custom_roles
                                                                                game.remove_custom_roles
                                                            Severity: Major
                                                            Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 45 mins to fix

                                                              Method remind has 5 arguments (exceeds 4 allowed). Consider refactoring.
                                                              Open

                                                                  def remind(game, round, time, next_reminder, state)
                                                              Severity: Minor
                                                              Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb - About 35 mins to fix

                                                                Avoid parameter lists longer than 5 parameters. [6/5]
                                                                Open

                                                                    def send(message, text, reply: nil, html: nil, keyboard: nil, async: true)

                                                                This cop checks for methods with too many parameters. The maximum number of parameters is configurable. Keyword arguments can optionally be excluded from the total count.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if !MAINTENANCE_PREVENT.call
                                                                                    if game.players.count >= MINIMUM_PLAYER.call

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                unless game.waiting?
                                                                                  unless game.night?
                                                                                    summon(game, :voting)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                summon(game, :alive)
                                                                              else
                                                                                send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if group = Lycantulul::Group.get(message)
                                                                                if group.pending_time_id
                                                                                  group.cancel_pending_time
                                                                                  send(message, 'Yosh. Udah boleh /ganti_settingan_waktu lagi', reply: true)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if can_cancel_game?(message, game)
                                                                                    game.finish(stats: false)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if check_player(message)
                                                                                  if game.waiting?
                                                                                    user = message.from

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  game.toggle_voting_scheme
                                                                                  send(message, "Sistem voting berubah jadi #{game.voting_scheme}", reply: true)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            return unless message.from.username == 'araishikeiwai'

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if game.pending_custom_id
                                                                                    game.cancel_pending_custom

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            return unless message.from.username == 'araishikeiwai'

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            Lycantulul::RegisteredPlayer.find_by(user_id: message.chat.id).update_attribute(:blocked, true) rescue nil

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if new_member.username =~ /bot$/i && message.chat&.username =~ /lycantulul/i
                                                                              unless new_member.username == 'tulul_stats_bot'
                                                                                @bot.api.kick_chat_member(chat_id: '@lycantulul', user_id: new_member.id) rescue nil
                                                                              end
                                                                            elsif !Lycantulul::RegisteredPlayer.get(new_member.id) && !new_member.username == 'lycantulul_bot'

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                summon(game, :all)
                                                                              else
                                                                                send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_private?(message)
                                                                              if game = check_werewolf_in_game(message)
                                                                                log('werewolf confirmed')
                                                                                case game.add_victim(message.from.id, message.text)
                                                                                when Lycantulul::Game::RESPONSE_OK

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if game = check_game(message)
                                                                              game.players.with_id(left_member.id).destroy rescue nil
                                                                            end

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_private?(message)
                                                                              if check_player(message)
                                                                                send_to_player(message.chat.id, Lycantulul::RegisteredPlayer.get(message.from.id).statistics, parse_mode: 'HTML')
                                                                              else
                                                                                send(message, 'Maaf belum kedaftar, /start dulu yak')

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              start_new_game(message)
                                                                            else
                                                                              wrong_room(message)
                                                                            end

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if !game.pending_custom_id
                                                                                    keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: game.role_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_private?(message)
                                                                              if check_player(message)
                                                                                send(message, 'Udah kedaftar!')
                                                                              else
                                                                                Lycantulul::RegisteredPlayer.create_from_message(message.from)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if check_player(message)
                                                                                  if game.waiting?
                                                                                    user = message.from

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if group = Lycantulul::Group.get(message)
                                                                                if !group.pending_time_id
                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: group.time_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)
                                                                                  pending = send(message, 'Ubah waktu apa?', reply: true, keyboard: keyboard, async: false)

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if game.custom_roles
                                                                                    game.remove_custom_roles

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if (Time.now - game.last_player_list_query rescue 11).ceil > 10
                                                                                  list_players(game)
                                                                                end

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Avoid more than 3 levels of block nesting.
                                                                Open

                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                unless game.waiting?
                                                                                  unless game.night?
                                                                                    if (Time.now - game.last_voting_list_query rescue 11).ceil > 10

                                                                This cop checks for excessive nesting of conditional and looping constructs.

                                                                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                                                                The maximum level of nesting allowed is configurable.

                                                                Use options[:parse_mode] = 'HTML' instead of options.merge!({ parse_mode: 'HTML' }).
                                                                Open

                                                                      options.merge!({ parse_mode: 'HTML' }) if html

                                                                This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

                                                                Example:

                                                                hash.merge!(a: 1)
                                                                hash.merge!({'key' => 'value'})
                                                                hash.merge!(a: 1, b: 2)

                                                                Use options[:reply_to_message_id] = message.message_id instead of options.merge!({ reply_to_message_id: message.message_id }).
                                                                Open

                                                                      options.merge!({ reply_to_message_id: message.message_id }) if reply

                                                                This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

                                                                Example:

                                                                hash.merge!(a: 1)
                                                                hash.merge!({'key' => 'value'})
                                                                hash.merge!(a: 1, b: 2)

                                                                Use options[:reply_markup] = keyboard instead of options.merge!({ reply_markup: keyboard }).
                                                                Open

                                                                      options.merge!({ reply_markup: keyboard }) if keyboard

                                                                This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

                                                                Example:

                                                                hash.merge!(a: 1)
                                                                hash.merge!({'key' => 'value'})
                                                                hash.merge!(a: 1, b: 2)

                                                                Use options[:chat_id] = chat_id; options[:text] = text[0...4000] instead of options.merge!({ chat_id: chat_id, text: text[0...4000], }).
                                                                Open

                                                                      options.merge!({
                                                                        chat_id: chat_id,
                                                                        text: text[0...4000],
                                                                      })

                                                                This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

                                                                Example:

                                                                hash.merge!(a: 1)
                                                                hash.merge!({'key' => 'value'})
                                                                hash.merge!(a: 1, b: 2)

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                                log('homeless confirmed')
                                                                                case game.add_homeless_host(message.from.id, message.text)
                                                                                when Lycantulul::Game::RESPONSE_OK
                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)
                                                                                  send(message, 'Selamat datang! Anggap saja rumah sendiri~', keyboard: keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 416..426
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 428..438

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 53.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                                log('seer confirmed')
                                                                                case game.add_seen(message.from.id, message.text)
                                                                                when Lycantulul::Game::RESPONSE_OK
                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)
                                                                                  send(message, 'Seeep. Tunggu ronde berakhir yak, kalo lu atau yang mau lu liat mati, ya jadi ga ngasih tau~', keyboard: keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 428..438
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 453..463

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 53.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                                log('protector confirmed')
                                                                                case game.add_protectee(message.from.id, message.text)
                                                                                when Lycantulul::Game::RESPONSE_OK
                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)
                                                                                  send(message, 'Seeep', keyboard: keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 416..426
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 453..463

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 53.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                                  if !game.pending_custom_id
                                                                                    keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: game.role_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)
                                                                                    pending = send(message, 'Ubah jumlah peran siapa?', reply: true, keyboard: keyboard, async: false)
                                                                                    game.pending_reply(pending['result']['message_id']) rescue nil
                                                                                  else
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 344..349

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 49.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                                if !group.pending_time_id
                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: group.time_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)
                                                                                  pending = send(message, 'Ubah waktu apa?', reply: true, keyboard: keyboard, async: false)
                                                                                  group.pending_reply(pending['result']['message_id']) rescue nil
                                                                                else
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 173..178

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 49.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                          when /^\/batal_nyetting_peran(@lycantulul_bot)?/
                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if game.pending_custom_id
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 208..225

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 45.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                          when /^\/apus_settingan_peran(@lycantulul_bot)?/
                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                if game.waiting?
                                                                                  if game.custom_roles
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 1 hr to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 189..206

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 45.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                    def check_werewolf_in_game(message)
                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|
                                                                        if wwg.valid_action?(message.from.id, message.text, 'werewolf') || wwg.valid_action?(message.from.id, message.text, 'super_werewolf')
                                                                          return wwg
                                                                        end
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 956..962

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 38.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                    def check_necromancer(message)
                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|
                                                                        if wwg.valid_action?(message.from.id, message.text, 'necromancer') || wwg.valid_action?(message.from.id, message.text, 'super_necromancer')
                                                                          return wwg
                                                                        end
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 920..926

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 38.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 4 locations. Consider refactoring.
                                                                Open

                                                                    def send_seer(living_players, seer_full_name, seer_chat_id)
                                                                      log("sending seer instruction to #{seer_full_name}")
                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [seer_full_name])
                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)
                                                                      send_to_player(seer_chat_id, 'Mau ngintip perannya siapa kak? :3', reply_markup: vote_keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 3 other locations - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 777..781
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 809..813
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 825..829

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 37.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 4 locations. Consider refactoring.
                                                                Open

                                                                    def send_protector(living_players, protector_full_name, protector_chat_id)
                                                                      log("sending protector instruction to #{protector_full_name}")
                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [protector_full_name])
                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)
                                                                      send_to_player(protector_chat_id, 'Mau jual jimat ke siapa?', reply_markup: vote_keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 3 other locations - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 777..781
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 784..788
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 825..829

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 37.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 4 locations. Consider refactoring.
                                                                Open

                                                                    def send_voting(living_players, player_full_name, player_chat_id)
                                                                      log("sending voting to #{player_full_name}")
                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [player_full_name])
                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)
                                                                      send_to_player(player_chat_id, 'Ayo voting eksekusi siapa nih~', reply_markup: vote_keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 3 other locations - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 784..788
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 809..813
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 825..829

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 37.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 4 locations. Consider refactoring.
                                                                Open

                                                                    def send_homeless(living_players, homeless_full_name, homeless_chat_id)
                                                                      log("sending homeless instruction to #{homeless_full_name}")
                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [homeless_full_name])
                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)
                                                                      send_to_player(homeless_chat_id, 'Mau nebeng di rumah siapa?', reply_markup: vote_keyboard)
                                                                Severity: Major
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 3 other locations - About 55 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 777..781
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 784..788
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 809..813

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 37.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                    def check_protector(message)
                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|
                                                                        if wwg.valid_action?(message.from.id, message.text, 'protector')
                                                                          return wwg
                                                                        end
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 35 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 938..944
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 965..971

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 29.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                    def check_seer(message)
                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|
                                                                        if wwg.valid_action?(message.from.id, message.text, 'seer')
                                                                          return wwg
                                                                        end
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 35 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 947..953
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 965..971

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 29.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 3 locations. Consider refactoring.
                                                                Open

                                                                    def check_homeless(message)
                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|
                                                                        if wwg.valid_action?(message.from.id, message.text, 'homeless')
                                                                          return wwg
                                                                        end
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 2 other locations - About 35 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 938..944
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 947..953

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 29.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                          when /^\/panggil_yang_idup(@lycantulul_bot)?/
                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                summon(game, :alive)
                                                                              else
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 20 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 303..311

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 21.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Similar blocks of code found in 2 locations. Consider refactoring.
                                                                Open

                                                                          when /^\/panggil_semua(@lycantulul_bot)?/
                                                                            if in_group?(message)
                                                                              if game = check_game(message)
                                                                                summon(game, :all)
                                                                              else
                                                                Severity: Minor
                                                                Found in lib/lycantulul_bot/lycantulul/input_processor_job.rb and 1 other location - About 20 mins to fix
                                                                lib/lycantulul_bot/lycantulul/input_processor_job.rb on lines 313..321

                                                                Duplicated Code

                                                                Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                                                Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                                                When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                                                Tuning

                                                                This issue has a mass of 21.

                                                                We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                                                The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                                                If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                                                See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                                                Refactorings

                                                                Further Reading

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |_   _|   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "  \\___ \\   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      err += e.backtrace.select{ |err| err =~ /tulul/ }.join(', ') + "\n"

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Space missing to the left of {.
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [protector_full_name])

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Space missing to the left of {.
                                                                Open

                                                                            'Hoy ' + to_call_username.map{ |tc| "@#{tc}" }.join(' ')

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Line is too long. [90/80]
                                                                Open

                                                                    ALLOWED_DELAY = -> { (res = $redis.get('lycantulul::allowed_delay')) ? res.to_i : 20 }

                                                                Line is too long. [179/80]
                                                                Open

                                                                                    keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: game.role_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)

                                                                Line is too long. [108/80]
                                                                Open

                                                                              send_to_player(message.chat.id, Lycantulul::Group.get(message).statistics, parse_mode: 'HTML')

                                                                Line is too long. [225/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "Silakan voting siapa yang mau dieksekusi.\n\np.s.: semua wajib voting, waktunya cuma <b>#{game.voting_time} detik</b>. kalo ga ada suara mayoritas, ga ada yang mati", parse_mode: 'HTML')

                                                                Line is too long. [144/80]
                                                                Open

                                                                          send_to_player(group_chat_id, "#{voting_result}\nMPOZ MPOZ MPOZ\n\nTernyata dia itu #{game.get_role(votee.role)}", parse_mode: 'HTML')

                                                                Line is too long. [144/80]
                                                                Open

                                                                            send_to_player(game.group_id, "Seorang #{game.get_role(necromancer.role)} yang tidak mau disebutkan namanya berhasil" + end_message)

                                                                Indent the right brace the same as the first position after the preceding left parenthesis.
                                                                Open

                                                                      })

                                                                This cops checks the indentation of the first key in a hash literal where the opening brace and the first key are on separate lines. The other keys' indentations are handled by the AlignHash cop.

                                                                By default, Hash literals that are arguments in a method call with parentheses, and where the opening curly brace of the hash is on the same line as the opening parenthesis of the method call, shall have their first key indented one step (two spaces) more than the position inside the opening parenthesis.

                                                                Other hash literals shall have their first key indented one step more than the start of the line where the opening curly brace is.

                                                                This default style is called 'specialinsideparentheses'. Alternative styles are 'consistent' and 'align_braces'. Here are examples:

                                                                Example: EnforcedStyle: specialinsideparentheses (default)

                                                                # The `special_inside_parentheses` style enforces that the first key
                                                                # in a hash literal where the opening brace and the first key are on
                                                                # separate lines is indented one step (two spaces) more than the
                                                                # position inside the opening parentheses.
                                                                
                                                                # bad
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                and_in_a_method_call({
                                                                  no: :difference
                                                                                     })
                                                                
                                                                # good
                                                                special_inside_parentheses
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                but_in_a_method_call({
                                                                                       its_like: :this
                                                                                     })

                                                                Example: EnforcedStyle: consistent

                                                                # The `consistent` style enforces that the first key in a hash
                                                                # literal where the opening brace and the first key are on
                                                                # seprate lines is indented the same as a hash literal which is not
                                                                # defined inside a method call.
                                                                
                                                                # bad
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                but_in_a_method_call({
                                                                                       its_like: :this
                                                                                      })
                                                                
                                                                # good
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                and_in_a_method_call({
                                                                  no: :difference
                                                                })

                                                                Example: EnforcedStyle: align_braces

                                                                # The `align_brackets` style enforces that the opening and closing
                                                                # braces are indented to the same position.
                                                                
                                                                # bad
                                                                and_now_for_something = {
                                                                                          completely: :different
                                                                }
                                                                
                                                                # good
                                                                and_now_for_something = {
                                                                                          completely: :different
                                                                                        }

                                                                Missing space after #.
                                                                Open

                                                                      #rg = Lycantulul::Game.running

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "    /  \\   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "   / /\\ \\  \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if group = Lycantulul::Group.get(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Shadowing outer local variable - dp.
                                                                Open

                                                                        aux.each do |dp|

                                                                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                                                                Example:

                                                                # bad
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |foo| # shadowing outer `foo`
                                                                    do_something(foo)
                                                                  end
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |bar|
                                                                    do_something(bar)
                                                                  end
                                                                end

                                                                Line is too long. [88/80]
                                                                Open

                                                                            if new_member.username =~ /bot$/i && message.chat&.username =~ /lycantulul/i

                                                                Line is too long. [124/80]
                                                                Open

                                                                                  send(message, 'Udah ada yang mulai nyetting tadi, selesaiin dulu atau /batal_nyetting_waktu', reply: true)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)

                                                                Line is too long. [136/80]
                                                                Open

                                                                                  send(message, 'Seeep. Kamu sungguh berjasa :\') Tapi kalo kamu dibunuh serigala, gajadi deh :\'(', keyboard: keyboard)

                                                                Line is too long. [97/80]
                                                                Open

                                                                                  send(message, 'Selamat datang! Anggap saja rumah sendiri~', keyboard: keyboard)

                                                                Line is too long. [88/80]
                                                                Open

                                                                        lw = (game.living_werewolves + game.living_super_werewolves + game.living_spies)

                                                                Line is too long. [96/80]
                                                                Open

                                                                            send_to_player(dh.user_id, 'MPOZ salah kamar woy nebeng yang bener ya besok-besok!')

                                                                Line is too long. [108/80]
                                                                Open

                                                                          send_to_player(protector_id, "Jangan jualan ke sembarang orang! Lu jualan ke serigala, mati aja.")

                                                                Line is too long. [124/80]
                                                                Open

                                                                          send_to_player(necromancee.user_id, "Kamu telah dihidupkan kembali oleh seorang mujahid! Selamat datang kembali!")

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " /_/__  \\_\\\n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Incorrect indentation detected (column 8 instead of 6).
                                                                Open

                                                                        #send_to_player(rg.group_id, 'Maaf ada error sesuatu, permainan terpaksa dihentikan dan main tenis. Maap yak')

                                                                This cops checks the indentation of comments.

                                                                Example:

                                                                # bad
                                                                  # comment here
                                                                def method_name
                                                                end
                                                                
                                                                  # comment here
                                                                a = 'hello'
                                                                
                                                                # yet another comment
                                                                  if true
                                                                    true
                                                                  end
                                                                
                                                                # good
                                                                # comment here
                                                                def method_name
                                                                end
                                                                
                                                                # comment here
                                                                a = 'hello'
                                                                
                                                                # yet another comment
                                                                if true
                                                                  true
                                                                end

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |  _ \\    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "   | |     \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                        send_to_player(group_chat_id, "Pemain yang tidak voting #{Lycantulul::Player::ABSTAIN_LIMIT}x dan dibunuh paksa:\n#{abstains.map{ |abs| "- <b>#{abs.full_name}</b> - <i>#{game.get_role(abs.role)}</i>" }.join("\n")}", parse_mode: 'HTML')

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Space missing to the left of {.
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [homeless_full_name])

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Shadowing outer local variable - lp.
                                                                Open

                                                                        livp.each do |lp|

                                                                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                                                                Example:

                                                                # bad
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |foo| # shadowing outer `foo`
                                                                    do_something(foo)
                                                                  end
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |bar|
                                                                    do_something(bar)
                                                                  end
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [128/80]
                                                                Open

                                                                                        send(message, "Jangan /gajadi main dong #{user.first_name} :( /ikutan lagi plis :(\n#{additional_text}")

                                                                Line is too long. [96/80]
                                                                Open

                                                                                  send(message, "Sistem voting berubah jadi #{game.voting_scheme}", reply: true)

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [123/80]
                                                                Open

                                                                                  pending = send(message, "Mau berapa #{game.get_role(role)}?", reply: true, keyboard: force, async: false)

                                                                Line is too long. [158/80]
                                                                Open

                                                                            send_to_player(group_chat_id, "#{dh.full_name} si #{game.get_role(dh.role)} salah kamar tadi malem, nebeng di tempat yang salah pffft. Mati deh.")

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_werewolf_in_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [148/80]
                                                                Open

                                                                        Lycantulul::VotingTimerJob.perform_in(game.voting_time / 2, game, game.round, Lycantulul::VotingTimerJob::START, game.voting_time / 2, self)

                                                                Line is too long. [88/80]
                                                                Open

                                                                          send_to_player(votee.user_id, 'CIYEEE ANAK PRESIDEN SELAMET YEE GA JADI MATI')

                                                                Line is too long. [101/80]
                                                                Open

                                                                      send_to_player(seer_chat_id, 'Mau ngintip perannya siapa kak? :3', reply_markup: vote_keyboard)

                                                                Line is too long. [91/80]
                                                                Open

                                                                    MINIMUM_PLAYER = -> { (res = $redis.get('lycantulul::minimum_player')) ? res.to_i : 5 }

                                                                Line is too long. [115/80]
                                                                Open

                                                                          send_to_player(abs.user_id, "#{Lycantulul::Player::ABSTAIN_LIMIT}x tidak voting, terpaksa harus dibunuh")

                                                                Line is too long. [106/80]
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [player_full_name])

                                                                Use 2 spaces for indentation in a hash, relative to the first position after the preceding left parenthesis.
                                                                Open

                                                                        chat_id: chat_id,

                                                                This cops checks the indentation of the first key in a hash literal where the opening brace and the first key are on separate lines. The other keys' indentations are handled by the AlignHash cop.

                                                                By default, Hash literals that are arguments in a method call with parentheses, and where the opening curly brace of the hash is on the same line as the opening parenthesis of the method call, shall have their first key indented one step (two spaces) more than the position inside the opening parenthesis.

                                                                Other hash literals shall have their first key indented one step more than the start of the line where the opening curly brace is.

                                                                This default style is called 'specialinsideparentheses'. Alternative styles are 'consistent' and 'align_braces'. Here are examples:

                                                                Example: EnforcedStyle: specialinsideparentheses (default)

                                                                # The `special_inside_parentheses` style enforces that the first key
                                                                # in a hash literal where the opening brace and the first key are on
                                                                # separate lines is indented one step (two spaces) more than the
                                                                # position inside the opening parentheses.
                                                                
                                                                # bad
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                and_in_a_method_call({
                                                                  no: :difference
                                                                                     })
                                                                
                                                                # good
                                                                special_inside_parentheses
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                but_in_a_method_call({
                                                                                       its_like: :this
                                                                                     })

                                                                Example: EnforcedStyle: consistent

                                                                # The `consistent` style enforces that the first key in a hash
                                                                # literal where the opening brace and the first key are on
                                                                # seprate lines is indented the same as a hash literal which is not
                                                                # defined inside a method call.
                                                                
                                                                # bad
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                but_in_a_method_call({
                                                                                       its_like: :this
                                                                                      })
                                                                
                                                                # good
                                                                hash = {
                                                                  key: :value
                                                                }
                                                                and_in_a_method_call({
                                                                  no: :difference
                                                                })

                                                                Example: EnforcedStyle: align_braces

                                                                # The `align_brackets` style enforces that the opening and closing
                                                                # braces are indented to the same position.
                                                                
                                                                # bad
                                                                and_now_for_something = {
                                                                                          completely: :different
                                                                }
                                                                
                                                                # good
                                                                and_now_for_something = {
                                                                                          completely: :different
                                                                                        }

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "   | |     \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      options << dead_players.map{ |lv| lv[:full_name] }

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              elsif game = check_seer(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Shadowing outer local variable - err.
                                                                Open

                                                                      err += e.backtrace.select{ |err| err =~ /tulul/ }.join(', ') + "\n"

                                                                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                                                                Example:

                                                                # bad
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |foo| # shadowing outer `foo`
                                                                    do_something(foo)
                                                                  end
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                def some_method
                                                                  foo = 1
                                                                
                                                                  2.times do |bar|
                                                                    do_something(bar)
                                                                  end
                                                                end

                                                                Line is too long. [83/80]
                                                                Open

                                                                    MAINTENANCE = -> { $redis.get('lycantulul::maintenance').to_i == 1 rescue nil }

                                                                Line is too long. [81/80]
                                                                Open

                                                                                    $redis.rpush('lycantulul::maintenance_info', message.chat.id)

                                                                Line is too long. [102/80]
                                                                Open

                                                                                  send(message, 'Ga ada yang lagi nyetting, /ganti_settingan_waktu dulu', reply: true)

                                                                Line is too long. [96/80]
                                                                Open

                                                                                  message_action(game, WEREWOLF_KILL_BROADCAST, [message.from.id, message.text])

                                                                Line is too long. [392/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "Malam pun tiba, para penduduk desa pun terlelap dalam gelap.\nNamun #{game.living_werewolves.count + game.living_super_werewolves.count} serigala culas diam-diam mengintai mereka yang tertidur pulas.\n\np.s.: Buruan action via PM, cuma ada waktu <b>#{game.night_time} detik</b>! Kecuali warga kampung, diam aja menunggu kematian ya", parse_mode: 'HTML')

                                                                Line is too long. [95/80]
                                                                Open

                                                                          !game.super_necromancer_done[se[:user_id].to_s] && send_necromancer(dp, se[:user_id])

                                                                Line is too long. [132/80]
                                                                Open

                                                                          send_to_player(ww.user_id, brd) unless ww.role == Lycantulul::Game::SPY && killer.role == Lycantulul::Game::SUPER_WEREWOLF

                                                                Line is too long. [243/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "Pemain yang tidak voting #{Lycantulul::Player::ABSTAIN_LIMIT}x dan dibunuh paksa:\n#{abstains.map{ |abs| "- <b>#{abs.full_name}</b> - <i>#{game.get_role(abs.role)}</i>" }.join("\n")}", parse_mode: 'HTML')

                                                                Line is too long. [115/80]
                                                                Open

                                                                          send_to_player(seer_id, "Dengan kekuatan maksiat, peran si #{seen_full_name} pun terlihat: #{seen_role}")

                                                                Line is too long. [136/80]
                                                                Open

                                                                      kill_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: killables, resize_keyboard: true, one_time_keyboard: true)

                                                                Missing space after #.
                                                                Open

                                                                      #$redis.set('lycantulul::maintenance', 1)

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #send_to_player(rg.group_id, 'Maaf ada error sesuatu, permainan terpaksa dihentikan dan main tenis. Maap yak')

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                          puts e.backtrace.select{ |err| err =~ /tulul/ }.join(', ')

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              elsif game = check_protector(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [104/80]
                                                                Open

                                                                                    send(message, 'Cuma admin grup atau yang bikin game yang bisa batalin', reply: true)

                                                                Line is too long. [129/80]
                                                                Open

                                                                                send_to_player(message.chat.id, Lycantulul::RegisteredPlayer.get(message.from.id).statistics, parse_mode: 'HTML')

                                                                Line is too long. [102/80]
                                                                Open

                                                                                  voter = game.public_vote? ? "<b>#{message.from.first_name}</b>" : '<i>Seseorang</i>'

                                                                Line is too long. [81/80]
                                                                Open

                                                                                  send_protector(game.living_players, full_name, message.chat.id)

                                                                Line is too long. [156/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "GILS GILS GILS\nserigala berhasil memakan si #{victim_full_name}\nMPOZ MPOZ MPOZ\n\nTernyata dia itu #{victim_role}")

                                                                Line is too long. [108/80]
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [homeless_full_name])

                                                                Missing space after #.
                                                                Open

                                                                        #rg.finish(stats: false)

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              elsif game = check_necromancer(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [97/80]
                                                                Open

                                                                                  game.add_voter_message("#{voter} <i>udah nge-vote:</i> <b>#{message.text}</b>")

                                                                Line is too long. [92/80]
                                                                Open

                                                                        send_to_player(group_chat_id, 'PFFFTTT CUPU BANGET SERIGALA PADA, ga ada yang mati')

                                                                Line is too long. [111/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "#{voting_result}\n\nNulul tidak membuahkan mufakat", parse_mode: 'HTML')

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                          elsif left_member = message.left_chat_member

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [86/80]
                                                                Open

                                                                                  send(message, 'Udah mulai tjoy ga bisa batal enak aje', reply: true)

                                                                Line is too long. [118/80]
                                                                Open

                                                                                    pending = send(message, 'Ubah jumlah peran siapa?', reply: true, keyboard: keyboard, async: false)

                                                                Line is too long. [81/80]
                                                                Open

                                                                                    send(message, 'Masih malem, belom mulai voting', reply: true)

                                                                Line is too long. [178/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: group.time_setting_keyboard, resize_keyboard: true, one_time_keyboard: true, selective: true)

                                                                Missing space after #.
                                                                Open

                                                                      #$redis.set('lycantulul::maintenance_prevent', 1)

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Line is too long. [100/80]
                                                                Open

                                                                      reserved_words = [Lycantulul::Game::NECROMANCER_SKIP, Lycantulul::Game::USELESS_VILLAGER_SKIP]

                                                                Missing space after #.
                                                                Open

                                                                      #end

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " | (___    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      killables = convert_to_square_keyboard(game.killables.map{ |kl| kl[:full_name] })

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                          if new_member = message.new_chat_member

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [99/80]
                                                                Open

                                                                    MAINTENANCE_PREVENT = -> { $redis.get('lycantulul::maintenance_prevent').to_i == 1 rescue nil }

                                                                Line is too long. [110/80]
                                                                Open

                                                                            elsif !Lycantulul::RegisteredPlayer.get(new_member.id) && !new_member.username == 'lycantulul_bot'

                                                                Line is too long. [104/80]
                                                                Open

                                                                                    send(message, 'Ga ada yang lagi nyetting, /ganti_settingan_peran dulu', reply: true)

                                                                Line is too long. [81/80]
                                                                Open

                                                                                  group.pending_reply(pending['result']['message_id']) rescue nil

                                                                Line is too long. [104/80]
                                                                Open

                                                                            keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true, selective: true)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)

                                                                Line is too long. [98/80]
                                                                Open

                                                                                  force = Telegram::Bot::Types::ForceReply.new(force_reply: true, selective: true)

                                                                Line is too long. [81/80]
                                                                Open

                                                                        send(message, 'Udah ada yang ngemulai gan tadi. /ikutan ae', reply: true)

                                                                Line is too long. [238/80]
                                                                Open

                                                                          send_to_player(group_chat_id, "#{victim_full_name} yang ternyata mengidap ebola ikut menjangkiti seekor serigala #{dead_werewolf.full_name} yang pada akhirnya meninggal dunia. Mari berantas ebola dari muka bumi ini secepatnya!")

                                                                Line is too long. [144/80]
                                                                Open

                                                                        send_to_player(group_chat_id, "Silakan bertulul dan bermufakat, waktunya cuma <b>#{game.discussion_time} detik</b>", parse_mode: 'HTML')

                                                                Line is too long. [204/80]
                                                                Open

                                                                          send_to_player(necromancer.user_id, "Kamu berhasil menghidupkan kembali #{necromancee.full_name}. Terima kasih, terima kasih, terima kasih. Kamu memang makhluk paling keren di muka bumi ini :*")

                                                                Missing space after #.
                                                                Open

                                                                      #rg.each do |rg|

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Missing space after #.
                                                                Open

                                                                        #ending += ".    /\\    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " | |_) |   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |____/    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "  ____) |  \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |_____/   "

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      send_to_player(chat_id, "Daftar serigala yang masih hidup: #{lw.map{ |w| w[:full_name] }.join(', ')}\n\np.s.: harus diskusi dulu. Jawaban semua serigala dikumpulin dan yang paling banyak dibunuh. Kalo ga ada suara yang mayoritas, ga ada yang terbunuh yaa") unless single_w

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Line is too long. [84/80]
                                                                Open

                                                                    NIGHT_TIME = -> { (res = $redis.get('lycantulul::night_time')) ? res.to_i : 90 }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                            if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [101/80]
                                                                Open

                                                                              send(message, "Welcome #{name}. PM aku @lycantulul_bot terus /start yaa~", reply: true)

                                                                Line is too long. [81/80]
                                                                Open

                                                                                        send(message, 'Bubar semua bubar! /bikin_baru lagi dong')

                                                                Line is too long. [87/80]
                                                                Open

                                                                    VOTING_TIME = -> { (res = $redis.get('lycantulul::voting_time')) ? res.to_i : 160 }

                                                                Line is too long. [94/80]
                                                                Open

                                                                                    send(message, 'Yosh. Udah boleh /ganti_settingan_peran lagi', reply: true)

                                                                Line is too long. [86/80]
                                                                Open

                                                                            Lycantulul::Game.running.find_by(group_id: group_id)&.finish(stats: false)

                                                                Line is too long. [146/80]
                                                                Open

                                                                                      send(message, "Belom #{MINIMUM_PLAYER.call} orang! Tidak bisa~ Yang lain mending /ikutan dulu biar bisa mulai", reply: true)

                                                                Line is too long. [110/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true, selective: true)

                                                                Line is too long. [167/80]
                                                                Open

                                                                                    send(message, "Jangan /mulai_main dulu ya, mau main tenis bentar. Masih nungguin #{Lycantulul::Game.running.count} game selesai dulu", reply: true)

                                                                Line is too long. [121/80]
                                                                Open

                                                                                  pending = send(message, "Mau berapa detik? (10-300 detik)", reply: true, keyboard: force, async: false)

                                                                Line is too long. [112/80]
                                                                Open

                                                                                    keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true, selective: true)

                                                                Line is too long. [126/80]
                                                                Open

                                                                          log("sending necromancing messages to necromancer #{necromancer.full_name} and the raised #{necromancee.full_name}")

                                                                Line is too long. [118/80]
                                                                Open

                                                                            Lycantulul::RegisteredPlayer.find_by(user_id: message.chat.id).update_attribute(:blocked, true) rescue nil

                                                                Line is too long. [158/80]
                                                                Open

                                                                      #send_to_player(Lycantulul::RegisteredPlayer.find_by(username: 'araishikeiwai').user_id, "EXCEPTION! CHECK SERVER! #{rg.count} GAMES STOPPED\n\n#{err}")

                                                                Line is too long. [127/80]
                                                                Open

                                                                          send(message, "Oke yok maen! Yang mau /ikutan buruan yee. Kalo udah #{MINIMUM_PLAYER.call} pemain ntar bisa dimulai")

                                                                Line is too long. [159/80]
                                                                Open

                                                                            send_to_player(game.group_id, "#{necromancer.full_name} sang #{game.get_role(necromancer.role)} berhasil mengorbankan dirinya untuk" + end_message)

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "  _| |_    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [109/80]
                                                                Open

                                                                                send(message, 'Batal apaan gan orang ga ada yang maen dah. Mending /bikin_baru', reply: true)

                                                                Line is too long. [126/80]
                                                                Open

                                                                                    send(message, 'Udah ada yang mulai nyetting tadi, selesaiin dulu atau /batal_nyetting_peran', reply: true)

                                                                Line is too long. [102/80]
                                                                Open

                                                                            (stat = Lycantulul::Statistics.get_stats(message.text)) && send(message, stat, html: true)

                                                                Line is too long. [109/80]
                                                                Open

                                                                                  send(message, "Sip. Jumlah #{res[0]} ntar jadi #{res[1]}", reply: true, keyboard: keyboard)

                                                                Line is too long. [85/80]
                                                                Open

                                                                        Lycantulul::NightTimerJob.perform_in(game.night_time, game, game.round, self)

                                                                Line is too long. [82/80]
                                                                Open

                                                                          log("sending #{seen_full_name}'s role #{seen_role} to seer: #{seer_id}")

                                                                Line is too long. [96/80]
                                                                Open

                                                                      send_to_player(protector_chat_id, 'Mau jual jimat ke siapa?', reply_markup: vote_keyboard)

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "  / ____|  \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing after comma.
                                                                Open

                                                                                check_round_finished(game,game.round)

                                                                Checks for comma (,) not followed by some kind of space.

                                                                Example:

                                                                # bad
                                                                [1,2]
                                                                { foo:bar,}
                                                                
                                                                # good
                                                                [1, 2]
                                                                { foo:bar, }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if group = Lycantulul::Group.get(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              elsif game = check_voting(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [95/80]
                                                                Open

                                                                    DISCUSSION_TIME = -> { (res = $redis.get('lycantulul::discussion_time')) ? res.to_i : 120 }

                                                                Line is too long. [100/80]
                                                                Open

                                                                                @bot.api.kick_chat_member(chat_id: '@lycantulul', user_id: new_member.id) rescue nil

                                                                Line is too long. [92/80]
                                                                Open

                                                                              name = new_member.username ? "@#{new_member.username}" : new_member.first_name

                                                                Line is too long. [125/80]
                                                                Open

                                                                                send(message, 'Terdaftar! Lood Guck and Fave hun! Kalo mau ikutan main, balik ke grup, terus pencet /ikutan')

                                                                Line is too long. [108/80]
                                                                Open

                                                                                      send(message, 'Namanya ga boleh sama kaya yang udah gabung, ganti nama!', reply: true)

                                                                Line is too long. [143/80]
                                                                Open

                                                                                        send(message, 'Pembagian peran yang dikasih ga valid, /apus_settingan_peran atau /ganti_settingan_peran!', reply: true)

                                                                Line is too long. [85/80]
                                                                Open

                                                                                send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)

                                                                Line is too long. [142/80]
                                                                Open

                                                                                    send(message, "Sejak kapan 10 <= #{time.to_i} <= 300? Ulang /ganti_settingan_waktu lagi", reply: true, keyboard: keyboard)

                                                                Line is too long. [81/80]
                                                                Open

                                                                                  group.pending_reply(pending['result']['message_id']) rescue nil

                                                                Line is too long. [144/80]
                                                                Open

                                                                          send_to_player(pl[:user_id], "Peran kamu kali ini adalah......#{game.get_role(pl[:role])}!!!\n\nTugasmu: #{game.get_task(pl[:role])}")

                                                                Line is too long. [87/80]
                                                                Open

                                                                      killables = convert_to_square_keyboard(game.killables.map{ |kl| kl[:full_name] })

                                                                Missing space after #.
                                                                Open

                                                                      #send_to_player(Lycantulul::RegisteredPlayer.find_by(username: 'araishikeiwai').user_id, "EXCEPTION! CHECK SERVER! #{rg.count} GAMES STOPPED\n\n#{err}")

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += "  / ____ \\ \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " | |_) |   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [85/80]
                                                                Open

                                                                                send(message, 'Ga ada yang lagi main, /bikin_baru dulu', reply: true)

                                                                Line is too long. [98/80]
                                                                Open

                                                                                  force = Telegram::Bot::Types::ForceReply.new(force_reply: true, selective: true)

                                                                Line is too long. [128/80]
                                                                Open

                                                                          [Lycantulul::Game::WEREWOLF, Lycantulul::Game::SUPER_WEREWOLF].include?(ww.role) && brd += " oleh #{killer.full_name}"

                                                                Line is too long. [171/80]
                                                                Open

                                                                          send_to_player(group_chat_id, "#{voting_result}\nNamun ternyata dia itu #{game.get_role(votee.role)}, selamatlah dia dari eksekusi kali ini", parse_mode: 'HTML')

                                                                Line is too long. [134/80]
                                                                Open

                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |_____|   \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [player_full_name])

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              if game = check_game(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Line is too long. [101/80]
                                                                Open

                                                                          send(message, 'Lagi bermain tenis bersama Ecchi-men Ryoman dan Nopak Jokowi', reply: reply)

                                                                Line is too long. [83/80]
                                                                Open

                                                                                            'Ayo deh yang lain juga /ikutan, biar bisa /mulai_main'

                                                                Line is too long. [81/80]
                                                                Open

                                                                                    send(message, 'Masih malem, belom mulai voting', reply: true)

                                                                Line is too long. [107/80]
                                                                Open

                                                                                  pending = send(message, 'Ubah waktu apa?', reply: true, keyboard: keyboard, async: false)

                                                                Line is too long. [92/80]
                                                                Open

                                                                                  send(message, 'Yosh. Udah boleh /ganti_settingan_waktu lagi', reply: true)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)

                                                                Line is too long. [125/80]
                                                                Open

                                                                              if (game = check_game(message)) && (game.pending_custom_id == message.reply_to_message.message_id rescue false)

                                                                Line is too long. [112/80]
                                                                Open

                                                                                    keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true, selective: true)

                                                                Line is too long. [112/80]
                                                                Open

                                                                                    send(message, "Sip, waktu #{res[0]} jadi #{res[1]} detik!", reply: true, keyboard: keyboard)

                                                                Line is too long. [118/80]
                                                                Open

                                                                        #send_to_player(rg.group_id, 'Maaf ada error sesuatu, permainan terpaksa dihentikan dan main tenis. Maap yak')

                                                                Line is too long. [153/80]
                                                                Open

                                                                          send_to_player(dead_werewolf.user_id, "MPOZ. Sial kan bunuh #{game.get_role(Lycantulul::Game::SILVER_BULLET)}, lu ikutan terjangkit. Mati deh")

                                                                Line is too long. [95/80]
                                                                Open

                                                                        Lycantulul::DiscussionTimerJob.perform_in(game.discussion_time, game, game.round, self)

                                                                Line is too long. [92/80]
                                                                Open

                                                                        voting_result = "#{aux[1]}\n\nHasil bertulul berbuah eksekusi si #{votee.full_name}"

                                                                Line is too long. [147/80]
                                                                Open

                                                                      send_to_player(seer.user_id, "Hum bala hum bala hum naga cinta membuka mata acha septriasa: peran #{chosen.full_name} adalah #{chosen_role}")

                                                                Incorrect indentation detected (column 6 instead of 8).
                                                                Open

                                                                      #rg.each do |rg|

                                                                This cops checks the indentation of comments.

                                                                Example:

                                                                # bad
                                                                  # comment here
                                                                def method_name
                                                                end
                                                                
                                                                  # comment here
                                                                a = 'hello'
                                                                
                                                                # yet another comment
                                                                  if true
                                                                    true
                                                                  end
                                                                
                                                                # good
                                                                # comment here
                                                                def method_name
                                                                end
                                                                
                                                                # comment here
                                                                a = 'hello'
                                                                
                                                                # yet another comment
                                                                if true
                                                                  true
                                                                end

                                                                Missing space after #.
                                                                Open

                                                                        #ending += " |  _ &lt;    \n"

                                                                This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

                                                                Example:

                                                                # bad
                                                                #Some comment
                                                                
                                                                # good
                                                                # Some comment

                                                                Space missing to the left of {.
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [seer_full_name])

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Space missing to the left of {.
                                                                Open

                                                                      keyboard.reject{ |x| !x || x.empty? }

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Space missing to the left of {.
                                                                Open

                                                                      ret = @bot.api.get_chat_administrators(chat_id: message.chat.id)['result'].any?{ |cm| cm['user']['id'] == message.from.id } rescue false

                                                                Checks that block braces have or don't have a space before the opening brace depending on configuration.

                                                                Example:

                                                                # bad
                                                                foo.map{ |a|
                                                                  a.bar.to_s
                                                                }
                                                                
                                                                # good
                                                                foo.map { |a|
                                                                  a.bar.to_s
                                                                }

                                                                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                                                                Open

                                                                              elsif game = check_homeless(message)

                                                                This cop checks for assignments in the conditions of if/while/until.

                                                                Example:

                                                                # bad
                                                                
                                                                if some_var = true
                                                                  do_something
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                if some_var == true
                                                                  do_something
                                                                end

                                                                Unused method argument - force. If it's necessary, use _ or _force as an argument name to indicate that it won't be used.
                                                                Open

                                                                    def end_discussion_and_start_voting(game, round, force = false)

                                                                This cop checks for unused method arguments.

                                                                Example:

                                                                # bad
                                                                
                                                                def some_method(used, unused, _unused_but_allowed)
                                                                  puts used
                                                                end

                                                                Example:

                                                                # good
                                                                
                                                                def some_method(used, _unused, _unused_but_allowed)
                                                                  puts used
                                                                end

                                                                Line is too long. [108/80]
                                                                Open

                                                                          send(message, 'Namanya jangan alay pake karakter-karakter aneh dong :( Ganti dulu!', reply: reply)

                                                                Line is too long. [125/80]
                                                                Open

                                                                                            "Orangnya jadi kurang kan. #{MINIMUM_PLAYER.call - game.players.count} orang lagi buruan /ikutan"

                                                                Line is too long. [96/80]
                                                                Open

                                                                                      send(message, 'Jangan bohong kamu ya. Kamu kan ndak /ikutan', reply: true)

                                                                Line is too long. [82/80]
                                                                Open

                                                                                    game.pending_reply(pending['result']['message_id']) rescue nil

                                                                Line is too long. [109/80]
                                                                Open

                                                                                    send(message, 'Belom ada yang nyetting2 peran, /ganti_settingan_peran dulu', reply: true)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                send(message, 'Ga ada, orang ga ada yang maen. /bikin_baru gih', reply: true)

                                                                Line is too long. [83/80]
                                                                Open

                                                                                    if (Time.now - game.last_voting_list_query rescue 11).ceil > 10

                                                                Line is too long. [147/80]
                                                                Open

                                                                                  send(message, 'Seeep. Tunggu ronde berakhir yak, kalo lu atau yang mau lu liat mati, ya jadi ga ngasih tau~', keyboard: keyboard)

                                                                Line is too long. [93/80]
                                                                Open

                                                                                  keyboard = Telegram::Bot::Types::ReplyKeyboardHide.new(hide_keyboard: true)

                                                                Line is too long. [139/80]
                                                                Open

                                                                              elsif (group = Lycantulul::Group.get(message)) && (group.pending_time_id == message.reply_to_message.message_id rescue false)

                                                                Line is too long. [148/80]
                                                                Open

                                                                          send_to_player(game.group_id, "Bego nih #{game.get_role(Lycantulul::Game::PROTECTOR)} si #{protector_name} malah jualan ke serigala :'))")

                                                                Line is too long. [107/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|

                                                                Line is too long. [102/80]
                                                                Open

                                                                            send_to_player(tc.user_id, 'Hai hai kamu belum voting udah ditungguin tuh sama yang lain')

                                                                Missing magic comment # frozen_string_literal: true.
                                                                Open

                                                                module Lycantulul

                                                                This cop is designed to help upgrade to Ruby 3.0. It will add the comment # frozen_string_literal: true to the top of files to enable frozen string literals. Frozen string literals may be default in Ruby 3.0. The comment will be added below a shebang and encoding comment. The frozen string literal comment is only valid in Ruby 2.3+.

                                                                Example: EnforcedStyle: when_needed (default)

                                                                # The `when_needed` style will add the frozen string literal comment
                                                                # to files only when the `TargetRubyVersion` is set to 2.3+.
                                                                # bad
                                                                module Foo
                                                                  # ...
                                                                end
                                                                
                                                                # good
                                                                # frozen_string_literal: true
                                                                
                                                                module Foo
                                                                  # ...
                                                                end

                                                                Example: EnforcedStyle: always

                                                                # The `always` style will always add the frozen string literal comment
                                                                # to a file, regardless of the Ruby version or if `freeze` or `<<` are
                                                                # called on a string literal.
                                                                # bad
                                                                module Bar
                                                                  # ...
                                                                end
                                                                
                                                                # good
                                                                # frozen_string_literal: true
                                                                
                                                                module Bar
                                                                  # ...
                                                                end

                                                                Example: EnforcedStyle: never

                                                                # The `never` will enforce that the frozen string literal comment does
                                                                # not exist in a file.
                                                                # bad
                                                                # frozen_string_literal: true
                                                                
                                                                module Baz
                                                                  # ...
                                                                end
                                                                
                                                                # good
                                                                module Baz
                                                                  # ...
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/batal_nyetting_peran(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Prefer single-quoted strings when you don't need string interpolation or special symbols.
                                                                Open

                                                                                  pending = send(message, "Mau berapa detik? (10-300 detik)", reply: true, keyboard: force, async: false)

                                                                Checks if uses of quotes match the configured preference.

                                                                Example: EnforcedStyle: single_quotes (default)

                                                                # bad
                                                                "No special symbols"
                                                                "No string interpolation"
                                                                "Just text"
                                                                
                                                                # good
                                                                'No special symbols'
                                                                'No string interpolation'
                                                                'Just text'
                                                                "Wait! What's #{this}!"

                                                                Example: EnforcedStyle: double_quotes

                                                                # bad
                                                                'Just some text'
                                                                'No special chars or interpolation'
                                                                
                                                                # good
                                                                "Just some text"
                                                                "No special chars or interpolation"
                                                                "Every string in #{project} uses double_quotes"

                                                                Do not use unless with else. Rewrite these with the positive case first.
                                                                Open

                                                                                unless game.waiting?
                                                                                  unless game.night?
                                                                                    summon(game, :voting)
                                                                                  else
                                                                                    send(message, 'Masih malem, belom mulai voting', reply: true)

                                                                This cop looks for unless expressions with else clauses.

                                                                Example:

                                                                # bad
                                                                unless foo_bar.nil?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end
                                                                
                                                                # good
                                                                if foo_bar.present?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end

                                                                Prefer to_s over string interpolation.
                                                                Open

                                                                            res += "#{game.list_settings}"

                                                                This cop checks for strings that are just an interpolated expression.

                                                                Example:

                                                                # bad
                                                                "#{@var}"
                                                                
                                                                # good
                                                                @var.to_s
                                                                
                                                                # good if @var is already a String
                                                                @var

                                                                Favor modifier while usage when having a single-line body.
                                                                Open

                                                                      while chosen.user_id == seer.user_id

                                                                Checks for while and until statements that would fit on one line if written as a modifier while/until. The maximum line length is configured in the Metrics/LineLength cop.

                                                                Example:

                                                                # bad
                                                                while x < 10
                                                                  x += 1
                                                                end
                                                                
                                                                # good
                                                                x += 1 while x < 10

                                                                Example:

                                                                # bad
                                                                until x > 10
                                                                  x += 1
                                                                end
                                                                
                                                                # good
                                                                x += 1 until x > 10

                                                                Line is too long. [155/80]
                                                                Open

                                                                          end_message = " menghidupkan #{necromancee.full_name}, seorang #{game.get_role(necromancee.role)}. Ayo manfaatkan kesempatan ini sebaik mungkin!"

                                                                Line is too long. [107/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|

                                                                Line is too long. [112/80]
                                                                Open

                                                                      return unless round == game.round && game.night? && !game.waiting? && !game.discussion? && !game.finished?

                                                                Line is too long. [112/80]
                                                                Open

                                                                      return unless round == game.round && !game.night? && !game.waiting? && game.discussion? && !game.finished?

                                                                Line is too long. [142/80]
                                                                Open

                                                                      ret = @bot.api.get_chat_administrators(chat_id: message.chat.id)['result'].any?{ |cm| cm['user']['id'] == message.from.id } rescue false

                                                                Line is too long. [134/80]
                                                                Open

                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)

                                                                Convert if nested inside else to elsif.
                                                                Open

                                                                        if Time.now.to_i - message.date < ALLOWED_DELAY.call

                                                                If the else branch of a conditional consists solely of an if node, it can be combined with the else to become an elsif. This helps to keep the nesting level from getting too deep.

                                                                Example:

                                                                # bad
                                                                if condition_a
                                                                  action_a
                                                                else
                                                                  if condition_b
                                                                    action_b
                                                                  else
                                                                    action_c
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                if condition_a
                                                                  action_a
                                                                elsif condition_b
                                                                  action_b
                                                                else
                                                                  action_c
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/ikutan(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Do not introduce global variables.
                                                                Open

                                                                    VOTING_TIME = -> { (res = $redis.get('lycantulul::voting_time')) ? res.to_i : 160 }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use game.players.count.zero? instead of game.players.count == 0.
                                                                Open

                                                                                      if game.players.count == 0

                                                                This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

                                                                The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

                                                                The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

                                                                Example: EnforcedStyle: predicate (default)

                                                                # bad
                                                                
                                                                foo == 0
                                                                0 > foo
                                                                bar.baz > 0
                                                                
                                                                # good
                                                                
                                                                foo.zero?
                                                                foo.negative?
                                                                bar.baz.positive?

                                                                Example: EnforcedStyle: comparison

                                                                # bad
                                                                
                                                                foo.zero?
                                                                foo.negative?
                                                                bar.baz.positive?
                                                                
                                                                # good
                                                                
                                                                foo == 0
                                                                0 > foo
                                                                bar.baz > 0

                                                                Line is too long. [97/80]
                                                                Open

                                                                      send_to_player(necromancer_chat_id, 'Mau menghidupkan siapa?', reply_markup: vote_keyboard)

                                                                Line is too long. [108/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: false, discussion: false).each do |wwg|

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                    MAINTENANCE_PREVENT = -> { $redis.get('lycantulul::maintenance_prevent').to_i == 1 rescue nil }

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Line is too long. [107/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|

                                                                Line is too long. [147/80]
                                                                Open

                                                                        if wwg.valid_action?(message.from.id, message.text, 'necromancer') || wwg.valid_action?(message.from.id, message.text, 'super_necromancer')

                                                                Redundant curly braces around a hash parameter.
                                                                Open

                                                                      options.merge!({ reply_to_message_id: message.message_id }) if reply

                                                                This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

                                                                Example: EnforcedStyle: braces

                                                                # The `braces` style enforces braces around all method
                                                                # parameters that are hashes.
                                                                
                                                                # bad
                                                                some_method(x, y, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, {a: 1, b: 2})

                                                                Example: EnforcedStyle: no_braces (default)

                                                                # The `no_braces` style checks that the last parameter doesn't
                                                                # have braces around it.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)

                                                                Example: EnforcedStyle: context_dependent

                                                                # The `context_dependent` style checks that the last parameter
                                                                # doesn't have braces around it, but requires braces if the
                                                                # second to last parameter is also a hash literal.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)
                                                                some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

                                                                Missing top-level class documentation comment.
                                                                Open

                                                                  class InputProcessorJob

                                                                This cop checks for missing top-level documentation of classes and modules. Classes with no body are exempt from the check and so are namespace modules - modules that have nothing in their bodies except classes, other modules, or constant definitions.

                                                                The documentation requirement is annulled if the class or module has a "#:nodoc:" comment next to it. Likewise, "#:nodoc: all" does the same for all its children.

                                                                Example:

                                                                # bad
                                                                class Person
                                                                  # ...
                                                                end
                                                                
                                                                # good
                                                                # Description/Explanation of Person class
                                                                class Person
                                                                  # ...
                                                                end

                                                                Do not introduce global variables.
                                                                Open

                                                                    ALLOWED_DELAY = -> { (res = $redis.get('lycantulul::allowed_delay')) ? res.to_i : 20 }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/help(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Line is too long. [82/80]
                                                                Open

                                                                        if (failed_protection = game.protect_players) && !failed_protection.empty?

                                                                Redundant curly braces around a hash parameter.
                                                                Open

                                                                      options.merge!({ reply_markup: keyboard }) if keyboard

                                                                This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

                                                                Example: EnforcedStyle: braces

                                                                # The `braces` style enforces braces around all method
                                                                # parameters that are hashes.
                                                                
                                                                # bad
                                                                some_method(x, y, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, {a: 1, b: 2})

                                                                Example: EnforcedStyle: no_braces (default)

                                                                # The `no_braces` style checks that the last parameter doesn't
                                                                # have braces around it.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)

                                                                Example: EnforcedStyle: context_dependent

                                                                # The `context_dependent` style checks that the last parameter
                                                                # doesn't have braces around it, but requires braces if the
                                                                # second to last parameter is also a hash literal.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)
                                                                some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/batalin(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                    MAINTENANCE = -> { $redis.get('lycantulul::maintenance').to_i == 1 rescue nil }

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Do not use unless with else. Rewrite these with the positive case first.
                                                                Open

                                                                                  unless game.night?
                                                                                    summon(game, :voting)
                                                                                  else
                                                                                    send(message, 'Masih malem, belom mulai voting', reply: true)
                                                                                  end

                                                                This cop looks for unless expressions with else clauses.

                                                                Example:

                                                                # bad
                                                                unless foo_bar.nil?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end
                                                                
                                                                # good
                                                                if foo_bar.present?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                      res = string =~ /[`\/\\:*_\[\](){}<>]/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                @bot.api.kick_chat_member(chat_id: '@lycantulul', user_id: new_member.id) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                    game.pending_reply(pending['result']['message_id']) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Use (game.living_werewolves.count + game.living_super_werewolves.count).zero? instead of game.living_werewolves.count + game.living_super_werewolves.count == 0.
                                                                Open

                                                                      if game.living_werewolves.count + game.living_super_werewolves.count == 0

                                                                This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

                                                                The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

                                                                The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

                                                                Example: EnforcedStyle: predicate (default)

                                                                # bad
                                                                
                                                                foo == 0
                                                                0 > foo
                                                                bar.baz > 0
                                                                
                                                                # good
                                                                
                                                                foo.zero?
                                                                foo.negative?
                                                                bar.baz.positive?

                                                                Example: EnforcedStyle: comparison

                                                                # bad
                                                                
                                                                foo.zero?
                                                                foo.negative?
                                                                bar.baz.positive?
                                                                
                                                                # good
                                                                
                                                                foo == 0
                                                                0 > foo
                                                                bar.baz > 0

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/panggil_yang_idup(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Line is too long. [88/80]
                                                                Open

                                                                          retry if e.message !~ /error_code: .(400|403|409)./ && (retry_count += 1) < 20

                                                                Line is too long. [278/80]
                                                                Open

                                                                      send_to_player(chat_id, "Daftar serigala yang masih hidup: #{lw.map{ |w| w[:full_name] }.join(', ')}\n\np.s.: harus diskusi dulu. Jawaban semua serigala dikumpulin dan yang paling banyak dibunuh. Kalo ga ada suara yang mayoritas, ga ada yang terbunuh yaa") unless single_w

                                                                Line is too long. [109/80]
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [protector_full_name])

                                                                Do not introduce global variables.
                                                                Open

                                                                    MINIMUM_PLAYER = -> { (res = $redis.get('lycantulul::minimum_player')) ? res.to_i : 5 }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Do not introduce global variables.
                                                                Open

                                                                    DISCUSSION_TIME = -> { (res = $redis.get('lycantulul::discussion_time')) ? res.to_i : 120 }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Do not introduce global variables.
                                                                Open

                                                                                    $redis.rpush('lycantulul::maintenance_info', message.chat.id)

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use a guard clause instead of wrapping the code inside a conditional expression.
                                                                Open

                                                                      if force || game.round_finished?

                                                                Use a guard clause instead of wrapping the code inside a conditional expression

                                                                Example:

                                                                # bad
                                                                def test
                                                                  if something
                                                                    work
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                def test
                                                                  return unless something
                                                                  work
                                                                end
                                                                
                                                                # also good
                                                                def test
                                                                  work if something
                                                                end
                                                                
                                                                # bad
                                                                if something
                                                                  raise 'exception'
                                                                else
                                                                  ok
                                                                end
                                                                
                                                                # good
                                                                raise 'exception' if something
                                                                ok

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/ganti_settingan_waktu(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/stats/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Line is too long. [138/80]
                                                                Open

                                                                      Lycantulul::VotingTimerJob.perform_in(next_reminder, game, round, Lycantulul::VotingTimerJob.next_state(state), next_reminder, self)

                                                                Line is too long. [107/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|

                                                                Line is too long. [105/80]
                                                                Open

                                                                            res += "Tambah <b>#{game.next_new_role}</b> orang lagi ada peran peran penting tambahan.\n\n"

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/ganti_settingan_voting(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/ilangin_keyboard(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Line is too long. [134/80]
                                                                Open

                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                  game.pending_reply(pending['result']['message_id']) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Prefer single-quoted strings when you don't need string interpolation or special symbols.
                                                                Open

                                                                          send_to_player(protector_id, "Jangan jualan ke sembarang orang! Lu jualan ke serigala, mati aja.")

                                                                Checks if uses of quotes match the configured preference.

                                                                Example: EnforcedStyle: single_quotes (default)

                                                                # bad
                                                                "No special symbols"
                                                                "No string interpolation"
                                                                "Just text"
                                                                
                                                                # good
                                                                'No special symbols'
                                                                'No string interpolation'
                                                                'Just text'
                                                                "Wait! What's #{this}!"

                                                                Example: EnforcedStyle: double_quotes

                                                                # bad
                                                                'Just some text'
                                                                'No special chars or interpolation'
                                                                
                                                                # good
                                                                "Just some text"
                                                                "No special chars or interpolation"
                                                                "Every string in #{project} uses double_quotes"

                                                                Line is too long. [134/80]
                                                                Open

                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)

                                                                Line is too long. [113/80]
                                                                Open

                                                                      return unless round == game.round && !game.night? && !game.waiting? && !game.discussion? && !game.finished?

                                                                Line is too long. [191/80]
                                                                Open

                                                                        send_to_player(game.group_id, "Welcome to the game, #{welcomed.map(&:first_name).join(', ')}!\n\nUdah <b>#{game.players.count} orang</b> nich~ #{additional_text}", parse_mode: 'HTML')

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/bikin_baru(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Do not introduce global variables.
                                                                Open

                                                                    MAINTENANCE = -> { $redis.get('lycantulul::maintenance').to_i == 1 rescue nil }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/apus_settingan_peran(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Do not introduce global variables.
                                                                Open

                                                                          $redis.rpush('lycantulul::maintenance_info', message.chat.id)

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/kill/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/ganti_settingan_peran(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                      ret = @bot.api.get_chat_administrators(chat_id: message.chat.id)['result'].any?{ |cm| cm['user']['id'] == message.from.id } rescue false

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/panggil_semua(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/statistik(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid comma after the last item of a hash.
                                                                Open

                                                                        text: text[0...4000],

                                                                This cop checks for trailing comma in array and hash literals.

                                                                Example: EnforcedStyleForMultiline: consistent_comma

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1, 2,
                                                                  3,
                                                                ]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2,
                                                                ]

                                                                Example: EnforcedStyleForMultiline: comma

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2,
                                                                ]

                                                                Example: EnforcedStyleForMultiline: no_comma (default)

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2
                                                                ]

                                                                Favor modifier while usage when having a single-line body.
                                                                Open

                                                                      while count < max

                                                                Checks for while and until statements that would fit on one line if written as a modifier while/until. The maximum line length is configured in the Metrics/LineLength cop.

                                                                Example:

                                                                # bad
                                                                while x < 10
                                                                  x += 1
                                                                end
                                                                
                                                                # good
                                                                x += 1 while x < 10

                                                                Example:

                                                                # bad
                                                                until x > 10
                                                                  x += 1
                                                                end
                                                                
                                                                # good
                                                                x += 1 until x > 10

                                                                Line is too long. [206/80]
                                                                Open

                                                                      send(message, 'Belom terdaftar (atau lu nge-block gua) cuy. PM gua @lycantulul_bot terus /start (jangan lupa unblock dulu), baru balik sini dan lakukan lagi apa yang mau lu lakukan tadi', reply: true)

                                                                Line is too long. [107/80]
                                                                Open

                                                                      Lycantulul::Game.where(finished: false, waiting: false, night: true, discussion: false).each do |wwg|

                                                                Use a guard clause instead of wrapping the code inside a conditional expression.
                                                                Open

                                                                      if !welcomed.empty? && game.waiting?

                                                                Use a guard clause instead of wrapping the code inside a conditional expression

                                                                Example:

                                                                # bad
                                                                def test
                                                                  if something
                                                                    work
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                def test
                                                                  return unless something
                                                                  work
                                                                end
                                                                
                                                                # also good
                                                                def test
                                                                  work if something
                                                                end
                                                                
                                                                # bad
                                                                if something
                                                                  raise 'exception'
                                                                else
                                                                  ok
                                                                end
                                                                
                                                                # good
                                                                raise 'exception' if something
                                                                ok

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                            Lycantulul::RegisteredPlayer.find_by(user_id: message.chat.id).update_attribute(:blocked, true) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                          rand_role = game.killables.without_id([seer.user_id]).sample.role rescue chosen.role

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Do not use unless with else. Rewrite these with the positive case first.
                                                                Open

                                                                                  unless game.night?
                                                                                    if (Time.now - game.last_voting_list_query rescue 11).ceil > 10
                                                                                      list_voting(game)
                                                                                    end
                                                                                  else

                                                                This cop looks for unless expressions with else clauses.

                                                                Example:

                                                                # bad
                                                                unless foo_bar.nil?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end
                                                                
                                                                # good
                                                                if foo_bar.present?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end

                                                                Line is too long. [97/80]
                                                                Open

                                                                      send_to_player(homeless_chat_id, 'Mau nebeng di rumah siapa?', reply_markup: vote_keyboard)

                                                                Line is too long. [99/80]
                                                                Open

                                                                      send_to_player(player_chat_id, 'Ayo voting eksekusi siapa nih~', reply_markup: vote_keyboard)

                                                                Line is too long. [109/80]
                                                                Open

                                                                      return unless next_reminder && round == game.round && !game.night? && !game.waiting? && !game.finished?

                                                                Line is too long. [141/80]
                                                                Open

                                                                        if wwg.valid_action?(message.from.id, message.text, 'werewolf') || wwg.valid_action?(message.from.id, message.text, 'super_werewolf')

                                                                Line is too long. [101/80]
                                                                Open

                                                                      elsif game.living_werewolves.count + game.living_super_werewolves.count >= game.killables.count

                                                                Line is too long. [134/80]
                                                                Open

                                                                      vote_keyboard = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: options, resize_keyboard: true, one_time_keyboard: true)

                                                                Line is too long. [104/80]
                                                                Open

                                                                      options = convert_to_square_keyboard(living_players.map{ |lv| lv[:full_name] } - [seer_full_name])

                                                                Do not introduce global variables.
                                                                Open

                                                                    MAINTENANCE_PREVENT = -> { $redis.get('lycantulul::maintenance_prevent').to_i == 1 rescue nil }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Redundant curly braces around a hash parameter.
                                                                Open

                                                                      options.merge!({ parse_mode: 'HTML' }) if html

                                                                This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

                                                                Example: EnforcedStyle: braces

                                                                # The `braces` style enforces braces around all method
                                                                # parameters that are hashes.
                                                                
                                                                # bad
                                                                some_method(x, y, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, {a: 1, b: 2})

                                                                Example: EnforcedStyle: no_braces (default)

                                                                # The `no_braces` style checks that the last parameter doesn't
                                                                # have braces around it.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)

                                                                Example: EnforcedStyle: context_dependent

                                                                # The `context_dependent` style checks that the last parameter
                                                                # doesn't have braces around it, but requires braces if the
                                                                # second to last parameter is also a hash literal.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)
                                                                some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

                                                                Redundant curly braces around a hash parameter.
                                                                Open

                                                                      options.merge!({
                                                                        chat_id: chat_id,
                                                                        text: text[0...4000],
                                                                      })

                                                                This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

                                                                Example: EnforcedStyle: braces

                                                                # The `braces` style enforces braces around all method
                                                                # parameters that are hashes.
                                                                
                                                                # bad
                                                                some_method(x, y, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, {a: 1, b: 2})

                                                                Example: EnforcedStyle: no_braces (default)

                                                                # The `no_braces` style checks that the last parameter doesn't
                                                                # have braces around it.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)

                                                                Example: EnforcedStyle: context_dependent

                                                                # The `context_dependent` style checks that the last parameter
                                                                # doesn't have braces around it, but requires braces if the
                                                                # second to last parameter is also a hash literal.
                                                                
                                                                # bad
                                                                some_method(x, y, {a: 1, b: 2})
                                                                some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
                                                                
                                                                # good
                                                                some_method(x, y, a: 1, b: 2)
                                                                some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

                                                                Do not introduce global variables.
                                                                Open

                                                                    NIGHT_TIME = -> { (res = $redis.get('lycantulul::night_time')) ? res.to_i : 90 }

                                                                This cops looks for uses of global variables. It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.

                                                                Note that backreferences like $1, $2, etc are not global variables.

                                                                Example:

                                                                # bad
                                                                $foo = 2
                                                                bar = $foo + 5
                                                                
                                                                # good
                                                                FOO = 2
                                                                foo = 2
                                                                $stdin.read

                                                                Use a guard clause instead of wrapping the code inside a conditional expression.
                                                                Open

                                                                      if force || game.check_voting_finished

                                                                Use a guard clause instead of wrapping the code inside a conditional expression

                                                                Example:

                                                                # bad
                                                                def test
                                                                  if something
                                                                    work
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                def test
                                                                  return unless something
                                                                  work
                                                                end
                                                                
                                                                # also good
                                                                def test
                                                                  work if something
                                                                end
                                                                
                                                                # bad
                                                                if something
                                                                  raise 'exception'
                                                                else
                                                                  ok
                                                                end
                                                                
                                                                # good
                                                                raise 'exception' if something
                                                                ok

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/start(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Convert if nested inside else to elsif.
                                                                Open

                                                                              if (game = check_game(message)) && (game.pending_custom_id == message.reply_to_message.message_id rescue false)

                                                                If the else branch of a conditional consists solely of an if node, it can be combined with the else to become an elsif. This helps to keep the nesting level from getting too deep.

                                                                Example:

                                                                # bad
                                                                if condition_a
                                                                  action_a
                                                                else
                                                                  if condition_b
                                                                    action_b
                                                                  else
                                                                    action_c
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                if condition_a
                                                                  action_a
                                                                elsif condition_b
                                                                  action_b
                                                                else
                                                                  action_c
                                                                end

                                                                Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
                                                                Open

                                                                        if wwg.valid_action?(message.from.id, message.text, 'seer')

                                                                Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

                                                                Example:

                                                                # bad
                                                                if condition
                                                                  do_stuff(bar)
                                                                end
                                                                
                                                                unless qux.empty?
                                                                  Foo.do_something
                                                                end
                                                                
                                                                # good
                                                                do_stuff(bar) if condition
                                                                Foo.do_something unless qux.empty?

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/mulai_main(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Convert if nested inside else to elsif.
                                                                Open

                                                                        if check_player(message)

                                                                If the else branch of a conditional consists solely of an if node, it can be combined with the else to become an elsif. This helps to keep the nesting level from getting too deep.

                                                                Example:

                                                                # bad
                                                                if condition_a
                                                                  action_a
                                                                else
                                                                  if condition_b
                                                                    action_b
                                                                  else
                                                                    action_c
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                if condition_a
                                                                  action_a
                                                                elsif condition_b
                                                                  action_b
                                                                else
                                                                  action_c
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/siapa_aja(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                              elsif (group = Lycantulul::Group.get(message)) && (group.pending_time_id == message.reply_to_message.message_id rescue false)

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/gajadi(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/panggil_yang_belom_voting(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                      if (Time.now - game.last_summon_query rescue 11).ceil > 10

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/hasil_voting(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                              game.players.with_id(left_member.id).destroy rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Prefer single-quoted strings when you don't need string interpolation or special symbols.
                                                                Open

                                                                          send_to_player(necromancee.user_id, "Kamu telah dihidupkan kembali oleh seorang mujahid! Selamat datang kembali!")

                                                                Checks if uses of quotes match the configured preference.

                                                                Example: EnforcedStyle: single_quotes (default)

                                                                # bad
                                                                "No special symbols"
                                                                "No string interpolation"
                                                                "Just text"
                                                                
                                                                # good
                                                                'No special symbols'
                                                                'No string interpolation'
                                                                'Just text'
                                                                "Wait! What's #{this}!"

                                                                Example: EnforcedStyle: double_quotes

                                                                # bad
                                                                'Just some text'
                                                                'No special chars or interpolation'
                                                                
                                                                # good
                                                                "Just some text"
                                                                "No special chars or interpolation"
                                                                "Every string in #{project} uses double_quotes"

                                                                Use %r around regular expression.
                                                                Open

                                                                          when /^\/batal_nyetting_waktu(@lycantulul_bot)?/

                                                                This cop enforces using // or %r around regular expressions.

                                                                Example: EnforcedStyle: slashes (default)

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x

                                                                Example: EnforcedStyle: percent_r

                                                                # bad
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: EnforcedStyle: mixed

                                                                # bad
                                                                snake_case = %r{^[\dA-Z_]+$}
                                                                
                                                                # bad
                                                                regex = /
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                /x
                                                                
                                                                # good
                                                                snake_case = /^[\dA-Z_]+$/
                                                                
                                                                # good
                                                                regex = %r{
                                                                  foo
                                                                  (bar)
                                                                  (baz)
                                                                }x

                                                                Example: AllowInnerSlashes: false (default)

                                                                # If `false`, the cop will always recommend using `%r` if one or more
                                                                # slashes are found in the regexp string.
                                                                
                                                                # bad
                                                                x =~ /home\//
                                                                
                                                                # good
                                                                x =~ %r{home/}

                                                                Example: AllowInnerSlashes: true

                                                                # good
                                                                x =~ /home\//

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                  group.pending_reply(pending['result']['message_id']) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Do not use unless with else. Rewrite these with the positive case first.
                                                                Open

                                                                                unless game.waiting?
                                                                                  unless game.night?
                                                                                    if (Time.now - game.last_voting_list_query rescue 11).ceil > 10
                                                                                      list_voting(game)
                                                                                    end

                                                                This cop looks for unless expressions with else clauses.

                                                                Example:

                                                                # bad
                                                                unless foo_bar.nil?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end
                                                                
                                                                # good
                                                                if foo_bar.present?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end

                                                                Do not use unless with else. Rewrite these with the positive case first.
                                                                Open

                                                                                    unless game.duplicate_name?(user)
                                                                                      if game.add_player(user)
                                                                                        Lycantulul::WelcomeMessageJob.perform_in(3, game, self)
                                                                                      else
                                                                                        send(message, 'Duh udah masuk lu', reply: true)

                                                                This cop looks for unless expressions with else clauses.

                                                                Example:

                                                                # bad
                                                                unless foo_bar.nil?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end
                                                                
                                                                # good
                                                                if foo_bar.present?
                                                                  # do something...
                                                                else
                                                                  # do a different thing...
                                                                end

                                                                Line is too long. [182/80]
                                                                Open

                                                                            res = "Udah bisa mulai btw, kalo mau /mulai_main yak. Atau enaknya nunggu makin rame lagi sih. Yok yang lain pada /ikutan\n\nPembagian peran:\n#{game.role_composition}\n"

                                                                Line is too long. [83/80]
                                                                Open

                                                                            "#{MINIMUM_PLAYER.call - game.players.count} orang lagi buruan /ikutan"

                                                                Line is too long. [137/80]
                                                                Open

                                                                        ending += 'Dan permainan pun berakhir karena seluruh serigala telah meninggal dunia. Mari doakan agar mereka tenang di sisi-Nya.'

                                                                Line is too long. [128/80]
                                                                Open

                                                                        ending += 'Dan permainan pun berakhir karena serigala telah memenangkan permainan. Semoga mereka terkutuk seumur hidup.'

                                                                Use a guard clause instead of wrapping the code inside a conditional expression.
                                                                Open

                                                                      if (Time.now - game.last_summon_query rescue 11).ceil > 10

                                                                Use a guard clause instead of wrapping the code inside a conditional expression

                                                                Example:

                                                                # bad
                                                                def test
                                                                  if something
                                                                    work
                                                                  end
                                                                end
                                                                
                                                                # good
                                                                def test
                                                                  return unless something
                                                                  work
                                                                end
                                                                
                                                                # also good
                                                                def test
                                                                  work if something
                                                                end
                                                                
                                                                # bad
                                                                if something
                                                                  raise 'exception'
                                                                else
                                                                  ok
                                                                end
                                                                
                                                                # good
                                                                raise 'exception' if something
                                                                ok

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                  group.pending_reply(pending['result']['message_id']) rescue nil

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Line is too long. [94/80]
                                                                Open

                                                                          rand_role = game.killables.without_id([seer.user_id]).sample.role rescue chosen.role

                                                                Line is too long. [126/80]
                                                                Open

                                                                      send_to_player(game.group_id, "Waktu voting tinggal #{time} detik.\n/panggil_yang_belom_voting atau liat /hasil_voting")

                                                                Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
                                                                Open

                                                                        if wwg.valid_action?(message.from.id, message.text, 'player')

                                                                Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

                                                                Example:

                                                                # bad
                                                                if condition
                                                                  do_stuff(bar)
                                                                end
                                                                
                                                                unless qux.empty?
                                                                  Foo.do_something
                                                                end
                                                                
                                                                # good
                                                                do_stuff(bar) if condition
                                                                Foo.do_something unless qux.empty?

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                if (Time.now - game.last_player_list_query rescue 11).ceil > 10

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                                    if (Time.now - game.last_voting_list_query rescue 11).ceil > 10

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Avoid using rescue in its modifier form.
                                                                Open

                                                                              if (game = check_game(message)) && (game.pending_custom_id == message.reply_to_message.message_id rescue false)

                                                                This cop checks for uses of rescue in its modifier form.

                                                                Example:

                                                                # bad
                                                                some_method rescue handle_error
                                                                
                                                                # good
                                                                begin
                                                                  some_method
                                                                rescue
                                                                  handle_error
                                                                end

                                                                Avoid comma after the last item of a hash.
                                                                Open

                                                                        text: text[0...4000],

                                                                This cop checks for trailing comma in array and hash literals.

                                                                Example: EnforcedStyleForMultiline: consistent_comma

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1, 2,
                                                                  3,
                                                                ]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2,
                                                                ]

                                                                Example: EnforcedStyleForMultiline: comma

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2,
                                                                ]

                                                                Example: EnforcedStyleForMultiline: no_comma (default)

                                                                # bad
                                                                a = [1, 2,]
                                                                
                                                                # good
                                                                a = [
                                                                  1,
                                                                  2
                                                                ]

                                                                Use %w or %W for an array of words.
                                                                Open

                                                                      ['group', 'supergroup'].include?(message.chat.type)

                                                                This cop can check for array literals made up of word-like strings, that are not using the %w() syntax.

                                                                Alternatively, it can check for uses of the %w() syntax, in projects which do not want to include that syntax.

                                                                Configuration option: MinSize If set, arrays with fewer elements than this value will not trigger the cop. For example, a MinSize of 3 will not enforce a style on an array of 2 or fewer elements.

                                                                Example: EnforcedStyle: percent (default)

                                                                # good
                                                                %w[foo bar baz]
                                                                
                                                                # bad
                                                                ['foo', 'bar', 'baz']

                                                                Example: EnforcedStyle: brackets

                                                                # good
                                                                ['foo', 'bar', 'baz']
                                                                
                                                                # bad
                                                                %w[foo bar baz]

                                                                Use %w or %W for an array of words.
                                                                Open

                                                                    [
                                                                      'broadcast_role',
                                                                      'round_start',
                                                                      'werewolf_kill_broadcast',
                                                                      'werewolf_kill_succeeded',

                                                                This cop can check for array literals made up of word-like strings, that are not using the %w() syntax.

                                                                Alternatively, it can check for uses of the %w() syntax, in projects which do not want to include that syntax.

                                                                Configuration option: MinSize If set, arrays with fewer elements than this value will not trigger the cop. For example, a MinSize of 3 will not enforce a style on an array of 2 or fewer elements.

                                                                Example: EnforcedStyle: percent (default)

                                                                # good
                                                                %w[foo bar baz]
                                                                
                                                                # bad
                                                                ['foo', 'bar', 'baz']

                                                                Example: EnforcedStyle: brackets

                                                                # good
                                                                ['foo', 'bar', 'baz']
                                                                
                                                                # bad
                                                                %w[foo bar baz]

                                                                There are no issues that match your filters.

                                                                Category
                                                                Status