mij-discord 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE +21 -0
  6. data/README.md +35 -0
  7. data/Rakefile +10 -0
  8. data/bin/console +7 -0
  9. data/bin/setup +6 -0
  10. data/lib/mij-discord.rb +56 -0
  11. data/lib/mij-discord/bot.rb +579 -0
  12. data/lib/mij-discord/cache.rb +298 -0
  13. data/lib/mij-discord/core/api.rb +228 -0
  14. data/lib/mij-discord/core/api/channel.rb +416 -0
  15. data/lib/mij-discord/core/api/invite.rb +43 -0
  16. data/lib/mij-discord/core/api/server.rb +465 -0
  17. data/lib/mij-discord/core/api/user.rb +144 -0
  18. data/lib/mij-discord/core/errors.rb +106 -0
  19. data/lib/mij-discord/core/gateway.rb +505 -0
  20. data/lib/mij-discord/data.rb +65 -0
  21. data/lib/mij-discord/data/application.rb +38 -0
  22. data/lib/mij-discord/data/channel.rb +404 -0
  23. data/lib/mij-discord/data/embed.rb +115 -0
  24. data/lib/mij-discord/data/emoji.rb +62 -0
  25. data/lib/mij-discord/data/invite.rb +87 -0
  26. data/lib/mij-discord/data/member.rb +174 -0
  27. data/lib/mij-discord/data/message.rb +206 -0
  28. data/lib/mij-discord/data/permissions.rb +121 -0
  29. data/lib/mij-discord/data/role.rb +99 -0
  30. data/lib/mij-discord/data/server.rb +359 -0
  31. data/lib/mij-discord/data/user.rb +173 -0
  32. data/lib/mij-discord/data/voice.rb +68 -0
  33. data/lib/mij-discord/events.rb +133 -0
  34. data/lib/mij-discord/events/basic.rb +80 -0
  35. data/lib/mij-discord/events/channel.rb +50 -0
  36. data/lib/mij-discord/events/member.rb +66 -0
  37. data/lib/mij-discord/events/message.rb +150 -0
  38. data/lib/mij-discord/events/server.rb +102 -0
  39. data/lib/mij-discord/logger.rb +20 -0
  40. data/lib/mij-discord/version.rb +5 -0
  41. data/mij-discord.gemspec +31 -0
  42. metadata +154 -0
@@ -0,0 +1,465 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MijDiscord::Core::API::Server
4
+ class << self
5
+ # Create a server
6
+ # https://discordapp.com/developers/docs/resources/guild#create-guild
7
+ def create(token, name, region = :'eu-central')
8
+ MijDiscord::Core::API.request(
9
+ :guilds,
10
+ nil,
11
+ :post,
12
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds",
13
+ { name: name, region: region.to_s }.to_json,
14
+ Authorization: token,
15
+ content_type: :json
16
+ )
17
+ end
18
+
19
+ # Get a server's data
20
+ # https://discordapp.com/developers/docs/resources/guild#get-guild
21
+ def resolve(token, server_id)
22
+ MijDiscord::Core::API.request(
23
+ :guilds_sid,
24
+ server_id,
25
+ :get,
26
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}",
27
+ Authorization: token
28
+ )
29
+ end
30
+
31
+ # Update a server
32
+ # https://discordapp.com/developers/docs/resources/guild#modify-guild
33
+ def update(token, server_id, name, region, icon, afk_channel_id, afk_timeout, reason = nil)
34
+ MijDiscord::Core::API.request(
35
+ :guilds_sid,
36
+ server_id,
37
+ :patch,
38
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}",
39
+ {
40
+ name: name, region: region, icon: icon,
41
+ afk_channel_id: afk_channel_id, afk_timeout: afk_timeout
42
+ }.delete_if {|_, v| v.nil? }.to_json,
43
+ Authorization: token,
44
+ content_type: :json,
45
+ 'X-Audit-Log-Reason': reason
46
+ )
47
+ end
48
+
49
+ # Transfer server ownership
50
+ def transfer_ownership(token, server_id, user_id, reason = nil)
51
+ MijDiscord::Core::API.request(
52
+ :guilds_sid,
53
+ server_id,
54
+ :patch,
55
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}",
56
+ { owner_id: user_id }.to_json,
57
+ Authorization: token,
58
+ content_type: :json,
59
+ 'X-Audit-Log-Reason': reason
60
+ )
61
+ end
62
+
63
+ # Delete a server
64
+ # https://discordapp.com/developers/docs/resources/guild#delete-guild
65
+ def delete(token, server_id)
66
+ MijDiscord::Core::API.request(
67
+ :guilds_sid,
68
+ server_id,
69
+ :delete,
70
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}",
71
+ Authorization: token
72
+ )
73
+ end
74
+
75
+ # Get a server's channels list
76
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-channels
77
+ def channels(token, server_id)
78
+ MijDiscord::Core::API.request(
79
+ :guilds_sid_channels,
80
+ server_id,
81
+ :get,
82
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/channels",
83
+ Authorization: token
84
+ )
85
+ end
86
+
87
+ # Create a channel
88
+ # https://discordapp.com/developers/docs/resources/guild#create-guild-channel
89
+ def create_channel(token, server_id, name, type, bitrate, user_limit, permissions, nsfw, reason = nil)
90
+ MijDiscord::Core::API.request(
91
+ :guilds_sid_channels,
92
+ server_id,
93
+ :post,
94
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/channels",
95
+ { name: name, type: type, bitrate: bitrate, user_limit: user_limit, permission_overwrites: permissions, nsfw: nsfw }.to_json,
96
+ Authorization: token,
97
+ content_type: :json,
98
+ 'X-Audit-Log-Reason': reason
99
+ )
100
+ end
101
+
102
+ # Update a channels position
103
+ # https://discordapp.com/developers/docs/resources/guild#modify-guild-channel
104
+ def update_channel_position(token, server_id, channel_id, position, reason = nil)
105
+ MijDiscord::Core::API.request(
106
+ :guilds_sid_channels,
107
+ server_id,
108
+ :patch,
109
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/channels",
110
+ { id: channel_id, position: position }.to_json,
111
+ Authorization: token,
112
+ content_type: :json,
113
+ 'X-Audit-Log-Reason': reason
114
+ )
115
+ end
116
+
117
+ # Get a member's data
118
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-member
119
+ def resolve_member(token, server_id, user_id)
120
+ MijDiscord::Core::API.request(
121
+ :guilds_sid_members_uid,
122
+ server_id,
123
+ :get,
124
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members/#{user_id}",
125
+ Authorization: token
126
+ )
127
+ end
128
+
129
+ # Gets members from the server
130
+ # https://discordapp.com/developers/docs/resources/guild#list-guild-members
131
+ def resolve_members(token, server_id, limit, after = nil)
132
+ MijDiscord::Core::API.request(
133
+ :guilds_sid_members,
134
+ server_id,
135
+ :get,
136
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members?limit=#{limit}#{"&after=#{after}" if after}",
137
+ Authorization: token
138
+ )
139
+ end
140
+
141
+ # Update a user properties
142
+ # https://discordapp.com/developers/docs/resources/guild#modify-guild-member
143
+ def update_member(token, server_id, user_id, reason = nil, nick: nil, roles: nil, mute: nil, deaf: nil, channel_id: nil)
144
+ MijDiscord::Core::API.request(
145
+ :guilds_sid_members_uid,
146
+ server_id,
147
+ :patch,
148
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members/#{user_id}",
149
+ { roles: roles, nick: nick, mute: mute, deaf: deaf, channel_id: channel_id }.delete_if {|_,v| v.nil? }.to_json,
150
+ Authorization: token,
151
+ content_type: :json,
152
+ 'X-Audit-Log-Reason': reason
153
+ )
154
+ end
155
+
156
+ # Remove user from server
157
+ # https://discordapp.com/developers/docs/resources/guild#remove-guild-member
158
+ def remove_member(token, server_id, user_id, reason = nil)
159
+ MijDiscord::Core::API.request(
160
+ :guilds_sid_members_uid,
161
+ server_id,
162
+ :delete,
163
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members/#{user_id}",
164
+ Authorization: token,
165
+ content_type: :json,
166
+ 'X-Audit-Log-Reason': reason
167
+ )
168
+ end
169
+
170
+ # Get a server's banned users
171
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-bans
172
+ def bans(token, server_id)
173
+ MijDiscord::Core::API.request(
174
+ :guilds_sid_bans,
175
+ server_id,
176
+ :get,
177
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/bans",
178
+ Authorization: token
179
+ )
180
+ end
181
+
182
+ # Ban a user from a server and delete their messages from the last message_days days
183
+ # https://discordapp.com/developers/docs/resources/guild#create-guild-ban
184
+ def ban_user(token, server_id, user_id, message_days, reason = nil)
185
+ MijDiscord::Core::API.request(
186
+ :guilds_sid_bans_uid,
187
+ server_id,
188
+ :put,
189
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/bans/#{user_id}?delete-message-days=#{message_days}",
190
+ nil,
191
+ Authorization: token,
192
+ 'X-Audit-Log-Reason': reason
193
+ )
194
+ end
195
+
196
+ # Unban a user from a server
197
+ # https://discordapp.com/developers/docs/resources/guild#remove-guild-ban
198
+ def unban_user(token, server_id, user_id, reason = nil)
199
+ MijDiscord::Core::API.request(
200
+ :guilds_sid_bans_uid,
201
+ server_id,
202
+ :delete,
203
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/bans/#{user_id}",
204
+ Authorization: token,
205
+ 'X-Audit-Log-Reason': reason
206
+ )
207
+ end
208
+
209
+ # Get server roles
210
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-roles
211
+ def roles(token, server_id)
212
+ MijDiscord::Core::API.request(
213
+ :guilds_sid_roles,
214
+ server_id,
215
+ :get,
216
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/roles",
217
+ Authorization: token
218
+ )
219
+ end
220
+
221
+ # Create a role (parameters such as name and colour if not set can be set by update_role afterwards)
222
+ # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
223
+ # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
224
+ # connecting to voice, speaking and voice activity (push-to-talk isn't mandatory)
225
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-roles
226
+ def create_role(token, server_id, name, color, hoist, mentionable, permissions, reason = nil)
227
+ MijDiscord::Core::API.request(
228
+ :guilds_sid_roles,
229
+ server_id,
230
+ :post,
231
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/roles",
232
+ { color: color, name: name, hoist: hoist, mentionable: mentionable, permissions: permissions }.to_json,
233
+ Authorization: token,
234
+ content_type: :json,
235
+ 'X-Audit-Log-Reason': reason
236
+ )
237
+ end
238
+
239
+ # Update a role
240
+ # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
241
+ # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
242
+ # connecting to voice, speaking and voice activity (push-to-talk isn't mandatory)
243
+ # https://discordapp.com/developers/docs/resources/guild#modify-guild-role
244
+ def update_role(token, server_id, role_id, name, color, hoist, mentionable, permissions, reason = nil)
245
+ MijDiscord::Core::API.request(
246
+ :guilds_sid_roles_rid,
247
+ server_id,
248
+ :patch,
249
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/roles/#{role_id}",
250
+ {
251
+ color: color, name: name, hoist: hoist,
252
+ mentionable: mentionable, permissions: permissions
253
+ }.delete_if {|_, v| v.nil? }.to_json,
254
+ Authorization: token,
255
+ content_type: :json,
256
+ 'X-Audit-Log-Reason': reason
257
+ )
258
+ end
259
+
260
+ # Delete a role
261
+ # https://discordapp.com/developers/docs/resources/guild#delete-guild-role
262
+ def delete_role(token, server_id, role_id, reason = nil)
263
+ MijDiscord::Core::API.request(
264
+ :guilds_sid_roles_rid,
265
+ server_id,
266
+ :delete,
267
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/roles/#{role_id}",
268
+ Authorization: token,
269
+ 'X-Audit-Log-Reason': reason
270
+ )
271
+ end
272
+
273
+ # Adds a single role to a member
274
+ # https://discordapp.com/developers/docs/resources/guild#add-guild-member-role
275
+ def add_member_role(token, server_id, user_id, role_id, reason = nil)
276
+ MijDiscord::Core::API.request(
277
+ :guilds_sid_members_uid_roles_rid,
278
+ server_id,
279
+ :put,
280
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members/#{user_id}/roles/#{role_id}",
281
+ nil,
282
+ Authorization: token,
283
+ 'X-Audit-Log-Reason': reason
284
+ )
285
+ end
286
+
287
+ # Removes a single role from a member
288
+ # https://discordapp.com/developers/docs/resources/guild#remove-guild-member-role
289
+ def remove_member_role(token, server_id, user_id, role_id, reason = nil)
290
+ MijDiscord::Core::API.request(
291
+ :guilds_sid_members_uid_roles_rid,
292
+ server_id,
293
+ :delete,
294
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/members/#{user_id}/roles/#{role_id}",
295
+ Authorization: token,
296
+ 'X-Audit-Log-Reason': reason
297
+ )
298
+ end
299
+
300
+ # Get server prune count
301
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-prune-count
302
+ def prune_count(token, server_id, days)
303
+ MijDiscord::Core::API.request(
304
+ :guilds_sid_prune,
305
+ server_id,
306
+ :get,
307
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/prune?days=#{days}",
308
+ Authorization: token
309
+ )
310
+ end
311
+
312
+ # Begin server prune
313
+ # https://discordapp.com/developers/docs/resources/guild#begin-guild-prune
314
+ def begin_prune(token, server_id, days, reason = nil)
315
+ MijDiscord::Core::API.request(
316
+ :guilds_sid_prune,
317
+ server_id,
318
+ :post,
319
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/prune",
320
+ { days: days }.to_json,
321
+ Authorization: token,
322
+ 'X-Audit-Log-Reason': reason
323
+ )
324
+ end
325
+
326
+ # Get invites from server
327
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-invites
328
+ def invites(token, server_id)
329
+ MijDiscord::Core::API.request(
330
+ :guilds_sid_invites,
331
+ server_id,
332
+ :get,
333
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/invites",
334
+ Authorization: token
335
+ )
336
+ end
337
+
338
+ # Get server integrations
339
+ # https://discordapp.com/developers/docs/resources/guild#get-guild-integrations
340
+ def integrations(token, server_id)
341
+ MijDiscord::Core::API.request(
342
+ :guilds_sid_integrations,
343
+ server_id,
344
+ :get,
345
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/integrations",
346
+ Authorization: token
347
+ )
348
+ end
349
+
350
+ # Create a server integration
351
+ # https://discordapp.com/developers/docs/resources/guild#create-guild-integration
352
+ def create_integration(token, server_id, type, id)
353
+ MijDiscord::Core::API.request(
354
+ :guilds_sid_integrations,
355
+ server_id,
356
+ :post,
357
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/integrations",
358
+ { type: type, id: id }.to_json,
359
+ Authorization: token
360
+ )
361
+ end
362
+
363
+ # Update integration from server
364
+ # https://discordapp.com/developers/docs/resources/guild#modify-guild-integration
365
+ def update_integration(token, server_id, integration_id, expire_behavior, expire_grace_period, enable_emoticons)
366
+ MijDiscord::Core::API.request(
367
+ :guilds_sid_integrations_iid,
368
+ server_id,
369
+ :patch,
370
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/integrations/#{integration_id}",
371
+ { expire_behavior: expire_behavior, expire_grace_period: expire_grace_period, enable_emoticons: enable_emoticons }.to_json,
372
+ Authorization: token,
373
+ content_type: :json
374
+ )
375
+ end
376
+
377
+ # Delete a server integration
378
+ # https://discordapp.com/developers/docs/resources/guild#delete-guild-integration
379
+ def delete_integration(token, server_id, integration_id)
380
+ MijDiscord::Core::API.request(
381
+ :guilds_sid_integrations_iid,
382
+ server_id,
383
+ :delete,
384
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/integrations/#{integration_id}",
385
+ Authorization: token
386
+ )
387
+ end
388
+
389
+ # Sync an integration
390
+ # https://discordapp.com/developers/docs/resources/guild#sync-guild-integration
391
+ def sync_integration(token, server_id, integration_id)
392
+ MijDiscord::Core::API.request(
393
+ :guilds_sid_integrations_iid_sync,
394
+ server_id,
395
+ :post,
396
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/integrations/#{integration_id}/sync",
397
+ nil,
398
+ Authorization: token
399
+ )
400
+ end
401
+
402
+ # Adds a custom emoji
403
+ def add_emoji(token, server_id, image, name, reason = nil)
404
+ MijDiscord::Core::API.request(
405
+ :guilds_sid_emojis,
406
+ server_id,
407
+ :post,
408
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/emojis",
409
+ { image: image, name: name }.to_json,
410
+ Authorization: token,
411
+ content_type: :json,
412
+ 'X-Audit-Log-Reason': reason
413
+ )
414
+ end
415
+
416
+ # Changes an emoji name
417
+ def edit_emoji(token, server_id, emoji_id, name, reason = nil)
418
+ MijDiscord::Core::API.request(
419
+ :guilds_sid_emojis_eid,
420
+ server_id,
421
+ :patch,
422
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/emojis/#{emoji_id}",
423
+ { name: name }.to_json,
424
+ Authorization: token,
425
+ content_type: :json,
426
+ 'X-Audit-Log-Reason': reason
427
+ )
428
+ end
429
+
430
+ # Deletes a custom emoji
431
+ def delete_emoji(token, server_id, emoji_id, reason = nil)
432
+ MijDiscord::Core::API.request(
433
+ :guilds_sid_emojis_eid,
434
+ server_id,
435
+ :delete,
436
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/emojis/#{emoji_id}",
437
+ Authorization: token,
438
+ 'X-Audit-Log-Reason': reason
439
+ )
440
+ end
441
+
442
+ # Available voice regions for this server
443
+ def regions(token, server_id)
444
+ MijDiscord::Core::API.request(
445
+ :guilds_sid_regions,
446
+ server_id,
447
+ :get,
448
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/regions",
449
+ Authorization: token
450
+ )
451
+ end
452
+
453
+ # Get server webhooks
454
+ # https://discordapp.com/developers/docs/resources/webhook#get-guild-webhooks
455
+ def webhooks(token, server_id)
456
+ MijDiscord::Core::API.request(
457
+ :guilds_sid_webhooks,
458
+ server_id,
459
+ :get,
460
+ "#{MijDiscord::Core::API::APIBASE_URL}/guilds/#{server_id}/webhooks",
461
+ Authorization: token
462
+ )
463
+ end
464
+ end
465
+ end