From ebe6847b1ece1d99a337a9e94beeeffe7d4a6af8 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Tue, 12 Jul 2016 18:16:26 -0600 Subject: [PATCH 01/18] Update slackbot_settings.py --- slackbot_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slackbot_settings.py b/slackbot_settings.py index 00affba..df724ee 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -1 +1 @@ -API_TOKEN = "" +API_TOKEN = "xoxb-59212563874-4Q2FQRcL4TB6WYXeWJCgWRO1" From 5713e92fe79ddc7e4c45b71769a6f2c4943fa1ac Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Tue, 12 Jul 2016 18:21:01 -0600 Subject: [PATCH 02/18] Delete slackbot_settings.py --- slackbot_settings.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 slackbot_settings.py diff --git a/slackbot_settings.py b/slackbot_settings.py deleted file mode 100644 index df724ee..0000000 --- a/slackbot_settings.py +++ /dev/null @@ -1 +0,0 @@ -API_TOKEN = "xoxb-59212563874-4Q2FQRcL4TB6WYXeWJCgWRO1" From d27f92bb505efe6438f22d6d444475bc7a69deaa Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Tue, 12 Jul 2016 18:36:33 -0600 Subject: [PATCH 03/18] init --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6b4a261..5eb93f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # Created by https://www.gitignore.io/api/python +##slackbot## +slackbot_settings.py + ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ From 399ec06231e98e717a5eae341e6c56314821fdee Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Wed, 20 Jul 2016 19:24:43 -0600 Subject: [PATCH 04/18] settings-api-env --- .gitignore | 3 --- slackbot_settings.py | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 slackbot_settings.py diff --git a/.gitignore b/.gitignore index 5eb93f8..6b4a261 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ # Created by https://www.gitignore.io/api/python -##slackbot## -slackbot_settings.py - ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/slackbot_settings.py b/slackbot_settings.py new file mode 100644 index 0000000..3e48de5 --- /dev/null +++ b/slackbot_settings.py @@ -0,0 +1,8 @@ +import os +API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') +ERROT_TO = "general" +DEFAULT_REPLY = "Sorry but I didn't understand you" +PLUGINS = [ + 'slackbot.plugins', + 'mybot.plugins' +] From 5779a7e6285bcf9a99e82ef42cbce0406db38077 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Wed, 20 Jul 2016 19:35:27 -0600 Subject: [PATCH 05/18] stuff --- bashrc | 0 run.py | 1 + 2 files changed, 1 insertion(+) create mode 100644 bashrc diff --git a/bashrc b/bashrc new file mode 100644 index 0000000..e69de29 diff --git a/run.py b/run.py index e3ffb13..b13e485 100644 --- a/run.py +++ b/run.py @@ -1,3 +1,4 @@ +from slackbot.bot import respond_to from slackbot.bot import Bot def main(): bot = Bot() From ea7acad97c4b3c3842c897ef62b10a0e0513985f Mon Sep 17 00:00:00 2001 From: Boraz Date: Thu, 21 Jul 2016 18:22:35 -0600 Subject: [PATCH 06/18] file structure change --- run.py | 6 ++++-- slackbot/bashrc | 7 +++++++ slackbot/plugins/import os.py | 6 ++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 slackbot/bashrc create mode 100644 slackbot/plugins/import os.py diff --git a/run.py b/run.py index b13e485..2a82fc0 100644 --- a/run.py +++ b/run.py @@ -1,8 +1,10 @@ -from slackbot.bot import respond_to from slackbot.bot import Bot +from slackbot import settings +from slackbot.bot import Bot + def main(): bot = Bot() bot.run() if __name__ == "__main__": - main() + main() \ No newline at end of file diff --git a/slackbot/bashrc b/slackbot/bashrc new file mode 100644 index 0000000..3500df2 --- /dev/null +++ b/slackbot/bashrc @@ -0,0 +1,7 @@ +import os +API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') +ERROT_TO = "general" +PLUGINS = [ + 'slackbot.plugins', +] +DEFAULT_REPLY = "Sorry but I didn't understand you" \ No newline at end of file diff --git a/slackbot/plugins/import os.py b/slackbot/plugins/import os.py new file mode 100644 index 0000000..440291c --- /dev/null +++ b/slackbot/plugins/import os.py @@ -0,0 +1,6 @@ +import os +from slackbot.bot import respond_to + +@respond_to('I love you') +def love(message): + message.reply('I love you too!') \ No newline at end of file From f50d1f2c85962b4987e31f280abdc2374442d6b8 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Thu, 21 Jul 2016 18:32:00 -0600 Subject: [PATCH 07/18] trying-responses --- slackbot/plugins/hola.py | 5 +++++ slackbot/plugins/{import os.py => import_os.py} | 0 slackbot_settings.py | 5 ++--- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 slackbot/plugins/hola.py rename slackbot/plugins/{import os.py => import_os.py} (100%) diff --git a/slackbot/plugins/hola.py b/slackbot/plugins/hola.py new file mode 100644 index 0000000..2020251 --- /dev/null +++ b/slackbot/plugins/hola.py @@ -0,0 +1,5 @@ +from slackbot.bot import respond_to + +@respond_to('hola') +def hola(message): + message.reply('yolloha') diff --git a/slackbot/plugins/import os.py b/slackbot/plugins/import_os.py similarity index 100% rename from slackbot/plugins/import os.py rename to slackbot/plugins/import_os.py diff --git a/slackbot_settings.py b/slackbot_settings.py index 3e48de5..4d5b9e2 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -1,8 +1,7 @@ import os API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') ERROT_TO = "general" -DEFAULT_REPLY = "Sorry but I didn't understand you" PLUGINS = [ - 'slackbot.plugins', - 'mybot.plugins' + 'slackbot.plugins', ] +DEFAULT_REPLY = "Sorry but I didn't understand you" From eb18b06f3d8a4b320f6d0904f31ab889649dc6d1 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Thu, 21 Jul 2016 18:40:19 -0600 Subject: [PATCH 08/18] whitespace --- run.py | 3 +-- slackbot/plugins/import_os.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/run.py b/run.py index 2a82fc0..03f9502 100644 --- a/run.py +++ b/run.py @@ -1,10 +1,9 @@ from slackbot.bot import Bot from slackbot import settings -from slackbot.bot import Bot def main(): bot = Bot() bot.run() if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/slackbot/plugins/import_os.py b/slackbot/plugins/import_os.py index 440291c..b18dd2b 100644 --- a/slackbot/plugins/import_os.py +++ b/slackbot/plugins/import_os.py @@ -3,4 +3,4 @@ @respond_to('I love you') def love(message): - message.reply('I love you too!') \ No newline at end of file + message.reply('I love you too!') From 7f9fd0354019b931f799aee3640c572f64cad743 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Tue, 26 Jul 2016 23:17:19 -0600 Subject: [PATCH 09/18] working-default-reply --- slackbot/bashrc | 7 ------- slackbot_settings.py | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 slackbot/bashrc diff --git a/slackbot/bashrc b/slackbot/bashrc deleted file mode 100644 index 3500df2..0000000 --- a/slackbot/bashrc +++ /dev/null @@ -1,7 +0,0 @@ -import os -API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') -ERROT_TO = "general" -PLUGINS = [ - 'slackbot.plugins', -] -DEFAULT_REPLY = "Sorry but I didn't understand you" \ No newline at end of file diff --git a/slackbot_settings.py b/slackbot_settings.py index 4d5b9e2..b616e70 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -4,4 +4,4 @@ PLUGINS = [ 'slackbot.plugins', ] -DEFAULT_REPLY = "Sorry but I didn't understand you" +DEFAULT_REPLY = "Sorry but I didn't understand you!!" From 39684276165fd4b18b1ad3ddff3b100225e4dd5b Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Wed, 27 Jul 2016 17:46:57 -0600 Subject: [PATCH 10/18] working-no-file-structure --- slackbot/plugins/hola.py => hola.py | 0 run.py | 4 ++++ slackbot_settings.py | 5 +++++ 3 files changed, 9 insertions(+) rename slackbot/plugins/hola.py => hola.py (100%) diff --git a/slackbot/plugins/hola.py b/hola.py similarity index 100% rename from slackbot/plugins/hola.py rename to hola.py diff --git a/run.py b/run.py index 03f9502..16d1be3 100644 --- a/run.py +++ b/run.py @@ -1,7 +1,11 @@ from slackbot.bot import Bot from slackbot import settings +from slackbot.bot import respond_to def main(): + @respond_to('hola') + def hola(message): + message.reply('yolloha') bot = Bot() bot.run() diff --git a/slackbot_settings.py b/slackbot_settings.py index b616e70..64d6af7 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -1,7 +1,12 @@ import os +from slackbot.bot import respond_to API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') ERROT_TO = "general" PLUGINS = [ 'slackbot.plugins', ] DEFAULT_REPLY = "Sorry but I didn't understand you!!" + +@respond_to('hola') +def hola(message): + message.reply('yolloha') From 00740e22b490544d2a0500d8e63540f004c93d91 Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Wed, 27 Jul 2016 17:47:59 -0600 Subject: [PATCH 11/18] file-structure-removed --- bashrc | 0 hola.py | 5 ----- slackbot/plugins/import_os.py | 6 ------ slackbot_settings.py | 10 +--------- 4 files changed, 1 insertion(+), 20 deletions(-) delete mode 100644 bashrc delete mode 100644 hola.py delete mode 100644 slackbot/plugins/import_os.py diff --git a/bashrc b/bashrc deleted file mode 100644 index e69de29..0000000 diff --git a/hola.py b/hola.py deleted file mode 100644 index 2020251..0000000 --- a/hola.py +++ /dev/null @@ -1,5 +0,0 @@ -from slackbot.bot import respond_to - -@respond_to('hola') -def hola(message): - message.reply('yolloha') diff --git a/slackbot/plugins/import_os.py b/slackbot/plugins/import_os.py deleted file mode 100644 index b18dd2b..0000000 --- a/slackbot/plugins/import_os.py +++ /dev/null @@ -1,6 +0,0 @@ -import os -from slackbot.bot import respond_to - -@respond_to('I love you') -def love(message): - message.reply('I love you too!') diff --git a/slackbot_settings.py b/slackbot_settings.py index 64d6af7..ea6a5a7 100644 --- a/slackbot_settings.py +++ b/slackbot_settings.py @@ -1,12 +1,4 @@ import os -from slackbot.bot import respond_to API_TOKEN = os.environ.get('SLACKBOT_API_TOKEN') -ERROT_TO = "general" -PLUGINS = [ - 'slackbot.plugins', -] +ERROR_TO = "general" DEFAULT_REPLY = "Sorry but I didn't understand you!!" - -@respond_to('hola') -def hola(message): - message.reply('yolloha') From 9750118f036ed30b1042d7358c20f4e9754df7df Mon Sep 17 00:00:00 2001 From: Boraz Date: Wed, 27 Jul 2016 18:13:35 -0600 Subject: [PATCH 12/18] StatBot file added to put replys --- StatBot.py | 24 ++++++++++++++++++++++++ run.py | 8 +++----- 2 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 StatBot.py diff --git a/StatBot.py b/StatBot.py new file mode 100644 index 0000000..1f72b84 --- /dev/null +++ b/StatBot.py @@ -0,0 +1,24 @@ +import time +import os +from slackbot import settings +from slackbot.bot import respond_to +from slackbot.bot import listen_to +import re + +@respond_to('hi', re.IGNORECASE) +def hi(message): + message.reply('I can understand hi or HI!') + # react with thumb up emoji + message.react('+1') + +@respond_to('I love you') +def love(message): + message.reply('I love you too!') + +@listen_to('Can someone help me?') +def help(message): + # Message is replied to the sender (prefixed with @user) + message.reply('Yes, I can!') + + # Message is sent on the channel + # message.send('I can help everybody!') \ No newline at end of file diff --git a/run.py b/run.py index 16d1be3..01e0a51 100644 --- a/run.py +++ b/run.py @@ -1,13 +1,11 @@ +import StatBot from slackbot.bot import Bot from slackbot import settings -from slackbot.bot import respond_to def main(): - @respond_to('hola') - def hola(message): - message.reply('yolloha') + bot = Bot() bot.run() if __name__ == "__main__": - main() + main() \ No newline at end of file From cad0a07f4c36ec04d2502f108e32b6b192837718 Mon Sep 17 00:00:00 2001 From: Boraz Date: Wed, 27 Jul 2016 18:15:39 -0600 Subject: [PATCH 13/18] added re.IGNORECASE to replys --- StatBot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/StatBot.py b/StatBot.py index 1f72b84..881b8b4 100644 --- a/StatBot.py +++ b/StatBot.py @@ -11,11 +11,11 @@ def hi(message): # react with thumb up emoji message.react('+1') -@respond_to('I love you') +@respond_to('i love you', re.IGNORECASE) def love(message): message.reply('I love you too!') -@listen_to('Can someone help me?') +@listen_to('can someone help me?', re.IGNORECASE) def help(message): # Message is replied to the sender (prefixed with @user) message.reply('Yes, I can!') From d4fcc5bce38e9a0dfe3e61148fd8eadd0b894c1c Mon Sep 17 00:00:00 2001 From: Conner Simmering Date: Sun, 31 Jul 2016 19:57:39 -0600 Subject: [PATCH 14/18] getting-savage --- StatBot.py | 110 +- python-json-testing/channel_obj.json | 1910 ++++++++++++++++++++++++++ python-json-testing/parse_json.py | 7 + slackbot_settings.py | 2 +- 4 files changed, 2014 insertions(+), 15 deletions(-) create mode 100644 python-json-testing/channel_obj.json create mode 100644 python-json-testing/parse_json.py diff --git a/StatBot.py b/StatBot.py index 881b8b4..0ac9ccb 100644 --- a/StatBot.py +++ b/StatBot.py @@ -1,24 +1,106 @@ import time import os +import json +import numpy as np +import matplotlib.pyplot as plt +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 import re -@respond_to('hi', re.IGNORECASE) -def hi(message): - message.reply('I can understand hi or HI!') - # react with thumb up emoji - message.react('+1') +@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('i love you', re.IGNORECASE) -def love(message): - message.reply('I love you too!') +@respond_to('channel_stats', re.IGNORECASE) +def channel_stats(message): -@listen_to('can someone help me?', re.IGNORECASE) -def help(message): - # Message is replied to the sender (prefixed with @user) - message.reply('Yes, I can!') + # 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']) + + @respond_to('channel_analytics', re.IGNORECASE) + def channel_analytics(message): + + N = 5 + menMeans = (20, 35, 30, 35, 27) + menStd = (2, 3, 4, 1, 2) + + ind = np.arange(N) # the x locations for the groups + width = 0.35 # the width of the bars + + fig, ax = plt.subplots() + rects1 = ax.bar(ind, menMeans, width, color='r', yerr=menStd) + + womenMeans = (25, 32, 34, 20, 25) + womenStd = (3, 5, 2, 3, 3) + rects2 = ax.bar(ind + width, womenMeans, width, color='y', yerr=womenStd) + + # add some text for labels, title and axes ticks + ax.set_ylabel('Scores') + ax.set_title('Scores by group and gender') + ax.set_xticks(ind + width) + ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) + + ax.legend((rects1[0], rects2[0]), ('Men', 'Women')) + + + def autolabel(rects): + # attach some text labels + for rect in rects: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width()/2., 1.05*height, + '%d' % int(height), + ha='center', va='bottom') + + autolabel(rects1) + autolabel(rects2) - # Message is sent on the channel - # message.send('I can help everybody!') \ No newline at end of file + plt.show() + message.reply('graphing') diff --git a/python-json-testing/channel_obj.json b/python-json-testing/channel_obj.json new file mode 100644 index 0000000..b9a46ea --- /dev/null +++ b/python-json-testing/channel_obj.json @@ -0,0 +1,1910 @@ +{ + "ok": true, + "messages": [ + { + "type": "message", + "user": "U1R6210FK", + "text": "xoxp-59142886803-59206034529-64873573349-06b540efa2", + "ts": "1470003818.000002" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: Sorry but I didn't understand you!!", + "ts": "1469750800.000007" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: lol", + "ts": "1469750799.000006" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: I can understand hi or HI!", + "ts": "1469750665.000005" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: get all the stats for this channel", + "ts": "1469750663.000004", + "reactions": [ + { + "name": "+1", + "users": [ + "U1R68GKRQ" + ], + "count": 1 + } + ] + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: hello sender!", + "ts": "1469750638.000003" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: hello", + "ts": "1469750638.000002" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "Team Member: Daniel Maxson\n\u25cb Role: Developer\n\u25cb Specific Tasks: \n\u25a0 Task 1: StatBot functionality programming", + "ts": "1469667285.000073" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "<@U1R4CQCMR>", + "ts": "1469667252.000071" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "bitch", + "ts": "1469667210.000070" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "^ that format", + "ts": "1469667204.000069" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "Team Member: Conner Simmering\n\u25cb Role: Backend Developer\n\u25cb Specific Tasks: \n\u25a0 Task 1: Program the slack bot functionality in python", + "ts": "1469667159.000068" + }, + { + "type": "message", + "user": "U1R665WUA", + "text": "\u25cf Team Member: Jesse Bird\n\u25cb Role: UI and Presentation Designer\n\u25cb Specific Tasks: \n\u25a0 Task 1: Design bot icon and statistic interfaces\n\u25a0 Task 2: Design and Implement Presentation", + "edited": { + "user": "U1R665WUA", + "ts": "1469667325.000000" + }, + "ts": "1469667136.000067" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "Everybody please send one with your stuff", + "ts": "1469667077.000066" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "\u25cf\tTeam Member: Frederik Lohner\n\u25cb\tRole: whatever internal name or collection of names makes sense internal to the team.\n\u25cb\tSpecific Tasks: \n\u25a0\tTask 1: {can begin with Project report elements, perhaps coding {just your local name\/short description}, or anything that makes sense to YOU.}\n\u25a0\tTask 2:\n\u25a0\t....", + "ts": "1469667072.000065" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: I can understand hi or HI!", + "ts": "1469664862.000064" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "<@U1R68GKRQ>: hi", + "ts": "1469664862.000063", + "reactions": [ + { + "name": "+1", + "users": [ + "U1R68GKRQ" + ], + "count": 1 + } + ] + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "can someone help me?", + "ts": "1469664857.000062" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "can someone help me", + "ts": "1469664850.000061" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: I can understand hi or HI!", + "ts": "1469664738.000060" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "<@U1R68GKRQ>: hi", + "ts": "1469664738.000059", + "reactions": [ + { + "name": "+1", + "users": [ + "U1R68GKRQ" + ], + "count": 1 + } + ] + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "hi", + "ts": "1469664728.000058" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: Yes, I can!", + "ts": "1469664720.000057" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "Can someone help me?", + "ts": "1469664719.000056" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: I love you too!", + "ts": "1469664710.000055" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "<@U1R68GKRQ>: I love you", + "ts": "1469664709.000054" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: hello sender!", + "ts": "1469664703.000053" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "<@U1R68GKRQ>: hello", + "ts": "1469664702.000052" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: Sorry but I didn't understand you!!", + "ts": "1469664582.000051" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: hola", + "ts": "1469664581.000050" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: Sorry but I didn't understand you!!", + "ts": "1469664578.000049" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: i love you", + "ts": "1469664577.000048" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R6210FK>: Sorry but I didn't understand you!!", + "ts": "1469664574.000047" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "<@U1R68GKRQ>: I love you", + "ts": "1469664573.000046" + }, + { + "type": "message", + "user": "U1R68GKRQ", + "text": "<@U1R5HL728>: hello sender!", + "ts": "1469664562.000045" + }, + { + "type": "message", + "user": "U1R5HL728", + "text": "<@U1R68GKRQ>: hello", + "ts": "1469664561.000044" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "\/giphy Daniel Maxson", + "attachments": [ + { + "fallback": "giphy: ", + "image_url": "http:\/\/media2.giphy.com\/media\/12FzwLWppc9IrK\/giphy.gif", + "image_width": 500, + "image_height": 176, + "image_bytes": 551135, + "is_animated": true, + "title": "Daniel Maxson", + "id": 1, + "title_link": "http:\/\/giphy.com\/gifs\/daniel-dmtn-12FzwLWppc9IrK" + } + ], + "ts": "1469664406.000043" + }, + { + "type": "message", + "user": "U1R5G4DPE", + "text": "\/giphy andy", + "attachments": [ + { + "fallback": "giphy: ", + "image_url": "http:\/\/media0.giphy.com\/media\/LSNqpYqGRqwrS\/giphy.gif", + "image_width": 300, + "image_height": 169, + "image_bytes": 511257, + "is_animated": true, + "title": "andy", + "id": 1, + "title_link": "http:\/\/giphy.com\/gifs\/reaction-spoilers-outlander-LSNqpYqGRqwrS" + } + ], + "ts": "1469664399.000042" + }, + { + "type": "message", + "user": "U1R6210FK", + "text": "", + "attachments": [ + { + "service_name": "Imgur", + "title": "Imgur GIF", + "title_link": "http:\/\/i.imgur.com\/EeF0xdn.gifv", + "fallback": "Imgur: Imgur GIF", + "thumb_url": "https:\/\/i.imgur.com\/EeF0xdnh.jpg", + "video_html_width": "480", + "video_html_height": "480", + "video_url": "https:\/\/i.imgur.com\/EeF0xdn.mp4", + "video_html": "