mij-discord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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