-
Notifications
You must be signed in to change notification settings - Fork 0
/
SlackESPN.py
124 lines (102 loc) · 4.44 KB
/
SlackESPN.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
from slackclient import SlackClient
from espnff import League
import argparse, os, time
def handle_command(ARGS, CLIENT, command, channel):
"""
Receives commands directed at the bot and determines if they
are valid commands. If so, then acts on the commands. If not,
returns back what it needs for clarification.
"""
message = '''Commands I know:
list teams
scores <optional week number>
does Brandon suck
'''
message = ""
attachments = ""
if command == "list teams":
message = '\n'.join(map(lambda x: x.team_name, ARGS.league.teams))
elif command == "does brandon suck":
message = 'yes'
elif 'scores' in command:
pieces = command.split(' ')
if len(pieces) == 1:
message = 'Current Scoreboard'
matchups = ARGS.league.scoreboard(projections=True)
else:
message = 'Scoreboard for week ' + pieces[1]
matchups = ARGS.league.scoreboard(pieces[1], projections=True)
attachments = [{
'fallback': 'A textual representation of your table data',
'fields': [
{
'title': 'Home',
'value': '\n'.join(map(lambda x: x.home_team.team_abbrev + " " + str(x.home_score) + " (" + str(x.home_projection) + ")", matchups)),
'short': True
},
{
'title': 'Away',
'value': '\n'.join(map(lambda x: x.away_team.team_abbrev + " " + str(x.away_score) + " (" + str(x.away_projection) + ")", matchups)),
'short': True
}
]
}]
CLIENT.api_call("chat.postMessage", channel=channel, text=message, attachments=attachments, as_user=True)
# CLIENT.api_call("chat.postMessage", channel=channel, text=message, as_user=True)
def parse_slack_output(ARGS, slack_rtm_output):
"""
The Slack Real Time Messaging API is an events firehose.
this parsing function returns None unless a message is
directed at the Bot, based on its ID.
"""
output_list = slack_rtm_output
if output_list and len(output_list) > 0:
for output in output_list:
if output and 'text' in output and ARGS.atbot in output['text']:
# return text after the @ mention, whitespace removed
return output['text'].split(ARGS.atbot)[1].strip().lower(), \
output['channel']
return None, None
def startloop(ARGS, client):
if client.rtm_connect():
print(ARGS.botname + " connected and running!")
while True:
command, channel = parse_slack_output(ARGS, client.rtm_read())
if command and channel:
handle_command(ARGS, CLIENT, command.strip(), channel)
time.sleep(ARGS.websocketdelay)
else:
print("Connection failed. Invalid Slack token or bot ID?")
"""
"""
def getfootballbot(ARGS, client):
api_call = client.api_call("users.list")
if api_call.get('ok'):
# retrieve all users so we can find our bot
users = api_call.get('members')
for user in users:
if 'name' in user and user.get('name') == ARGS.botname:
print("Bot ID for '" + user['name'] + "' is " + user.get('id'))
return user.get('id')
else:
raise Exception("could not find bot user with the name " + ARGS.botname)
if __name__ == '__main__':
PARSER = argparse.ArgumentParser()
PARSER.add_argument('-slacktoken', default='SLACK_FOOTBALL_TOKEN')
PARSER.add_argument('-espnleague', default='ESPN_LEAGUE')
PARSER.add_argument('-botname', default='footballbot')
PARSER.add_argument('-espns2', default='ESPNS2')
PARSER.add_argument('-swid', default='SWID')
PARSER.add_argument('-websocketdelay', type=int, default=1)
ARGS = PARSER.parse_args()
ARGS.league = League(int(os.environ.get(ARGS.espnleague)), 2017, espn_s2=os.environ.get(ARGS.espns2), swid=os.environ.get(ARGS.swid))
# sc = ARGS.league.scoreboard(projections=True)
# home_names = '\n'.join(map(lambda x: x.home_team.team_abbrev, sc))
# home_scores = '\n'.join(map(lambda x: x.home_score, sc))
# home_proj = '\n'.join(map(lambda x: x.home_projection, sc))
# print(home_scores)
# exit()
CLIENT = SlackClient(os.environ.get(ARGS.slacktoken))
BOTID = getfootballbot(ARGS, CLIENT)
ARGS.atbot = "<@" + BOTID + ">"
startloop(ARGS, CLIENT)