1
1
import difflib
2
2
import logging
3
+ from collections import OrderedDict
3
4
4
5
from .actions import Favorite , Follow
5
6
from .client import TwitterClient , TwitterClientRetweetedException
@@ -19,9 +20,10 @@ def __init__(self, ignore_list_file):
19
20
20
21
self .ignore_list = IgnoreList (ignore_list_file )
21
22
self .post_queue = PostQueue ()
22
- self .client = TwitterClient (Config .consumer_key , Config .consumer_secret ,
23
- Config .access_token_key ,
24
- Config .access_token_secret )
23
+ self .client = TwitterClient (Config .get_config ()['consumer_key' ],
24
+ Config .get_config ()['consumer_secret' ],
25
+ Config .get_config ()['access_token_key' ],
26
+ Config .get_config ()['access_token_secret' ])
25
27
self .scheduler = PeriodicScheduler ()
26
28
self .notification = NotificationService ()
27
29
self .actions = [Follow (self .client ), Favorite (self .client )]
@@ -60,7 +62,7 @@ def enter_contest(self):
60
62
def clear_queue (self ):
61
63
"""Removes the extraneous posts from the post_queue"""
62
64
63
- to_delete = len (self .post_queue ) - Config .max_queue
65
+ to_delete = len (self .post_queue ) - Config .get_config (). search . max_queue
64
66
65
67
if to_delete > 0 :
66
68
for i in range (to_delete ):
@@ -82,9 +84,16 @@ def scan_new_contests(self):
82
84
83
85
logger .info ("=== SCANNING FOR NEW CONTESTS ===" )
84
86
85
- for search_query in Config .search_queries :
87
+ for search_query in Config .get_config ().search .queries :
88
+
89
+ if isinstance (search_query , str ):
90
+ results = self .client .search_tweets (search_query , 50 )
91
+ elif isinstance (search_query , OrderedDict ):
92
+ search_query , settings = search_query .popitem ()
93
+ results = self .client .search_tweets (search_query , 50 , language = settings ['lang' ])
94
+ else :
95
+ raise ValueError ("Uknown type of query {}" .format (str (search_query )))
86
96
87
- results = self .client .search_tweets (search_query , 50 , language = Config .search_language )
88
97
logger .info ("Got {} new results for: {}" .format (len (results ), search_query ))
89
98
90
99
for post in results :
@@ -124,12 +133,13 @@ def check_new_mentions(self):
124
133
def run (self ):
125
134
"""Run the bot as a daemon. This is blocking command"""
126
135
127
- self .scheduler .enter (Config .clear_queue_interval , 1 , self .clear_queue )
128
- self .scheduler .enter (Config .rate_limit_update_interval , 2 , self .client .update_ratelimits )
129
- self .scheduler .enter (Config .blocked_users_update_interval , 3 , self .update_blocked_users )
130
- self .scheduler .enter (Config .check_mentions_interval , 4 , self .check_new_mentions )
131
- self .scheduler .enter (Config .scan_interval , 5 , self .scan_new_contests )
132
- self .scheduler .enter_random (Config .retweet_interval , Config .retweet_random_margin , 6 , self .enter_contest )
136
+ self .scheduler .enter (Config .get_config ().scheduler .clear_queue_interval , 1 , self .clear_queue )
137
+ self .scheduler .enter (Config .get_config ().scheduler .rate_limit_update_interval , 2 , self .client .update_ratelimits )
138
+ self .scheduler .enter (Config .get_config ().scheduler .blocked_users_update_interval , 3 , self .update_blocked_users )
139
+ self .scheduler .enter (Config .get_config ().scheduler .check_mentions_interval , 4 , self .check_new_mentions )
140
+ self .scheduler .enter (Config .get_config ().scheduler .search_interval , 5 , self .scan_new_contests )
141
+ self .scheduler .enter_random (Config .get_config ().scheduler .retweet_interval ,
142
+ Config .get_config ().scheduler .retweet_random_margin , 6 , self .enter_contest )
133
143
134
144
# Init the program
135
145
self .scheduler .run ()
@@ -153,15 +163,15 @@ def _get_quoted_tweet(self, post):
153
163
:param post: The post to check if its a quote
154
164
:return: If it isnt a quote the argument, otherwise the original tweet
155
165
"""
156
- for i in range (Config .max_quote_depth ):
166
+ for i in range (Config .get_config (). search . max_quote_depth ):
157
167
# If it hasnt quote return the post
158
168
if 'quoted_status' not in post :
159
169
return post
160
170
161
171
quote = post ['quoted_status' ]
162
172
diff = difflib .SequenceMatcher (None , post ['full_text' ], quote ['full_text' ]).ratio ()
163
173
# If the texts are similar continue
164
- if diff >= Config .min_quote_similarity :
174
+ if diff >= Config .get_config (). search . min_quote_similarity :
165
175
logger .debug ('{} is a quote, following to next post. Depth from original post {}' .format (post ['id' ], i ))
166
176
quote = self .client .get_tweet (quote ['id' ])
167
177
# If its a quote of quote, get next quote and continue
0 commit comments