-
Notifications
You must be signed in to change notification settings - Fork 0
/
goodmorning.py
140 lines (107 loc) · 5.76 KB
/
goodmorning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: utf-8 -*-
# !/usr/bin/env python3.7
def main():
import os
import json
import random
import logging
import datetime
import requests
import dateutil.parser
from requests.auth import HTTPBasicAuth
# Set up logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Logging file handler
handler = logging.FileHandler("./logs/morning.log")
handler.setLevel(logging.DEBUG)
# Logging format added to handler
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %H:%M:%S')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('*** STARTING ***')
flowdock_api_key = os.environ.get("FLOWDOCK_API_KEY")
flowdock_org = os.environ.get("FLOWDOCK_ORG")
flowdock_flow = os.environ.get("FLOWDOCK_FLOW")
current_time = datetime.datetime.now()
utc_time = datetime.datetime.utcnow()
if current_time.weekday() != 4:
friday = False
else:
friday = True
greeting = ["Good morning", "#morning", "Morning", "Mornin'", "#goodmorning"]
# greeting = ["Howdy!","#howdy","Howdy do","Hoooow Dee Do"]
emoji = [":tada:", ":beers:", ":taco:", ":pow:", ":booyah:"]
friday_message = ["Friday", "Happy Friday", "TGIF", "Weekend"]
logger.debug('IS TODAY FRIDAY? {}'.format(friday))
# Instantiate a session with some default configuration params
session = requests.Session()
try:
logger.info('Searching for Good morning thread.')
url = 'https://api.flowdock.com/flows/%s/%s/messages?limit=5&search=morning' % (flowdock_org, flowdock_flow)
headers = {"content-type": "application/json", "accept": "application/json"}
response = session.get(url, headers=headers, auth=HTTPBasicAuth(flowdock_api_key, 'DUMMY'))
logger.debug('HEADERS: {}\n'.format(response.headers))
logger.debug('URL: {}\n'.format(url))
logger.debug('FULL RESPONSE JSON: {}\n'.format(response.json()))
threads = []
for node in response.json():
logger.debug('RESPONSE JSON: {}\n'.format(node))
logger.debug('Time difference less than or equal to 10 minutes? {}'.format(
utc_time - dateutil.parser.parse(node['created_at'], ignoretz=True) <= datetime.timedelta(minutes=10)))
logger.debug('USER ON POST: {}'.format(node['user']))
logger.debug('INITIAL MESSAGE ID: {}'.format(node['thread']['initial_message']))
logger.debug('MESSAGE ID: {}'.format(node['id']))
logger.debug('Message: {} - Created at: {}\n'.format(node['content'].encode("utf-8"), node['created_at']))
if utc_time - dateutil.parser.parse(node['created_at'], ignoretz=True) <= datetime.timedelta(minutes=10) \
and node['thread']['initial_message'] == node['id']:
logger.debug('Adding THREAD {}'.format(node['thread_id']))
url = 'https://api.flowdock.com/users/{}'.format(node['user'])
logger.debug(url)
response = session.get(url, headers=headers, auth=HTTPBasicAuth(flowdock_api_key, 'DUMMY'))
logger.debug('NICKNAME FOR @MENTION: {}'.format(response.json()['nick']))
threads.append('{{"thread_id": "{}","nickname": "{}"}}'.format(node['thread_id'],
response.json()['nick']))
logger.debug(threads)
logger.debug('LENGTH OF THREADS: {}'.format(len(threads)))
headers = {'X-flowdock-wait-for-message': 'true', 'content-type': 'application/json',
'Accept': 'application/json'}
session.headers.update(headers)
logger.debug('Session headers: {}'.format(session.headers))
if len(threads) > 0:
logger.info('Posting to THREAD(S)')
for thread in threads:
info = json.loads(thread)
content = '{} @{}'.format(random.choice(greeting), info['nickname'])
if friday:
content += '! {}! {}'.format(random.choice(friday_message), random.choice(emoji))
payload = {"content": content, "event": "message"}
logger.debug(payload)
url = 'https://api.flowdock.com/flows/{}/{}/threads/{}/messages'.format(
flowdock_org, flowdock_flow, info['thread_id'])
logger.debug(url)
response = session.post(url, data=json.dumps(payload), headers=headers,
auth=HTTPBasicAuth(flowdock_api_key, 'DUMMY'))
logger.info('Response from Flowdock: {}'.format(response.headers['Status']))
else:
logger.info('Posting to CHAT')
content = random.choice(greeting)
if friday:
content += ' {}! {}'.format(random.choice(friday_message), random.choice(emoji))
payload = {"content": content, "event": "message"}
logger.debug(payload)
url = 'https://api.flowdock.com/flows/{}/{}/messages'.format(flowdock_org, flowdock_flow)
logger.debug(url)
response = session.post(url, data=json.dumps(payload), headers=headers,
auth=HTTPBasicAuth(flowdock_api_key, 'DUMMY'))
logger.info('Response from Flowdock: {}'.format(response.headers['Status']))
logger.debug('Response headers: {}'.format(response.headers))
logger.debug('Response content: {}'.format(response.content))
logger.info('*** DONE ***')
except requests.exceptions.ConnectionError as errc:
print("Error Connecting: ", errc)
except Exception as err:
logger.error('There was an ERROR: ', exc_info=True)
finally:
session.close()
main()