discordrb 3.4.3 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +44 -18
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -1
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -1
  5. data/.github/workflows/codeql.yml +65 -0
  6. data/.markdownlint.json +4 -0
  7. data/.rubocop.yml +8 -2
  8. data/CHANGELOG.md +390 -225
  9. data/LICENSE.txt +1 -1
  10. data/README.md +37 -25
  11. data/discordrb-webhooks.gemspec +4 -1
  12. data/discordrb.gemspec +9 -6
  13. data/lib/discordrb/api/application.rb +202 -0
  14. data/lib/discordrb/api/channel.rb +177 -11
  15. data/lib/discordrb/api/interaction.rb +54 -0
  16. data/lib/discordrb/api/invite.rb +2 -2
  17. data/lib/discordrb/api/server.rb +40 -19
  18. data/lib/discordrb/api/user.rb +8 -3
  19. data/lib/discordrb/api/webhook.rb +57 -0
  20. data/lib/discordrb/api.rb +19 -5
  21. data/lib/discordrb/bot.rb +317 -32
  22. data/lib/discordrb/cache.rb +27 -22
  23. data/lib/discordrb/commands/command_bot.rb +6 -4
  24. data/lib/discordrb/commands/container.rb +1 -1
  25. data/lib/discordrb/commands/parser.rb +2 -2
  26. data/lib/discordrb/commands/rate_limiter.rb +1 -1
  27. data/lib/discordrb/container.rb +132 -3
  28. data/lib/discordrb/data/attachment.rb +15 -0
  29. data/lib/discordrb/data/audit_logs.rb +3 -3
  30. data/lib/discordrb/data/channel.rb +167 -23
  31. data/lib/discordrb/data/component.rb +229 -0
  32. data/lib/discordrb/data/integration.rb +42 -3
  33. data/lib/discordrb/data/interaction.rb +800 -0
  34. data/lib/discordrb/data/invite.rb +1 -1
  35. data/lib/discordrb/data/member.rb +108 -33
  36. data/lib/discordrb/data/message.rb +99 -19
  37. data/lib/discordrb/data/overwrite.rb +13 -7
  38. data/lib/discordrb/data/role.rb +58 -1
  39. data/lib/discordrb/data/server.rb +82 -80
  40. data/lib/discordrb/data/user.rb +69 -9
  41. data/lib/discordrb/data/webhook.rb +97 -4
  42. data/lib/discordrb/data.rb +3 -0
  43. data/lib/discordrb/errors.rb +44 -3
  44. data/lib/discordrb/events/channels.rb +1 -1
  45. data/lib/discordrb/events/interactions.rb +482 -0
  46. data/lib/discordrb/events/message.rb +9 -6
  47. data/lib/discordrb/events/presence.rb +21 -14
  48. data/lib/discordrb/events/reactions.rb +0 -1
  49. data/lib/discordrb/events/threads.rb +96 -0
  50. data/lib/discordrb/gateway.rb +30 -17
  51. data/lib/discordrb/permissions.rb +59 -34
  52. data/lib/discordrb/version.rb +1 -1
  53. data/lib/discordrb/voice/encoder.rb +2 -2
  54. data/lib/discordrb/voice/network.rb +18 -7
  55. data/lib/discordrb/voice/sodium.rb +3 -1
  56. data/lib/discordrb/voice/voice_bot.rb +3 -3
  57. data/lib/discordrb/webhooks.rb +2 -0
  58. data/lib/discordrb.rb +37 -4
  59. metadata +48 -14
  60. data/.codeclimate.yml +0 -16
  61. data/.travis.yml +0 -32
  62. data/bin/travis_build_docs.sh +0 -17
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2020 meew0
3
+ Copyright (c) 2015-2023 meew0
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,24 +1,25 @@
1
+ # discordrb
2
+
1
3
  [![Gem](https://img.shields.io/gem/v/discordrb.svg)](https://rubygems.org/gems/discordrb)
2
4
  [![Gem](https://img.shields.io/gem/dt/discordrb.svg)](https://rubygems.org/gems/discordrb)
3
5
  [![CircleCI](https://circleci.com/gh/shardlab/discordrb.svg?style=svg)](https://circleci.com/gh/shardlab/discordrb)
4
- [![Inline docs](http://inch-ci.org/github/shardlab/discordrb.svg?branch=main)](http://inch-ci.org/github/shardlab/discordrb)
6
+ [![Inline docs](https://inch-ci.org/github/shardlab/discordrb.svg?branch=main)](https://drb.shardlab.dev/v3.4.0/)
5
7
  [![Join Discord](https://img.shields.io/badge/discord-join-7289DA.svg)](https://discord.gg/cyK3Hjm)
6
- # discordrb
7
8
 
8
9
  An implementation of the [Discord](https://discord.com/) API using Ruby.
9
10
 
10
11
  ## Quick links to sections
11
12
 
12
- * [Introduction](https://github.com/shardlab/discordrb#introduction)
13
- * [Dependencies](https://github.com/shardlab/discordrb#dependencies)
14
- * [Installation](https://github.com/shardlab/discordrb#installation)
15
- * [Usage](https://github.com/shardlab/discordrb#usage)
16
- * [Webhooks Client](https://github.com/shardlab/discordrb#webhooks-client)
17
- * [Support](https://github.com/shardlab/discordrb#support)
18
- * [Development](https://github.com/shardlab/discordrb#development), [Contributing](https://github.com/shardlab/discordrb#contributing)
19
- * [License](https://github.com/shardlab/discordrb#license)
13
+ - [Introduction](https://github.com/shardlab/discordrb#introduction)
14
+ - [Dependencies](https://github.com/shardlab/discordrb#dependencies)
15
+ - [Installation](https://github.com/shardlab/discordrb#installation)
16
+ - [Usage](https://github.com/shardlab/discordrb#usage)
17
+ - [Webhooks Client](https://github.com/shardlab/discordrb#webhooks-client)
18
+ - [Support](https://github.com/shardlab/discordrb#support)
19
+ - [Development](https://github.com/shardlab/discordrb#development), [Contributing](https://github.com/shardlab/discordrb#contributing)
20
+ - [License](https://github.com/shardlab/discordrb#license)
20
21
 
21
- See also: [Documentation](https://www.rubydoc.info/gems/discordrb), [Tutorials](https://github.com/shardlab/discordrb/wiki)
22
+ See also: [Documentation](https://drb.shardlab.dev/v3.4.0/), [Tutorials](https://github.com/shardlab/discordrb/wiki)
22
23
 
23
24
  ## Introduction
24
25
 
@@ -43,15 +44,16 @@ If you enjoy using the library, consider getting involved with the community to
43
44
 
44
45
  ## Dependencies
45
46
 
46
- * Ruby >= 2.5 supported
47
+ * Ruby >= 2.7 supported
47
48
  * An installed build system for native extensions (on Windows, make sure you download the "Ruby+Devkit" version of [RubyInstaller](https://rubyinstaller.org/downloads/))
48
49
 
49
50
  ### Voice dependencies
50
51
 
51
52
  This section only applies to you if you want to use voice functionality.
52
- * [libsodium](https://github.com/shardlab/discordrb/wiki/Installing-libsodium)
53
- * A compiled libopus distribution for your system, anywhere the script can find it. See [here](https://github.com/shardlab/discordrb/wiki/Installing-libopus) for installation instructions.
54
- * [FFmpeg](https://www.ffmpeg.org/download.html) installed and in your PATH
53
+
54
+ - [libsodium](https://github.com/shardlab/discordrb/wiki/Installing-libsodium)
55
+ - A compiled libopus distribution for your system, anywhere the script can find it. See [here](https://github.com/shardlab/discordrb/wiki/Installing-libopus) for installation instructions.
56
+ - [FFmpeg](https://www.ffmpeg.org/download.html) installed and in your PATH
55
57
 
56
58
  ## Installation
57
59
 
@@ -59,15 +61,19 @@ This section only applies to you if you want to use voice functionality.
59
61
 
60
62
  Using [Bundler](https://bundler.io/#getting-started), you can add discordrb to your Gemfile:
61
63
 
62
- gem 'discordrb'
64
+ ```ruby
65
+ gem 'discordrb'
66
+ ```
63
67
 
64
68
  And then install via `bundle install`.
65
69
 
66
- Run the [ping example](https://github.com/shardlab/discordrb/blob/master/examples/ping.rb) to verify that the installation works (make sure to replace the token and client ID in there with your bots'!):
70
+ Run the [ping example](https://github.com/shardlab/discordrb/blob/main/examples/ping.rb) to verify that the installation works (make sure to replace the token and client ID in there with your bots'!):
67
71
 
68
72
  To run the bot while using bundler:
69
73
 
70
- bundle exec ruby ping.rb
74
+ ```sh
75
+ bundle exec ruby ping.rb
76
+ ```
71
77
 
72
78
  ### With Gem
73
79
 
@@ -75,21 +81,27 @@ Alternatively, while Bundler is the recommended option, you can also install dis
75
81
 
76
82
  #### Linux / macOS
77
83
 
78
- gem install discordrb
84
+ ```sh
85
+ gem install discordrb
86
+ ```
79
87
 
80
88
  #### Windows
81
89
 
82
90
  > **Make sure you have the DevKit installed! See the [Dependencies](https://github.com/shardlab/discordrb#dependencies) section)**
83
91
 
84
- gem install discordrb --platform=ruby
92
+ ```sh
93
+ gem install discordrb --platform=ruby
94
+ ```
85
95
 
86
96
  To run the bot:
87
97
 
88
- ruby ping.rb
98
+ ```sh
99
+ ruby ping.rb
100
+ ```
89
101
 
90
102
  ### Installation Troubleshooting
91
103
 
92
- See https://github.com/shardlab/discordrb/wiki/FAQ#installation for a list of common problems and solutions when installing `discordrb`.
104
+ See <https://github.com/shardlab/discordrb/wiki/FAQ#installation> for a list of common problems and solutions when installing `discordrb`.
93
105
 
94
106
  ## Usage
95
107
 
@@ -109,7 +121,7 @@ bot.run
109
121
 
110
122
  This bot responds to every "Ping!" with a "Pong!".
111
123
 
112
- See [additional examples here](https://github.com/shardlab/discordrb/tree/master/examples).
124
+ See [additional examples here](https://github.com/shardlab/discordrb/tree/main/examples).
113
125
 
114
126
  You can find examples of projects that use discordrb by [searching for the discordrb topic on GitHub](https://github.com/topics/discordrb).
115
127
 
@@ -119,7 +131,7 @@ If you've made an open source project on GitHub that uses discordrb, consider ad
119
131
 
120
132
  Also included is a webhooks client, which can be used as a separate gem `discordrb-webhooks`. This special client can be used to form requests to Discord webhook URLs in a high-level manner.
121
133
 
122
- - [`discordrb-webhooks` documentation](https://www.rubydoc.info/gems/discordrb-webhooks)
134
+ - [`discordrb-webhooks` documentation](https://drb.shardlab.dev/v3.4.0/Discordrb/Webhooks.html)
123
135
  - [More information about webhooks](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks)
124
136
  - [Embed visualizer tool](https://leovoel.github.io/embed-visualizer/) - Includes a discordrb code generator for forming embeds
125
137
 
@@ -153,7 +165,7 @@ If you need help or have a question, you can:
153
165
  ## Contributing
154
166
 
155
167
  Thank you for your interest in contributing!
156
- Bug reports and pull requests are welcome on GitHub at https://github.com/shardlab/discordrb.
168
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/shardlab/discordrb>.
157
169
 
158
170
  In general, we recommend starting by discussing what you would like to contribute in the [Discord channel](https://discord.gg/cyK3Hjm).
159
171
  There are usually a handful of people working on things for the library, and what you're looking for may already be on the way.
@@ -22,5 +22,8 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'rest-client', '>= 2.0.0'
24
24
 
25
- spec.required_ruby_version = '>= 2.5'
25
+ spec.required_ruby_version = '>= 2.7'
26
+ spec.metadata = {
27
+ 'rubygems_mfa_required' => 'true'
28
+ }
26
29
  end
data/discordrb.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.bindir = 'exe'
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.metadata = {
22
- 'changelog_uri' => 'https://github.com/shardlab/discordrb/blob/master/CHANGELOG.md'
22
+ 'changelog_uri' => 'https://github.com/shardlab/discordrb/blob/main/CHANGELOG.md',
23
+ 'rubygems_mfa_required' => 'true'
23
24
  }
24
25
  spec.require_paths = ['lib']
25
26
 
@@ -28,17 +29,19 @@ Gem::Specification.new do |spec|
28
29
  spec.add_dependency 'rest-client', '>= 2.0.0'
29
30
  spec.add_dependency 'websocket-client-simple', '>= 0.3.0'
30
31
 
31
- spec.add_dependency 'discordrb-webhooks', '~> 3.4.3'
32
+ spec.add_dependency 'discordrb-webhooks', '~> 3.5.0'
32
33
 
33
- spec.required_ruby_version = '>= 2.5'
34
+ spec.required_ruby_version = '>= 2.7'
34
35
 
35
36
  spec.add_development_dependency 'bundler', '>= 1.10', '< 3'
36
37
  spec.add_development_dependency 'rake', '~> 13.0'
37
38
  spec.add_development_dependency 'redcarpet', '~> 3.5.0' # YARD markdown formatting
38
- spec.add_development_dependency 'rspec', '~> 3.10.0'
39
+ spec.add_development_dependency 'rspec', '~> 3.11.0'
40
+ spec.add_development_dependency 'rspec_junit_formatter', '~> 0.5.1'
39
41
  spec.add_development_dependency 'rspec-prof', '~> 0.0.7'
40
- spec.add_development_dependency 'rubocop', '~> 1.4.0'
42
+ spec.add_development_dependency 'rubocop', '~> 1.36.0'
41
43
  spec.add_development_dependency 'rubocop-performance', '~> 1.0'
42
- spec.add_development_dependency 'simplecov', '~> 0.19.0'
44
+ spec.add_development_dependency 'rubocop-rake', '~> 0.6.0'
45
+ spec.add_development_dependency 'simplecov', '~> 0.21.0'
43
46
  spec.add_development_dependency 'yard', '~> 0.9.9'
44
47
  end
@@ -0,0 +1,202 @@
1
+ # frozen_string_literal: true
2
+
3
+ # API calls for slash commands.
4
+ module Discordrb::API::Application
5
+ module_function
6
+
7
+ # Get a list of global application commands.
8
+ # https://discord.com/developers/docs/interactions/slash-commands#get-global-application-commands
9
+ def get_global_commands(token, application_id)
10
+ Discordrb::API.request(
11
+ :applications_aid_commands,
12
+ nil,
13
+ :get,
14
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands",
15
+ Authorization: token
16
+ )
17
+ end
18
+
19
+ # Get a global application command by ID.
20
+ # https://discord.com/developers/docs/interactions/slash-commands#get-global-application-command
21
+ def get_global_command(token, application_id, command_id)
22
+ Discordrb::API.request(
23
+ :applications_aid_commands_cid,
24
+ nil,
25
+ :get,
26
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands/#{command_id}",
27
+ Authorization: token
28
+ )
29
+ end
30
+
31
+ # Create a global application command.
32
+ # https://discord.com/developers/docs/interactions/slash-commands#create-global-application-command
33
+ def create_global_command(token, application_id, name, description, options = [], default_permission = nil, type = 1)
34
+ Discordrb::API.request(
35
+ :applications_aid_commands,
36
+ nil,
37
+ :post,
38
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands",
39
+ { name: name, description: description, options: options, default_permission: default_permission, type: type }.to_json,
40
+ Authorization: token,
41
+ content_type: :json
42
+ )
43
+ end
44
+
45
+ # Edit a global application command.
46
+ # https://discord.com/developers/docs/interactions/slash-commands#edit-global-application-command
47
+ def edit_global_command(token, application_id, command_id, name = nil, description = nil, options = nil, default_permission = nil, type = 1)
48
+ Discordrb::API.request(
49
+ :applications_aid_commands_cid,
50
+ nil,
51
+ :patch,
52
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands/#{command_id}",
53
+ { name: name, description: description, options: options, default_permission: default_permission, type: type }.compact.to_json,
54
+ Authorization: token,
55
+ content_type: :json
56
+ )
57
+ end
58
+
59
+ # Delete a global application command.
60
+ # https://discord.com/developers/docs/interactions/slash-commands#delete-global-application-command
61
+ def delete_global_command(token, application_id, command_id)
62
+ Discordrb::API.request(
63
+ :applications_aid_commands_cid,
64
+ nil,
65
+ :delete,
66
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands/#{command_id}",
67
+ Authorization: token
68
+ )
69
+ end
70
+
71
+ # Set global application commands in bulk.
72
+ # https://discord.com/developers/docs/interactions/slash-commands#bulk-overwrite-global-application-commands
73
+ def bulk_overwrite_global_commands(token, application_id, commands)
74
+ Discordrb::API.request(
75
+ :applications_aid_commands,
76
+ nil,
77
+ :put,
78
+ "#{Discordrb::API.api_base}/applications/#{application_id}/commands",
79
+ commands.to_json,
80
+ Authorization: token,
81
+ content_type: :json
82
+ )
83
+ end
84
+
85
+ # Get a guild's commands for an application.
86
+ # https://discord.com/developers/docs/interactions/slash-commands#get-guild-application-commands
87
+ def get_guild_commands(token, application_id, guild_id)
88
+ Discordrb::API.request(
89
+ :applications_aid_guilds_gid_commands,
90
+ guild_id,
91
+ :get,
92
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands",
93
+ Authorization: token
94
+ )
95
+ end
96
+
97
+ # Get a guild command by ID.
98
+ # https://discord.com/developers/docs/interactions/slash-commands#get-guild-application-command
99
+ def get_guild_command(token, application_id, guild_id, command_id)
100
+ Discordrb::API.request(
101
+ :applications_aid_guilds_gid_commands_cid,
102
+ guild_id,
103
+ :get,
104
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}",
105
+ Authorization: token
106
+ )
107
+ end
108
+
109
+ # Create an application command for a guild.
110
+ # https://discord.com/developers/docs/interactions/slash-commands#create-guild-application-command
111
+ def create_guild_command(token, application_id, guild_id, name, description, options = nil, default_permission = nil, type = 1)
112
+ Discordrb::API.request(
113
+ :applications_aid_guilds_gid_commands,
114
+ guild_id,
115
+ :post,
116
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands",
117
+ { name: name, description: description, options: options, default_permission: default_permission, type: type }.to_json,
118
+ Authorization: token,
119
+ content_type: :json
120
+ )
121
+ end
122
+
123
+ # Edit an application command for a guild.
124
+ # https://discord.com/developers/docs/interactions/slash-commands#edit-guild-application-command
125
+ def edit_guild_command(token, application_id, guild_id, command_id, name = nil, description = nil, options = nil, default_permission = nil, type = 1)
126
+ Discordrb::API.request(
127
+ :applications_aid_guilds_gid_commands_cid,
128
+ guild_id,
129
+ :patch,
130
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}",
131
+ { name: name, description: description, options: options, default_permission: default_permission, type: type }.compact.to_json,
132
+ Authorization: token,
133
+ content_type: :json
134
+ )
135
+ end
136
+
137
+ # Delete an application command for a guild.
138
+ # https://discord.com/developers/docs/interactions/slash-commands#delete-guild-application-command
139
+ def delete_guild_command(token, application_id, guild_id, command_id)
140
+ Discordrb::API.request(
141
+ :applications_aid_guilds_gid_commands_cid,
142
+ guild_id,
143
+ :delete,
144
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}",
145
+ Authorization: token
146
+ )
147
+ end
148
+
149
+ # Set guild commands in bulk.
150
+ # https://discord.com/developers/docs/interactions/slash-commands#bulk-overwrite-guild-application-commands
151
+ def bulk_overwrite_guild_commands(token, application_id, guild_id, commands)
152
+ Discordrb::API.request(
153
+ :applications_aid_guilds_gid_commands,
154
+ guild_id,
155
+ :put,
156
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands",
157
+ commands.to_json,
158
+ Authorization: token,
159
+ content_type: :json
160
+ )
161
+ end
162
+
163
+ # Get the permissions for a specific guild command.
164
+ # https://discord.com/developers/docs/interactions/slash-commands#get-application-command-permissions
165
+ def get_guild_command_permissions(token, application_id, guild_id)
166
+ Discordrb::API.request(
167
+ :applications_aid_guilds_gid_commands_permissions,
168
+ guild_id,
169
+ :get,
170
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/permissions",
171
+ Authorization: token
172
+ )
173
+ end
174
+
175
+ # Edit the permissions for a specific guild command.
176
+ # https://discord.com/developers/docs/interactions/slash-commands#edit-application-command-permissions
177
+ def edit_guild_command_permissions(token, application_id, guild_id, command_id, permissions)
178
+ Discordrb::API.request(
179
+ :applications_aid_guilds_gid_commands_cid_permissions,
180
+ guild_id,
181
+ :put,
182
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}/permissions",
183
+ { permissions: permissions }.to_json,
184
+ Authorization: token,
185
+ content_type: :json
186
+ )
187
+ end
188
+
189
+ # Edit permissions for all commands in a guild.
190
+ # https://discord.com/developers/docs/interactions/slash-commands#batch-edit-application-command-permissions
191
+ def batch_edit_command_permissions(token, application_id, guild_id, permissions)
192
+ Discordrb::API.request(
193
+ :applications_aid_guilds_gid_commands_cid_permissions,
194
+ guild_id,
195
+ :put,
196
+ "#{Discordrb::API.api_base}/applications/#{application_id}/guilds/#{guild_id}/commands/permissions",
197
+ permissions.to_json,
198
+ Authorization: token,
199
+ content_type: :json
200
+ )
201
+ end
202
+ end