Ruby Telegram bot - 如何从用户消息中获取文本并将其放入变量中?

时间:2017-10-15 13:37:54

标签: ruby bots telegram

我需要从用户的消息中获取一个整数并将其放入变量日。 我怎么能这样做?

这里有一些代码:

Telegram::Bot::Client.run(token) do |bot|
bot.listen do |message|
case message.text
when '/start'
  bot.api.sendMessage(chat_id: message.chat.id, text: "Привет, #{message.from.first_name}. Чтобы узнать сегодняшнее расписание, напишите /today")

when '/today'

  bot.api.sendMessage(chat_id: message.chat.id, text: "#{date}")
if discipline1_name.size == 0 && discipline2_name.size == 0 && discipline3_name.size == 0 && discipline4_name.size == 0 && discipline5_name.size == 0 && discipline6_name.size == 0 then
    (bot.api.sendMessage(chat_id: message.chat.id, text: "Сегодня воскресенье, можете отдыхать :)")
    bot.api.sendMessage(chat_id: message.chat.id, text: "Чтобы узнать расписание на другой день, введите дату в формате /13 (13 - день)."))
else
  unless discipline1_name.size == 0
    bot.api.sendMessage(chat_id: message.chat.id, text: "1. #{discipline1_name} в кабинете #{discipline1_cab}")
  else
    bot.api.sendMessage(chat_id: message.chat.id, text: "1. ===========")
  end

并且像纪律那样,3,...,6

我需要的是这样的事情:

when '#{message}'
day = message.to_i
page = Nokogiri::HTML(open("http://rating.ivpek.ru/timetable/timetable/show?gid=222&date=2017-10-#{day}"))

但它不起作用

2 个答案:

答案 0 :(得分:0)

我做得很好:我没有做#to_i方法,而是制作了#to_s而且工作正常! 这是代码:

    when "#{message}"
  day = message.to_s
  page = page = Nokogiri::HTML(open("http://rating.ivpek.ru/timetable/timetable/show?gid=222&date=2017-10-#{day}"))

  date = page.css('span')[1].text

  discipline1_name = page.css('tr[2] .redips-drag').text
  ...
  discipline6_name = page.css('tr[7] .redips-drag').text

  discipline1_cab = page.css('tr[2] td#cabinet').text
  ...
  discipline6_cab = page.css('tr[7] td#cabinet').text

  bot.api.sendMessage(chat_id: message.chat.id, text: "#{date}")
if discipline1_name.size == 0 && discipline2_name.size == 0 && discipline3_name.size == 0 && discipline4_name.size == 0 && discipline5_name.size == 0 && discipline6_name.size == 0 then
    (bot.api.sendMessage(chat_id: message.chat.id, text: "Сегодня воскресенье, можете отдыхать :)")
    bot.api.sendMessage(chat_id: message.chat.id, text: "Чтобы узнать расписание на другой день, введите дату в формате /13 (13 - день)."))
else
  unless discipline1_name.size == 0
    bot.api.sendMessage(chat_id: message.chat.id, text: "1. #{discipline1_name} в кабинете #{discipline1_cab}")
  else
    bot.api.sendMessage(chat_id: message.chat.id, text: "1. ===========")
  end
...

  unless discipline6_name.size == 0
    bot.api.sendMessage(chat_id: message.chat.id, text: "6. #{discipline6_name} в кабинете #{discipline6_cab}")
  else
    bot.api.sendMessage(chat_id: message.chat.id, text: "6. ===========")
  end
  bot.api.sendMessage(chat_id: message.chat.id, text: "Чтобы узнать расписание на другой день, введите дату в формате /13 (13 - день).")

答案 1 :(得分:0)

这应该有效:

num = message.text.to_i

如果用户发送给您的唯一有效内容是数字,则不需要整个case语句。

如果您确实使用了case语句,那么您应该使用else关键字来使用默认情况,而不是在消息与自身匹配时尝试做的奇怪事情。

相关问题