diff --git a/README.md b/README.md index 98709d6..6adcefd 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# UserDesign-SlackBot +# Statbot + +Statbot Demo diff --git a/StatBot.py b/StatBot.py new file mode 100644 index 0000000..2434f20 --- /dev/null +++ b/StatBot.py @@ -0,0 +1,103 @@ +import time +import os +import re +import json +import plotly.plotly as py +import plotly.graph_objs as go +from pprint import pprint +from urllib import urlopen +from slackbot import settings +from collections import defaultdict +from slackbot.bot import respond_to +from slackbot.bot import listen_to + +@respond_to('help', re.IGNORECASE) +def help(message): + help_reply = { + "text": "You can ask me one of the following questions:\n * channel_stats \n * channel_analytics" + } + message.reply(help_reply['text']) + +@respond_to('channel_stats', re.IGNORECASE) +def channel_stats(message): + + # Slack user web API token + token = os.environ.get('USER_TOKEN') + + # Total message count + channel_endpoint = urlopen('https://slack.com/api/channels.history?token='+token+'&channel=C1R5Z1FT3&count=1000&pretty=1').read() + channel_endpoint_result = json.loads(channel_endpoint) + total_message_count = str(len(channel_endpoint_result['messages'])) + + # Individual message count + users_endpoint=urlopen('https://slack.com/api/users.list?token='+token+'&pretty=1').read() + users_endpoint_result = json.loads(users_endpoint) + users_arr = [] + for i in users_endpoint_result['members']: + data = [] + data.append(i['name']) + data.append(i['id']) + users_arr.append(data) + pprint(users_arr) + count_dict = defaultdict(int) + len_user_arr = len(users_arr) + for i in range(0, len_user_arr): + count_dict[users_arr[i][1]] = 0 + pprint(count_dict) + for i in channel_endpoint_result['messages']: + for j in range(0,len_user_arr): + if i['user'] == users_arr[j][1]: + count_dict[users_arr[j][1]] += 1 + pprint(count_dict) + key_arr = [] + for key in count_dict: + key_arr.append(key) + pprint(key_arr) + for i in range(0,len_user_arr): + for j in range(0, len_user_arr): + if key_arr[i] == users_arr[j][1]: + count_dict[users_arr[j][0]] = count_dict.pop(key_arr[i]) + str_count_dict = str(count_dict) + + # Answer command + channel_stats_reply = { + "text": "Channel Stats:\n Total channel messages: "+total_message_count+"\n"+str_count_dict+"" + } + message.reply(channel_stats_reply['text']) + +# Hardcoded graph but with real data +@respond_to('channel_analytics', re.IGNORECASE) +def channel_analytics(message): + + # Slack user web API token + token = os.environ.get('USER_TOKEN') + + users_endpoint=urlopen('https://slack.com/api/users.list?token='+token+'&pretty=1').read() + users_endpoint_result = json.loads(users_endpoint) + users_arr = [] + for i in users_endpoint_result['members']: + data = [] + data.append(i['name']) + data.append(i['id']) + users_arr.append(data) + + count_dict = defaultdict(int) + len_user_arr = len(users_arr) + channel_endpoint = urlopen('https://slack.com/api/channels.history?token='+token+'&channel=C1R5Z1FT3&count=1000&pretty=1').read() + channel_endpoint_result = json.loads(channel_endpoint) + for i in channel_endpoint_result['messages']: + for j in range(0,len_user_arr): + if i['user'] == users_arr[j][1]: + count_dict[users_arr[j][1]] += 1 + + pprint(count_dict) + pprint(count_dict[users_arr[0][1]]) + + labels=[users_arr[0][0],users_arr[1][0],users_arr[2][0],users_arr[3][0],users_arr[4][0],users_arr[5][0],users_arr[6][0],users_arr[7][0]] + + values=[count_dict[users_arr[0][1]],count_dict[users_arr[1][1]],count_dict[users_arr[2][1]],count_dict[users_arr[3][1]],count_dict[users_arr[4][1]],count_dict[users_arr[5][1]],count_dict[users_arr[6][1]], count_dict[users_arr[7][1]]] + + trace=go.Pie(labels=labels,values=values) + py.iplot([trace]) + + message.reply('https://plot.ly/~simmeringc/39/') diff --git a/run.py b/run.py index e3ffb13..01e0a51 100644 --- a/run.py +++ b/run.py @@ -1,7 +1,11 @@ +import StatBot from slackbot.bot import Bot +from slackbot import settings + def main(): + bot = Bot() bot.run() if __name__ == "__main__": - main() + main() \ No newline at end of file diff --git a/slackbot_settings.py b/slackbot_settings.py index 00affba..f9804f8 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -1 +1,6 @@ -API_TOKEN = "" +import os +import plotly.plotly as py +API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') +ERROR_TO = "general" +DEFAULT_REPLY = "Type '@statbot help' for a list of Statbot commands." +py.sign_in('simmeringc', os.environ.get('PLOTLY_API_KEY'))