2017-12-27 334 views
1

我有这应该创建一个新的数据库,当用户输入/newdb nameofdatabase将参数传递给电报机器人并使用正则表达式解析?

Telegram::Bot::Client.run(token) do |bot| 
    bot.listen do |message| 
    case message.text 
    when '/newdb.*/' 
     bot.api.send_message(chat_id: message.chat.id, text: "created!, #{message.from.first_name}") 
    end 
    end 
end 

我使用正则表达式的字符串,试图捕捉用户的消息,事后分析它的电报机器人。 不幸的是,机器人不会给定的命令做出响应(在这种情况下,不打印"created!"行。”

我该如何去使用Ruby包装器,捕捉用户输入到电报机器人?

回答

2

这是因为/是在正则表达式元字符,这里是一个正确的正则表达式:

Telegram::Bot::Client.run(token) do |bot| 
    bot.listen do |message| 
    case message.text 
    when /^\/newdb\s(.*)/ 
     database = $~[1] # get the database name. $~[N] regexp matches. 
     bot.api.send_message(chat_id: message.chat.id, text: "created!, #{message.from.first_name}") 
    end 
    end 
end 

%r|\A/newdb\b.*|:使用\A除非你明确地追在消息的中间回车后以及使用时%r符号FO当它包含斜杠时,r会返回正则表达式。 THX @mudasobwa

检查正则表达式表达here

+1

'%R | \ A/NEWDB \ B * |':使用'\ A'除非你回车后明确地追在消息和使用中间'当它包含斜线时,正则表达式使用%r'表示法。另外,括号是多余的,AFAICT。 – mudasobwa