立达机器人未响应触发器

时间:2020-05-14 20:00:46

标签: ruby lita

我/我使用Lita创建了一个聊天机器人,我创建了一个名为dialog的句柄,并选择了将代码分开,在lita-dialog/lib/lita/handlers/dialog.rb中有我的聊天路线,在{{1中有我的回复}}。

lita-dialog/bin/main.rb

中的代码
lita-dialog/lib/lita/handlers/dialog

module Lita module Handlers class Dialog < Handler # insert handler code here route(/.*hello|hi|good morning|morning|welcome.*/i, :greeting_response, command: true) Lita.register_handler(self) end end end

中的代码
lita-dialog/bin/main.rb

我正在使用RSpec来测试我的代码,并且测试通过了,但是当我测试bot以获得响应时,我没有收到预期的响应,

require_relative '../lib/dialog.rb'

 def greeting_response(response)
    greetingresponse = [
      'Hello',
      "Greetings, #{response.user.name}.",
      "Well hello there, #{response.user.name}.",
      "Hey #{response.user.name}, Hello!",
      "Good day, #{response.user.name}",
      'Hi.'
    ]

    response.reply(greetingresponse.sample)
 end

测试

Type "exit" or "quit" to end the session.                                                                                                          │<rive/Microverse/Ruby/jaybot   lita-dialog/spec/lita/handlers/dialog_spec.rb                         ruby     utf-8     16% ☰    1/6  :  1
jaybot > jaybot hello                                                                                                                              │6 lines yanked
jaybot >                  

这是我在处理程序文件夹中运行bot时得到的输出

require "spec_helper"

describe Lita::Handlers::Dialog, lita_handler: true do
  it { is_expected.to(route_command('hello').to(:greeting_response)) }
  it { is_expected.to_not(route('hello').to(:greeting_response)) }
end

1 个答案:

答案 0 :(得分:0)

此答案的信用归Jimmy Cuadra

您显示的Lita处理程序定义了一条路由,该路由将在传入消息匹配时调用名为greeting_response的实例方法。没有定义该名称的实例方法,因此出现“未定义方法”异常。您有一个在另一个文件中定义了该名称的方法,但是在顶级范围内定义的方法与类中的实例方法不同。如果要将该方法包含在Lita处理程序类中,则应在处理程序中包含的模块中对其进行定义。