Added msg functionality.
Showing
3 changed files
with
187 additions
and
4 deletions
deliveries.json
0 → 100644
1 | {"Rui": {"Everybody": {"delivery_time": "2015/12/04 00:00:00", "message": "You are a faggot", "channel": "47934985176354816"}}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -2,11 +2,15 @@ import requests | ... | @@ -2,11 +2,15 @@ import requests |
2 | import discord | 2 | import discord |
3 | import random | 3 | import random |
4 | import datetime | 4 | import datetime |
5 | from dateutil.parser import parse | ||
5 | 6 | ||
7 | from discord.object import Object | ||
6 | from ago import human | 8 | from ago import human |
7 | import simplejson as json | 9 | import simplejson as json |
10 | from collections import defaultdict | ||
8 | 11 | ||
9 | member_status = 'members.json' | 12 | member_status = 'members.json' |
13 | deliveries_file = 'deliveries.json' | ||
10 | fortune_file = 'fortunes.json' | 14 | fortune_file = 'fortunes.json' |
11 | games_file = 'games.json' | 15 | games_file = 'games.json' |
12 | credentials = 'creds.json' | 16 | credentials = 'creds.json' |
... | @@ -17,6 +21,12 @@ json_data=open(credentials).read() | ... | @@ -17,6 +21,12 @@ json_data=open(credentials).read() |
17 | creds = json.loads(json_data) | 21 | creds = json.loads(json_data) |
18 | client.login(creds['username'], creds['password']) | 22 | client.login(creds['username'], creds['password']) |
19 | 23 | ||
24 | def leaders(xs, top=20): | ||
25 | counts = defaultdict(int) | ||
26 | for x in xs: | ||
27 | counts[x] += 1 | ||
28 | return sorted(counts.items(), reverse=True, key=lambda tup: tup[1])[:top] | ||
29 | |||
20 | def byteify(input): | 30 | def byteify(input): |
21 | if isinstance(input, dict): | 31 | if isinstance(input, dict): |
22 | return {byteify(key):byteify(value) for key,value in input.iteritems()} | 32 | return {byteify(key):byteify(value) for key,value in input.iteritems()} |
... | @@ -27,6 +37,9 @@ def byteify(input): | ... | @@ -27,6 +37,9 @@ def byteify(input): |
27 | else: | 37 | else: |
28 | return input | 38 | return input |
29 | 39 | ||
40 | @client.event | ||
41 | def on_socket_raw_send(payload, binary=False): | ||
42 | check_msg_queue() | ||
30 | 43 | ||
31 | @client.event | 44 | @client.event |
32 | def on_status(member): | 45 | def on_status(member): |
... | @@ -40,6 +53,8 @@ def on_status(member): | ... | @@ -40,6 +53,8 @@ def on_status(member): |
40 | data = {} | 53 | data = {} |
41 | try: | 54 | try: |
42 | username = member.name.lower() | 55 | username = member.name.lower() |
56 | user_id = member.id | ||
57 | mention = member.mention() | ||
43 | if username in data: | 58 | if username in data: |
44 | is_afk = data[username]['is_afk'] | 59 | is_afk = data[username]['is_afk'] |
45 | afk_at = data[username]['afk_at'] | 60 | afk_at = data[username]['afk_at'] |
... | @@ -70,6 +85,8 @@ def on_status(member): | ... | @@ -70,6 +85,8 @@ def on_status(member): |
70 | if game_id not in games_played: | 85 | if game_id not in games_played: |
71 | games_played.append(game_id) | 86 | games_played.append(game_id) |
72 | data[username] = { | 87 | data[username] = { |
88 | 'id': user_id, | ||
89 | 'mention': mention, | ||
73 | 'is_afk': is_afk, | 90 | 'is_afk': is_afk, |
74 | 'afk_at': afk_at, | 91 | 'afk_at': afk_at, |
75 | 'status': status, | 92 | 'status': status, |
... | @@ -97,6 +114,60 @@ def get_game_names(game_id_list): | ... | @@ -97,6 +114,60 @@ def get_game_names(game_id_list): |
97 | result.append(game['name']) | 114 | result.append(game['name']) |
98 | return result | 115 | return result |
99 | 116 | ||
117 | def get_mention_status(mention): | ||
118 | try: | ||
119 | json_data=open(member_status).read() | ||
120 | data = json.loads(json_data) | ||
121 | except ValueError: | ||
122 | data = {} | ||
123 | if not data: | ||
124 | data = {} | ||
125 | for user in data: | ||
126 | if 'mention' in data[user]: | ||
127 | if data[user]['mention'] == mention: | ||
128 | return data[user] | ||
129 | return None | ||
130 | |||
131 | def check_msg_queue(): | ||
132 | print("checking messages") | ||
133 | try: | ||
134 | json_data=open(deliveries_file).read() | ||
135 | data = json.loads(json_data) | ||
136 | except ValueError: | ||
137 | data = {} | ||
138 | if not data: | ||
139 | data = {} | ||
140 | print("Data: %s" % data) | ||
141 | new_data = {} | ||
142 | for username in data: | ||
143 | for author in data[username]: | ||
144 | print("Message: %s" % data[username][author]) | ||
145 | delivery = datetime.datetime.strptime(data[username][author]['delivery_time'], '%Y/%m/%d %H:%M:%S') | ||
146 | if delivery <= datetime.datetime.now(): | ||
147 | offline = False | ||
148 | for member in client.get_all_members(): | ||
149 | print('MEMBER MENTION: %s USERNAME: %s' % (member.mention(), username)) | ||
150 | |||
151 | if username == member.mention(): | ||
152 | if member.status != 'online': | ||
153 | print('OFFLINE USER, TRY AGAIN LATER') | ||
154 | offline = True | ||
155 | break | ||
156 | if offline: | ||
157 | break | ||
158 | channel = Object(data[username][author]['channel']) | ||
159 | message = data[username][author]['message'] | ||
160 | client.send_message(channel, '{}, {} asked me to tell you "{}"'.format(username, author, message)) | ||
161 | else: | ||
162 | new_data[username] = {} | ||
163 | new_data[username][author] = data[username][author] | ||
164 | |||
165 | jdata = json.dumps(new_data, ensure_ascii=False) | ||
166 | print("New Data: %s" % new_data) | ||
167 | open(deliveries_file, 'wb+').write(jdata.encode('utf8')) | ||
168 | return | ||
169 | |||
170 | |||
100 | @client.event | 171 | @client.event |
101 | def on_message(message): | 172 | def on_message(message): |
102 | print message.content | 173 | print message.content |
... | @@ -114,7 +185,20 @@ def on_message(message): | ... | @@ -114,7 +185,20 @@ def on_message(message): |
114 | 185 | ||
115 | 186 | ||
116 | if message.content.startswith('!help') or message.content.startswith('!commands'): | 187 | if message.content.startswith('!help') or message.content.startswith('!commands'): |
117 | client.send_message(message.channel, '{} Available Commands:\nYou can ask compound or questions and I will choose. Example: HellsBot Rui is a Faggot or Rui is a faggot?\n!games <username> - Returns a list of games played\n!lastseen <username> - Returns info on when the user was last seen and their status\n!addfortune <fortune>\n!fortune\n!secret\n!bemyirlwaifu'.format(message.author.mention())) | 188 | client.send_message(message.channel, |
189 | """{} Available Commands: | ||
190 | You can ask compound or questions and I will choose. Example: HellsBot Rui is a Faggot or Rui is a faggot? | ||
191 | !msg <username> in 5 minutes Tea is ready | ||
192 | !msg <username> in 45 seconds Your finished masterbating | ||
193 | !msg <username> in 2 hours The movie is over | ||
194 | !msg <username> on 12/22/2015 Happy Birthday! | ||
195 | !games <username> - Returns a list of games played for a username. | ||
196 | !gameslist - Returns a list of the top 20 games and the number of people who have played that game. | ||
197 | !lastseen <username> - Returns info on when the user was last seen and their status. | ||
198 | !addfortune <fortune> - Adds a new fortune. | ||
199 | !fortune - Returns your fortune | ||
200 | !secret | ||
201 | !bemyirlwaifu""".format(message.author.mention())) | ||
118 | return | 202 | return |
119 | 203 | ||
120 | if message.content.startswith('!lastseen'): | 204 | if message.content.startswith('!lastseen'): |
... | @@ -145,6 +229,33 @@ def on_message(message): | ... | @@ -145,6 +229,33 @@ def on_message(message): |
145 | else: | 229 | else: |
146 | client.send_message(message.channel, 'I don\'t have any data on {} yet {}'.format(username, message.author.mention())) | 230 | client.send_message(message.channel, 'I don\'t have any data on {} yet {}'.format(username, message.author.mention())) |
147 | 231 | ||
232 | if message.content.startswith('!gameslist'): | ||
233 | data = None | ||
234 | try: | ||
235 | json_data=open(member_status).read() | ||
236 | data = json.loads(json_data) | ||
237 | except ValueError: | ||
238 | pass | ||
239 | if not data: | ||
240 | client.send_message(message.channel, 'I am a bit confused right now.. maybe I need more data. {}!'.format(message.author.mention())) | ||
241 | else: | ||
242 | game_list = [] | ||
243 | for user in data: | ||
244 | if 'games_played' in data[user]: | ||
245 | print('%s' % data[user]) | ||
246 | |||
247 | game_list += data[user]['games_played'] | ||
248 | print('%s' % game_list) | ||
249 | games_sorted = leaders(get_game_names(game_list)) | ||
250 | print('%s' % games_sorted) | ||
251 | out_string = '' | ||
252 | for game in games_sorted: | ||
253 | #print('%s' % game) | ||
254 | out_string += ' {} - {}\n'.format(game[1], game[0]) | ||
255 | |||
256 | client.send_message(message.channel, 'The games I have seen people playing are: \n{}'.format(out_string)) | ||
257 | return | ||
258 | |||
148 | if message.content.startswith('!games'): | 259 | if message.content.startswith('!games'): |
149 | data = None | 260 | data = None |
150 | try: | 261 | try: |
... | @@ -161,6 +272,76 @@ def on_message(message): | ... | @@ -161,6 +272,76 @@ def on_message(message): |
161 | client.send_message(message.channel, 'I have seen {} playing: {}'.format(username, games)) | 272 | client.send_message(message.channel, 'I have seen {} playing: {}'.format(username, games)) |
162 | else: | 273 | else: |
163 | client.send_message(message.channel, 'I don\'t have any data on {} yet {}'.format(username, message.author.mention())) | 274 | client.send_message(message.channel, 'I don\'t have any data on {} yet {}'.format(username, message.author.mention())) |
275 | return | ||
276 | |||
277 | # !msg joe in 5 minutes YOU ARE A DICK | ||
278 | if message.content.startswith('!msg'): | ||
279 | try: | ||
280 | json_data=open(deliveries_file).read() | ||
281 | data = json.loads(json_data) | ||
282 | except ValueError: | ||
283 | data = {} | ||
284 | if not data: | ||
285 | data = {} | ||
286 | channel = message.channel | ||
287 | author = message.author | ||
288 | #author = message.author.name | ||
289 | username = '' | ||
290 | try: | ||
291 | message_bits = message.content.split(" ") | ||
292 | msg_datetime = datetime.datetime.now() | ||
293 | msg_idx = 2 | ||
294 | if message_bits[2] == 'in' and message_bits[3].isdigit(): | ||
295 | time = int(message_bits[3]) | ||
296 | msg_idx = 4 | ||
297 | if message_bits[4].startswith('sec'): | ||
298 | msg_datetime = msg_datetime + datetime.timedelta(seconds=time) | ||
299 | msg_idx = 5 | ||
300 | elif message_bits[4].startswith('hour'): | ||
301 | msg_datetime = msg_datetime + datetime.timedelta(hours=time) | ||
302 | msg_idx = 5 | ||
303 | else: # minutes by default | ||
304 | msg_datetime = msg_datetime + datetime.timedelta(minutes=time) | ||
305 | msg_idx = 5 | ||
306 | elif message_bits[2] == 'on': | ||
307 | try: | ||
308 | tmp_date = parse(message_bits[3]) | ||
309 | msg_datetime = tmp_date | ||
310 | msg_idx = 4 | ||
311 | except ValueError: | ||
312 | client.send_message(channel, 'Your shitty message has been rejected {}. Next time learn how to date...MM\\DD\\YYYY'.format(message.author.mention())) | ||
313 | return | ||
314 | |||
315 | username = message_bits[1] | ||
316 | user_mention = '' | ||
317 | for member in client.get_all_members(): | ||
318 | print("MEMBER: %s" % member) | ||
319 | if username.lower() == member.name.lower(): | ||
320 | user_mention = member.mention() | ||
321 | user_id = member.id | ||
322 | if user_mention == '': | ||
323 | client.send_message(channel, 'Your shitty message has been rejected {}. That user does not exist.'.format(message.author.name)) | ||
324 | return | ||
325 | |||
326 | msg_text = byteify(' '.join(message_bits[msg_idx:])) | ||
327 | message = {'user_id': user_id, 'channel': channel.id, 'delivery_time': msg_datetime.strftime('%Y/%m/%d %H:%M:%S'), 'message': msg_text} | ||
328 | print("Message: %s" % message) | ||
329 | data[user_mention] = {} | ||
330 | data[user_mention][author.mention()] = message | ||
331 | jdata = json.dumps(data, ensure_ascii=False) | ||
332 | print("Data: %s" % data) | ||
333 | #test_ch = Object(channel.id) | ||
334 | #client.send_message(test_ch, 'Test Message {}.'.format(author)) | ||
335 | except Exception as e: | ||
336 | client.send_message(channel, 'Your shitty message has been rejected {}. {}'.format(author.name, e)) | ||
337 | return | ||
338 | open(deliveries_file, 'wb+').write(jdata.encode('utf8')) | ||
339 | if msg_datetime < datetime.datetime.now(): | ||
340 | client.send_message(channel, '{} your message will be delivered to {} as soon as they are available.'.format(author.name, user_mention)) | ||
341 | else: | ||
342 | client.send_message(channel, '{} your message will be delivered to {} {}.'.format(author.name, user_mention, human(msg_datetime))) | ||
343 | check_msg_queue() | ||
344 | return | ||
164 | 345 | ||
165 | if message.content.startswith('!addfortune'): | 346 | if message.content.startswith('!addfortune'): |
166 | try: | 347 | try: |
... | @@ -178,7 +359,8 @@ def on_message(message): | ... | @@ -178,7 +359,8 @@ def on_message(message): |
178 | return | 359 | return |
179 | 360 | ||
180 | open(fortune_file, 'wb+').write(jdata.encode('utf8')) | 361 | open(fortune_file, 'wb+').write(jdata.encode('utf8')) |
181 | client.send_message(message.channel, 'Your shitty fortune has been added {}.'.format(message.author.mention())) | 362 | client.send_message(message.channel, 'Your shitty fortune has been added {}.'.format(message.author.mention())) |
363 | |||
182 | if message.content.startswith('!fortune'): | 364 | if message.content.startswith('!fortune'): |
183 | data = None | 365 | data = None |
184 | try: | 366 | try: |
... | @@ -192,7 +374,7 @@ def on_message(message): | ... | @@ -192,7 +374,7 @@ def on_message(message): |
192 | client.send_message(message.channel, '{} Your fortune is... {}'.format(message.author.mention(), random.choice(data).encode('utf-8',errors='ignore'))) | 374 | client.send_message(message.channel, '{} Your fortune is... {}'.format(message.author.mention(), random.choice(data).encode('utf-8',errors='ignore'))) |
193 | 375 | ||
194 | if message.content.startswith('!secret'): | 376 | if message.content.startswith('!secret'): |
195 | client.send_message(message.channel, 'git gud {}!'.format(message.author.mention())) | 377 | client.send_message(message.channel, 'git gud {}! My source is here: http://git.savsoul.com/barry/discordbot'.format(message.author.mention())) |
196 | 378 | ||
197 | if message.content.startswith('!bemyirlwaifu'): | 379 | if message.content.startswith('!bemyirlwaifu'): |
198 | client.send_message(message.channel, 'http://orig13.deviantart.net/b25e/f/2014/175/3/d/no_waifu_no_laifu_by_imtheonenexttome-d7nsx3b.gif {}!'.format(message.author.mention())) | 380 | client.send_message(message.channel, 'http://orig13.deviantart.net/b25e/f/2014/175/3/d/no_waifu_no_laifu_by_imtheonenexttome-d7nsx3b.gif {}!'.format(message.author.mention())) | ... | ... |
1 | {"zan": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:06:08", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 02:06:08"}, "solidsteak": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:43:24", "prev_status": "online", "games_played": [248, null], "game_id": null, "afk_at": "2015/12/03 02:43:24"}, "sheik": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/02 22:02:12", "prev_status": "online", "games_played": [283, null], "game_id": null, "afk_at": "2015/12/02 22:02:12"}, "rae": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 00:51:10", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 00:51:10"}, "marion": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 01:45:24", "prev_status": "online", "games_played": [1, null], "game_id": null, "afk_at": "2015/12/02 08:30:16"}, "shyrith": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 21:56:19", "prev_status": "idle", "games_played": [1, 644], "game_id": 644, "afk_at": "2015/12/02 21:54:35"}, "rui": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 01:46:23", "prev_status": "idle", "games_played": [], "game_id": null, "afk_at": "2015/12/03 01:35:09"}, "goshzilla": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 01:52:54", "prev_status": "idle", "games_played": [3, null], "game_id": null, "afk_at": "2015/12/03 01:50:54"}, "scoops": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 01:50:36", "prev_status": "offline", "games_played": [347, null, 0], "game_id": 0, "afk_at": "2015/12/02 08:26:41"}, "arka": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 02:21:16", "prev_status": "offline", "games_played": [1, null], "game_id": 1, "afk_at": "2015/12/03 01:04:59"}, "wriggle": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 00:23:48", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/02 15:37:49"}, "tim": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/02 09:53:25", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/02 09:23:29"}, "charisma": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:31:10", "prev_status": "idle", "games_played": [313], "game_id": 313, "afk_at": "2015/12/03 00:08:06"}, "sig": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:37:00", "prev_status": "online", "games_played": [8, null, 7], "game_id": null, "afk_at": "2015/12/03 02:37:00"}, "mr. nelson": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:18:48", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 02:18:48"}, "skeletonhorn": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:36:39", "prev_status": "offline", "games_played": [], "game_id": null, "afk_at": "2015/12/03 00:36:39"}, "azia": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:17:32", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 02:17:32"}, "projectaria": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 23:06:07", "prev_status": "idle", "games_played": [1, null], "game_id": null, "afk_at": "2015/12/02 22:31:46"}, "moss": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 21:56:26", "prev_status": "idle", "games_played": [0, null], "game_id": 0, "afk_at": "2015/12/02 21:53:22"}, "yobi": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 01:27:37", "prev_status": "idle", "games_played": [3], "game_id": 3, "afk_at": "2015/12/03 01:18:27"}, "salt": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:55:01", "prev_status": "idle", "games_played": [466, 8, null, 680], "game_id": null, "afk_at": "2015/12/03 00:54:11"}, "grey": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 20:32:11", "prev_status": "idle", "games_played": [550, null, 1], "game_id": 1, "afk_at": "2015/12/02 20:31:15"}, "hellsbreath": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 02:05:59", "prev_status": "idle", "games_played": [326, null, 660, 680], "game_id": null, "afk_at": "2015/12/02 22:37:41"}, "green": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 20:04:13", "prev_status": "offline", "games_played": [4], "game_id": 4, "afk_at": "2015/12/02 09:36:27"}, "xorfos": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 02:46:27", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 02:46:27"}, "richter": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 02:24:25", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/02 20:18:33"}, "cae": {"status": "online", "is_afk": false, "status_change_at": "2015/12/02 23:07:33", "prev_status": "idle", "games_played": [], "game_id": null, "afk_at": "2015/12/02 23:06:53"}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | {"zan": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 08:48:38", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 08:48:38"}, "solidsteak": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 06:54:57", "prev_status": "online", "games_played": [248, null], "game_id": null, "afk_at": "2015/12/03 06:54:57"}, "apple": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 07:23:35", "prev_status": "offline", "games_played": [1], "game_id": 1, "afk_at": "2015/12/03 07:23:35"}, "sheik": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 05:57:13", "prev_status": "online", "games_played": [283, null], "game_id": null, "afk_at": "2015/12/03 05:57:13"}, "rae": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 00:51:10", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 00:51:10"}, "marion": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 05:14:48", "prev_status": "online", "games_played": [1, null], "game_id": null, "afk_at": "2015/12/02 08:30:16"}, "shyrith": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 08:10:52", "prev_status": "online", "games_played": [1, 644, null], "game_id": null, "afk_at": "2015/12/02 21:54:35"}, "rui": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 04:15:47", "prev_status": "offline", "games_played": [], "game_id": null, "afk_at": "2015/12/03 03:48:05"}, "goshzilla": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 08:55:14", "prev_status": "idle", "games_played": [3, null], "game_id": null, "afk_at": "2015/12/03 08:51:54"}, "scoops": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 01:50:36", "prev_status": "offline", "games_played": [347, null, 0], "game_id": null, "afk_at": "2015/12/02 08:26:41"}, "arka": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 08:41:53", "prev_status": "online", "games_played": [1, null, 313], "game_id": null, "afk_at": "2015/12/03 01:04:59"}, "wriggle": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 00:23:48", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/02 15:37:49"}, "tim": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 07:56:42", "prev_status": "idle", "games_played": [], "game_id": null, "afk_at": "2015/12/03 07:37:21"}, "charisma": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:31:10", "prev_status": "idle", "games_played": [313, null], "game_id": null, "afk_at": "2015/12/03 00:08:06"}, "sig": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 09:09:59", "mention": "<@104055037243707392>", "prev_status": "online", "game_id": null, "games_played": [8, null, 7, 466], "afk_at": "2015/12/03 05:32:12", "id": "104055037243707392"}, "mr. nelson": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 07:26:31", "prev_status": "idle", "games_played": [], "game_id": null, "afk_at": "2015/12/03 07:14:03"}, "skeletonhorn": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:36:39", "prev_status": "offline", "games_played": [], "game_id": null, "afk_at": "2015/12/03 00:36:39"}, "azia": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 09:05:37", "mention": "<@121404665727418368>", "prev_status": "idle", "game_id": null, "games_played": [], "afk_at": "2015/12/03 02:17:32", "id": "121404665727418368"}, "projectaria": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 09:09:11", "mention": "<@48146724769763328>", "prev_status": "idle", "games_played": [1, null], "game_id": null, "afk_at": "2015/12/03 09:08:48", "id": "48146724769763328"}, "moss": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 07:54:49", "prev_status": "online", "games_played": [0, null, 1], "game_id": null, "afk_at": "2015/12/03 07:54:49"}, "yobi": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 08:53:52", "prev_status": "online", "games_played": [3], "game_id": 3, "afk_at": "2015/12/03 08:53:52"}, "salt": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 00:55:01", "mention": "<@48140539459010560>", "prev_status": "idle", "games_played": [466, 8, null, 680], "game_id": null, "afk_at": "2015/12/03 00:54:11", "id": "48140539459010560"}, "grey": {"status": "idle", "mention": "<@48120346410221568>", "is_afk": true, "games_played": [550, null, 1], "game_id": 1, "afk_at": "2015/12/03 09:13:13", "status_change_at": "2015/12/03 09:13:13", "id": "48120346410221568", "prev_status": "online"}, "hellsbreath": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 08:59:43", "mention": "<@78767557628133376>", "prev_status": "offline", "games_played": [326, null, 660, 680], "game_id": null, "afk_at": "2015/12/03 04:34:54", "id": "78767557628133376"}, "green": {"status": "online", "is_afk": false, "status_change_at": "2015/12/03 08:47:15", "prev_status": "offline", "games_played": [4, null], "game_id": null, "afk_at": "2015/12/03 07:45:29"}, "xorfos": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 03:16:08", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 03:16:08"}, "richter": {"status": "offline", "is_afk": false, "status_change_at": "2015/12/03 02:24:25", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/02 20:18:33"}, "cae": {"status": "idle", "is_afk": true, "status_change_at": "2015/12/03 08:27:14", "prev_status": "online", "games_played": [], "game_id": null, "afk_at": "2015/12/03 08:27:14"}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or sign in to post a comment