Upload WarOnline_Chat.py
Browse filesUpdated with option to answer direct messages, starting with
@WarBot
- WarOnline_Chat.py +32 -10
WarOnline_Chat.py
CHANGED
@@ -189,12 +189,19 @@ def getMessages(thread_url=config.thread_url, quotedUser="", startingPage=1):
|
|
189 |
if blockquote:
|
190 |
# Extract the text
|
191 |
text = data.find('div', {'class': 'bbWrapper'})
|
|
|
192 |
for bq in text.find_all('blockquote'):
|
193 |
bq.extract()
|
194 |
reply = text.get_text().replace('\n', ' ').strip()
|
195 |
|
196 |
allquotes.append({'reply': reply, 'messengerName': messengerName, 'messageID': messageID, 'quotedID': quotedID})
|
197 |
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
except:
|
199 |
continue # There was no text in this quote, move to the next
|
200 |
|
@@ -225,7 +232,13 @@ def WarOnlineBot():
|
|
225 |
# IDs of the quoted messages, replied by the bot:
|
226 |
messages_by_bot_IDs = []
|
227 |
|
|
|
|
|
|
|
228 |
for msg in allMessages:
|
|
|
|
|
|
|
229 |
# Set a list of replied messages IDs
|
230 |
if msg['messengerName'] == config.username: #message posted by the WarBot
|
231 |
messages_by_bot_IDs.append(msg['quotedID'].split(': ')[-1])
|
@@ -235,6 +248,10 @@ def WarOnlineBot():
|
|
235 |
# All messages (with quotes) sent _FOR_ the Bot:
|
236 |
messagesForBot = getMessages(thread_url=config.thread_url, quotedUser=config.username, startingPage=startingPage)
|
237 |
|
|
|
|
|
|
|
|
|
238 |
# IDs of the messages, quoting the bot:
|
239 |
messages_for_bot_IDs = []
|
240 |
|
@@ -247,6 +264,7 @@ def WarOnlineBot():
|
|
247 |
# Filter to leave just the unanswered messages IDs:
|
248 |
messages_for_bot_IDs = [ID for ID in messages_for_bot_IDs if ID not in messages_by_bot_IDs]
|
249 |
|
|
|
250 |
# Reply the unanswered messages:
|
251 |
for msg in messagesForBot:
|
252 |
if msg['messageID'].split('-')[-1] in messages_for_bot_IDs:
|
@@ -265,16 +283,19 @@ def WarOnlineBot():
|
|
265 |
|
266 |
# Init Connection
|
267 |
db = conversationDB.DataBase()
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
|
|
|
|
|
|
278 |
|
279 |
# Fix the quote string, to eliminate errors:
|
280 |
quote = fixString(quote)
|
@@ -314,6 +335,7 @@ if __name__ == '__main__':
|
|
314 |
while True:
|
315 |
print('Starting Session')
|
316 |
WarOnlineBot()
|
|
|
317 |
|
318 |
timer = range(60 * config.timeout)
|
319 |
for t in timer:
|
|
|
189 |
if blockquote:
|
190 |
# Extract the text
|
191 |
text = data.find('div', {'class': 'bbWrapper'})
|
192 |
+
|
193 |
for bq in text.find_all('blockquote'):
|
194 |
bq.extract()
|
195 |
reply = text.get_text().replace('\n', ' ').strip()
|
196 |
|
197 |
allquotes.append({'reply': reply, 'messengerName': messengerName, 'messageID': messageID, 'quotedID': quotedID})
|
198 |
|
199 |
+
else: # Looking for a direct message "@WarBot"
|
200 |
+
text = data.find('div', {'class': 'bbWrapper'})
|
201 |
+
if text.get_text().startswith('@WarBot'):
|
202 |
+
reply = text.get_text().replace('@WarBot','').replace('\n', ' ').strip()
|
203 |
+
allquotes.append({'reply': reply, 'messengerName': messengerName, 'messageID': messageID, 'quotedID': 'post: 0'})
|
204 |
+
|
205 |
except:
|
206 |
continue # There was no text in this quote, move to the next
|
207 |
|
|
|
232 |
# IDs of the quoted messages, replied by the bot:
|
233 |
messages_by_bot_IDs = []
|
234 |
|
235 |
+
# Initiate the direct messages
|
236 |
+
direct_messages = []
|
237 |
+
|
238 |
for msg in allMessages:
|
239 |
+
# Direct message to the bot
|
240 |
+
if msg['quotedID'].split(': ')[-1] == '0': #debug
|
241 |
+
direct_messages.append(msg)
|
242 |
# Set a list of replied messages IDs
|
243 |
if msg['messengerName'] == config.username: #message posted by the WarBot
|
244 |
messages_by_bot_IDs.append(msg['quotedID'].split(': ')[-1])
|
|
|
248 |
# All messages (with quotes) sent _FOR_ the Bot:
|
249 |
messagesForBot = getMessages(thread_url=config.thread_url, quotedUser=config.username, startingPage=startingPage)
|
250 |
|
251 |
+
# Append the direct messages to the messagesForBot:
|
252 |
+
for msg in direct_messages:
|
253 |
+
messagesForBot.append(msg)
|
254 |
+
|
255 |
# IDs of the messages, quoting the bot:
|
256 |
messages_for_bot_IDs = []
|
257 |
|
|
|
264 |
# Filter to leave just the unanswered messages IDs:
|
265 |
messages_for_bot_IDs = [ID for ID in messages_for_bot_IDs if ID not in messages_by_bot_IDs]
|
266 |
|
267 |
+
|
268 |
# Reply the unanswered messages:
|
269 |
for msg in messagesForBot:
|
270 |
if msg['messageID'].split('-')[-1] in messages_for_bot_IDs:
|
|
|
283 |
|
284 |
# Init Connection
|
285 |
db = conversationDB.DataBase()
|
286 |
+
|
287 |
+
if msg['quotedID'].split(': ')[-1] != '0': # It is dialogue. Look-up for the previous quotes
|
288 |
+
|
289 |
+
# Get the previous dialogue from the database
|
290 |
+
dbmessages = db.getmessages(msg['messengerName'])
|
291 |
+
for dbmessage in dbmessages:
|
292 |
+
previous_dialogue += dbmessage[0]+' '+dbmessage[1]+' '
|
293 |
+
# Update the string and preprocess it
|
294 |
+
quote = previous_dialogue + quote
|
295 |
+
quote = remove_non_english_russian_chars(quote)
|
296 |
+
quote = remove_extra_spaces(quote)
|
297 |
+
# Truncate the quote to return only the last MaxWords of words:
|
298 |
+
quote = " ".join(quote.split()[-config.MaxWords:])
|
299 |
|
300 |
# Fix the quote string, to eliminate errors:
|
301 |
quote = fixString(quote)
|
|
|
335 |
while True:
|
336 |
print('Starting Session')
|
337 |
WarOnlineBot()
|
338 |
+
print('Session finished. Timeout...')
|
339 |
|
340 |
timer = range(60 * config.timeout)
|
341 |
for t in timer:
|