Ruby Telegram bot - 如何从用户消息中获取文本并将其放入变量?
问题描述:
我需要从用户的消息中获取一个整数,并将其置于变量日。 我该怎么做?Ruby Telegram bot - 如何从用户消息中获取文本并将其放入变量?
这里的一些代码:
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
,喜欢它下降了discipline2,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}"))
但它不起作用
答
这应该工作:
num = message.text.to_i
你并不需要整个case
声明如果用户在发送给您的唯一有效的就是一个数字。
如果您确实使用了case语句,则应该使用else
关键字使用默认情况,而不是您在消息与自身匹配时尝试执行的奇怪事情。
答
我做得很好:而不是做#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 - день).")
+0
您应该使用to_i或其他输入验证,以便人们不能将任意东西注入到您要提取的URL中;这可能是一个安全问题,因为他们可以添加自己的属性。 –
你能补充你的问题吗?你使用哪个库?你使用webhooks还是轮询? –
我正在使用telegram-bot-ruby-0.8.4 lib,我不使用webhooks和polling – rafulin
到目前为止你有什么?你如何检索信息?信息如何显示?您是否阅读过文档?你能展示一些代码吗? – Stefan