]>
git.ipfire.org Git - ipfire.org.git/blob - src/backend/tweets.py
7 from .misc
import Object
10 async def tweet(self
):
12 Sends a random promotional tweet
14 # Do not tweet too often
15 if self
.has_had_recent_activity(days
=3):
16 logging
.debug("Won't tweet because we recently did it")
19 # Do not tweet when there was a blog post
20 if self
.backend
.blog
.has_had_recent_activity(hours
=24):
21 logging
.debug("Won't tweet because the blog has had activity")
25 tweet
= self
._get
_random
_tweet
()
27 logging
.warning("Could not find anything to tweet")
31 with self
.db
.transaction():
34 def has_had_recent_activity(self
, **kwargs
):
35 t
= datetime
.timedelta(**kwargs
)
37 res
= self
.db
.get("SELECT COUNT(*) AS count FROM tweets \
38 WHERE last_tweeted_at IS NOT NULL AND last_tweeted_at >= NOW() - %s", t
)
40 if res
and res
.count
> 0:
45 def _get_random_tweet(self
):
47 "WITH candidate_tweets AS (SELECT id, \
48 (CURRENT_TIMESTAMP - COALESCE(last_tweeted_at, '1970-01-01')) * RANDOM() AS age \
50 WHERE (last_tweeted_at IS NULL OR last_tweeted_at <= CURRENT_TIMESTAMP - INTERVAL '1 month') \
52 SELECT tweets.* FROM candidate_tweets \
53 LEFT JOIN tweets ON candidate_tweets.id = tweets.id \
54 ORDER BY age DESC LIMIT 1")
58 def _tweet(self
, tweet
):
59 logging
.debug("Tweeting: %s" % tweet
.message
)
61 # Update database status
62 self
.db
.execute("UPDATE tweets \
63 SET last_tweeted_at = CURRENT_TIMESTAMP, total_tweets = total_tweets + 1 \
64 WHERE id = %s", tweet
.id)
67 twitter
= twython
.Twython(
68 self
.settings
.get("twitter_consumer_key"),
69 self
.settings
.get("twitter_consumer_secret"),
70 self
.settings
.get("twitter_%s_access_token" % tweet
.account
),
71 self
.settings
.get("twitter_%s_access_token_secret" % tweet
.account
),
75 twitter
.update_status(status
=tweet
.message
)