Есть ли какой-нибудь простой способ отложить любимый твит с помощью драгоценного камня «twitter»?

#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. Отлично! Это очень полезно! Спасибо!