#ruby #twitter #delay
#рубин #Twitter #задержка #ruby
Вопрос:
Я хотел бы отложить действие бота с любимым твитом, используя драгоценный камень Twitter:
if tweet.is_a?(Twitter::Tweet)
puts tweet.text
rClient.fav tweet
end
Вероятно, это был бы действительно простой взлом.
Спасибо!
Ответ №1:
Для СУХИХ целей я переношу некоторую логику в отдельный метод:
def fav_tweet(tweet)
puts tweet.text
rClient.fav tweet
end
Один из вариантов — создать отдельный поток, а затем вызвать sleep
там. Это не остановит выполнение в вашем основном потоке, поэтому ваш бот может продолжать отслеживать ввод.
Итак, я определю другой метод:
def in_delayed_thread(num_seconds)
Thread.new { sleep num_seconds; yield }
end
Затем измените существующий код на этот:
TweetDelayInSeconds = 30 # seems like this could be a constant
if tweet.is_a?(Twitter::Tweet)
in_delayed_thread(TweetDelayInSeconds) { fav_tweet(tweet) }
end
Существуют другие подходы к планированию задачи. Но я думаю, что это, вероятно, самое близкое к «простому взлому», о котором вы просите. Например, вы можете запланировать одноразовую задачу с помощью Bash — см. https://askubuntu.com/questions/339298/conveniently-schedule-a-command-to-run-later но это, вероятно, потребует некоторого рефакторинга вашего кода, чтобы разрешить вызов таким образом.
Комментарии:
1. Отлично! Это очень полезно! Спасибо!