-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand.py
More file actions
102 lines (77 loc) · 3.4 KB
/
command.py
File metadata and controls
102 lines (77 loc) · 3.4 KB
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
import json
from slackuser import SlackUser
from wraplog import wraplog
import logging
class Command:
def shouldTriggerOn(self, event):
return False
def executeOn(self, event):
pass
def help(self):
return ""
class FindTalentsByPerson(Command):
importance = 4
def __init__(self, slack, trello):
self.slack = slack
self.trello = trello
def help(self):
return "`@username` to find out what talents that person has."
def shouldTriggerOn(self, event):
return event.isDirectMsgForTalentBot() \
or (event.isForTalentBot() and event.hasAdditionalAddressee())
@wraplog("Fetching talents for a person")
def executeOn(self, event):
logging.debug("Raw data: " + str(event))
userDataJson = self.slack.api_call("users.info", user=event.userKey())
try:
user = SlackUser(userDataJson)
logging.info(user.name + " : " + user.email)
listOfTalents = self.trello.getTalentsByEmail(user.email)
if listOfTalents != '':
self.slack.rtm_send_message(event.channel(), 'Om ' + user.name + ': ' + listOfTalents)
else:
self.slack.rtm_send_message(event.channel(), user.name + ' har inte lagt till talanger')
except ValueError:
self.slack.rtm_send_message(event.channel(), self.getMissingUserErrorMsg(event))
except RuntimeError as re:
logging.error(re)
@staticmethod
def getMissingUserErrorMsg(event):
return 'Ingen person hittades med namnet ' + event.text().strip()[1:]
class FindPersonsByTalent(Command):
importance = 5
def __init__(self, slack, trello):
self.slack = slack
self.trello = trello
def help(self):
return "`talent scrum` to find out who knows scrum."
def shouldTriggerOn(self, event):
return event.textContainsKeyword('talent')
@wraplog("Calling for persons with talent")
def executeOn(self, event):
talent = event.getKeywordArguments('talent')
logging.info("Calling for persons that know " + talent)
if len(talent) > 0:
person_emails = self.trello.getPersonEmailsByTalent2(talent)
people = self.persons_by_emails(person_emails)
self.slack.rtm_send_message(event.channel(), "Personer med talangen " + talent + ": " + people)
else:
self.slack.rtm_send_message(event.channel(), "Talang saknas i meddelandetexten")
def persons_by_emails(self, email_addresses):
all_users = json.loads(self.slack.api_call("users.list"))['members']
active_users = [u for u in all_users if (not u['deleted'])]
profiles = [u['profile'] for u in active_users if (u['profile'])]
matched_profiles = [p['real_name'] for p in profiles if ('email' in p) and p['email'] in email_addresses]
return '\n- ' + '\n- '.join(matched_profiles)
class GetAllTalents(Command):
importance = 9
def __init__(self, slack, trello):
self.slack = slack
self.trello = trello
def help(self):
return "`all-talents` to get all known talents."
def shouldTriggerOn(self, event):
return event.textContainsKeyword('all-talents')
@wraplog("Executing GetAllTalents command")
def executeOn(self, event):
self.slack.rtm_send_message(event.channel(), "Talanger i systemet: " + self.trello.getAllTalents())