lib_discord 0.1.0.pre2 → 0.1.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.
- checksums.yaml +4 -4
- data/lib/lib_discord/application.rb +43 -0
- data/lib/lib_discord/application_command.rb +341 -0
- data/lib/lib_discord/application_role_connection_metadata.rb +52 -0
- data/lib/lib_discord/audit_log.rb +36 -0
- data/lib/lib_discord/auto_moderation.rb +106 -0
- data/lib/lib_discord/channel.rb +716 -0
- data/lib/lib_discord/client.rb +124 -14
- data/lib/lib_discord/emoji.rb +106 -0
- data/lib/lib_discord/errors.rb +24 -0
- data/lib/lib_discord/guild.rb +830 -0
- data/lib/lib_discord/guild_scheduled_event.rb +133 -0
- data/lib/lib_discord/guild_template.rb +128 -0
- data/lib/lib_discord/interaction.rb +163 -0
- data/lib/lib_discord/invite.rb +47 -0
- data/lib/lib_discord/mappers/application_command_option_types.rb +22 -0
- data/lib/lib_discord/mappers/application_command_permission_types.rb +14 -0
- data/lib/lib_discord/mappers/application_command_types.rb +14 -0
- data/lib/lib_discord/mappers/application_integration_types.rb +13 -0
- data/lib/lib_discord/mappers/application_role_connection_metadata_types.rb +19 -0
- data/lib/lib_discord/mappers/audit_log_events.rb +67 -0
- data/lib/lib_discord/mappers/auto_moderation_action_types.rb +14 -0
- data/lib/lib_discord/mappers/auto_moderation_event_types.rb +12 -0
- data/lib/lib_discord/mappers/auto_moderation_keyword_preset_types.rb +14 -0
- data/lib/lib_discord/mappers/auto_moderation_trigger_types.rb +15 -0
- data/lib/lib_discord/mappers/channel_forum_layout_types.rb +14 -0
- data/lib/lib_discord/mappers/channel_message_activity_types.rb +15 -0
- data/lib/lib_discord/mappers/channel_message_types.rb +42 -0
- data/lib/lib_discord/mappers/channel_sort_order_types.rb +13 -0
- data/lib/lib_discord/mappers/channel_types.rb +24 -0
- data/lib/lib_discord/mappers/channel_video_quality_modes.rb +13 -0
- data/lib/lib_discord/mappers/guild_default_message_notification_levels.rb +13 -0
- data/lib/lib_discord/mappers/guild_explicit_content_filter_levels.rb +14 -0
- data/lib/lib_discord/mappers/guild_integration_expire_behaviors.rb +13 -0
- data/lib/lib_discord/mappers/guild_mfa_levels.rb +13 -0
- data/lib/lib_discord/mappers/guild_nsfw_levels.rb +15 -0
- data/lib/lib_discord/mappers/guild_onboarding_modes.rb +13 -0
- data/lib/lib_discord/mappers/guild_premium_tiers.rb +15 -0
- data/lib/lib_discord/mappers/guild_prompt_types.rb +13 -0
- data/lib/lib_discord/mappers/guild_scheduled_event_entity_types.rb +14 -0
- data/lib/lib_discord/mappers/guild_scheduled_event_privacy_levels.rb +12 -0
- data/lib/lib_discord/mappers/guild_scheduled_event_statuses.rb +15 -0
- data/lib/lib_discord/mappers/guild_verification_levels.rb +16 -0
- data/lib/lib_discord/mappers/interaction_callback_types.rb +19 -0
- data/lib/lib_discord/mappers/interaction_context_types.rb +14 -0
- data/lib/lib_discord/mappers/interaction_types.rb +16 -0
- data/lib/lib_discord/mappers/invite_target_types.rb +13 -0
- data/lib/lib_discord/mappers/message_component_button_styles.rb +16 -0
- data/lib/lib_discord/mappers/message_component_text_input_styles.rb +13 -0
- data/lib/lib_discord/mappers/message_component_types.rb +19 -0
- data/lib/lib_discord/mappers/poll_layout_types.rb +12 -0
- data/lib/lib_discord/mappers/stage_instance_privacy_levels.rb +13 -0
- data/lib/lib_discord/mappers/sticker_format_types.rb +15 -0
- data/lib/lib_discord/mappers/sticker_types.rb +13 -0
- data/lib/lib_discord/mappers/user_premium_types.rb +15 -0
- data/lib/lib_discord/mappers/user_visibility_types.rb +13 -0
- data/lib/lib_discord/mappers/webhooks_types.rb +14 -0
- data/lib/lib_discord/mappers.rb +87 -0
- data/lib/lib_discord/poll.rb +62 -0
- data/lib/lib_discord/resource.rb +91 -21
- data/lib/lib_discord/response.rb +39 -7
- data/lib/lib_discord/stage_instance.rb +79 -0
- data/lib/lib_discord/sticker.rb +132 -0
- data/lib/lib_discord/types.rb +35 -11
- data/lib/lib_discord/urls.rb +20 -12
- data/lib/lib_discord/user.rb +174 -0
- data/lib/lib_discord/version.rb +5 -1
- data/lib/lib_discord/voice.rb +29 -0
- data/lib/lib_discord/webhook.rb +299 -0
- data/lib/lib_discord.rb +5 -0
- metadata +77 -20
- data/lib/lib_discord/resources/application.rb +0 -15
- data/lib/lib_discord/resources/application_command.rb +0 -71
- data/lib/lib_discord/resources/application_role_connection_metadata.rb +0 -15
- data/lib/lib_discord/resources/audit_log.rb +0 -11
- data/lib/lib_discord/resources/auto_moderation.rb +0 -27
- data/lib/lib_discord/resources/channel.rb +0 -168
- data/lib/lib_discord/resources/emoji.rb +0 -27
- data/lib/lib_discord/resources/guild.rb +0 -196
- data/lib/lib_discord/resources/guild_scheduled_event.rb +0 -31
- data/lib/lib_discord/resources/guild_template.rb +0 -35
- data/lib/lib_discord/resources/interaction.rb +0 -39
- data/lib/lib_discord/resources/invite.rb +0 -15
- data/lib/lib_discord/resources/stage_instance.rb +0 -23
- data/lib/lib_discord/resources/sticker.rb +0 -35
- data/lib/lib_discord/resources/user.rb +0 -51
- data/lib/lib_discord/resources/voice.rb +0 -11
- data/lib/lib_discord/resources/webhook.rb +0 -67
- data/lib/lib_discord/resources.rb +0 -19
data/lib/lib_discord/client.rb
CHANGED
|
@@ -1,40 +1,111 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "dry-container"
|
|
4
|
-
require "forwardable"
|
|
5
4
|
require "logger"
|
|
6
5
|
|
|
7
|
-
require "lib_discord/
|
|
6
|
+
require "lib_discord/application"
|
|
7
|
+
require "lib_discord/application_command"
|
|
8
|
+
require "lib_discord/application_role_connection_metadata"
|
|
9
|
+
require "lib_discord/audit_log"
|
|
10
|
+
require "lib_discord/auto_moderation"
|
|
11
|
+
require "lib_discord/channel"
|
|
12
|
+
require "lib_discord/emoji"
|
|
13
|
+
require "lib_discord/errors"
|
|
14
|
+
require "lib_discord/guild"
|
|
15
|
+
require "lib_discord/guild_scheduled_event"
|
|
16
|
+
require "lib_discord/guild_template"
|
|
17
|
+
require "lib_discord/interaction"
|
|
18
|
+
require "lib_discord/invite"
|
|
19
|
+
require "lib_discord/poll"
|
|
20
|
+
require "lib_discord/stage_instance"
|
|
21
|
+
require "lib_discord/sticker"
|
|
8
22
|
require "lib_discord/types"
|
|
9
23
|
require "lib_discord/urls"
|
|
24
|
+
require "lib_discord/user"
|
|
10
25
|
require "lib_discord/version"
|
|
26
|
+
require "lib_discord/voice"
|
|
27
|
+
require "lib_discord/webhook"
|
|
11
28
|
|
|
12
29
|
module LibDiscord
|
|
30
|
+
##
|
|
31
|
+
# This class is the entry point in utilizing +lib_discord+ to access
|
|
32
|
+
# Discord's API. Initialize a client and cache it for as long as you need to
|
|
33
|
+
# make requests to Discord.
|
|
34
|
+
#
|
|
35
|
+
# require "lib_discord"
|
|
36
|
+
# client = LibDiscord::Client.new("Bot my.amazing.token")
|
|
13
37
|
class Client
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
38
|
+
##
|
|
39
|
+
# Initialize a +LibDiscord::Client+ for making requests to Discord's
|
|
40
|
+
# RESTful web API.
|
|
41
|
+
#
|
|
42
|
+
# @param auth_header [#to_s] Authorization header to be used in
|
|
43
|
+
# communication with Discord. In the format +Bot <token>+ or +Bearer
|
|
44
|
+
# <token>+.
|
|
45
|
+
# @param base_url [#to_s] Base URL to use in requests to Discord.
|
|
46
|
+
# @param user_agent [#to_s] User-Agent header to use in requests to
|
|
47
|
+
# Discord.
|
|
48
|
+
# @param logger [Logger] Logger to use for output messages. If not
|
|
49
|
+
# provided, a basic INFO-level +$stdout+ logger is created for internal use
|
|
50
|
+
# ( +l = Logger.new($stdout); l.level = :info+ )
|
|
51
|
+
#
|
|
52
|
+
# @return [self]
|
|
53
|
+
#
|
|
54
|
+
# @raise [ConstraintError] if parameters for +auth_header+,
|
|
55
|
+
# +base_url+, or +user_agent+ do not respond to #to_s.
|
|
56
|
+
# @raise [ConstraintError] if the parameter for +logger+ is not
|
|
57
|
+
# an instance of Logger, or an instance that inherits from Logger.
|
|
58
|
+
#
|
|
59
|
+
# @example hook in your own logger and app-specific user-agent
|
|
60
|
+
# client = LibDiscord::Client.new(
|
|
61
|
+
# "Bot my.token",
|
|
62
|
+
# user_agent: "MyApp (https://example.myapp.com, 1.2.3)",
|
|
63
|
+
# logger: my_logger
|
|
64
|
+
# )
|
|
65
|
+
# @example I don't want any messages going to +stdout+.
|
|
66
|
+
# client = LibDiscord::Client.new(
|
|
67
|
+
# "Bot my.token",
|
|
68
|
+
# logger: Logger.new("/dev/null")
|
|
69
|
+
# )
|
|
70
|
+
#
|
|
71
|
+
# @see https://discord.com/developers/docs/reference#authentication Discord
|
|
72
|
+
# documentation "Authentication"
|
|
73
|
+
# @see https://discord.com/developers/docs/reference#user-agent Discord
|
|
74
|
+
# documentation "User Agent"
|
|
75
|
+
def initialize(
|
|
76
|
+
auth_header,
|
|
77
|
+
base_url: "https://discord.com/api/v10",
|
|
78
|
+
user_agent: "LibDiscord (#{LibDiscord::PROJECT_URL}, #{LibDiscord.version})",
|
|
79
|
+
logger: nil
|
|
80
|
+
)
|
|
81
|
+
auth_header = Types::Coercible::String[auth_header]
|
|
82
|
+
base_url = Types::Coercible::String[base_url]
|
|
83
|
+
user_agent = Types::Coercible::String[user_agent]
|
|
20
84
|
|
|
21
85
|
unless logger
|
|
22
86
|
logger = Logger.new($stdout)
|
|
23
87
|
logger.level = :info
|
|
24
88
|
end
|
|
25
89
|
|
|
90
|
+
logger = Types::Logger[logger]
|
|
91
|
+
|
|
26
92
|
@container = Dry::Container.new
|
|
27
93
|
|
|
28
94
|
@container.register("application") do
|
|
29
95
|
Application.new(auth_header, base_url, user_agent, logger)
|
|
30
96
|
end
|
|
31
97
|
|
|
32
|
-
@container.register("
|
|
98
|
+
@container.register("application_command") do
|
|
33
99
|
ApplicationCommand.new(auth_header, base_url, user_agent, logger)
|
|
34
100
|
end
|
|
35
101
|
|
|
36
|
-
@container.register("
|
|
37
|
-
ApplicationRoleConnectionMetadata.new(
|
|
102
|
+
@container.register("application_role_connection_metadata") do
|
|
103
|
+
ApplicationRoleConnectionMetadata.new(
|
|
104
|
+
auth_header,
|
|
105
|
+
base_url,
|
|
106
|
+
user_agent,
|
|
107
|
+
logger
|
|
108
|
+
)
|
|
38
109
|
end
|
|
39
110
|
|
|
40
111
|
@container.register("audit_log") do
|
|
@@ -57,11 +128,11 @@ module LibDiscord
|
|
|
57
128
|
Guild.new(auth_header, base_url, user_agent, logger)
|
|
58
129
|
end
|
|
59
130
|
|
|
60
|
-
@container.register("
|
|
131
|
+
@container.register("guild_scheduled_event") do
|
|
61
132
|
GuildScheduledEvent.new(auth_header, base_url, user_agent, logger)
|
|
62
133
|
end
|
|
63
134
|
|
|
64
|
-
@container.register("
|
|
135
|
+
@container.register("guild_template") do
|
|
65
136
|
GuildTemplate.new(auth_header, base_url, user_agent, logger)
|
|
66
137
|
end
|
|
67
138
|
|
|
@@ -73,6 +144,10 @@ module LibDiscord
|
|
|
73
144
|
Invite.new(auth_header, base_url, user_agent, logger)
|
|
74
145
|
end
|
|
75
146
|
|
|
147
|
+
@container.register("poll") do
|
|
148
|
+
Poll.new(auth_header, base_url, user_agent, logger)
|
|
149
|
+
end
|
|
150
|
+
|
|
76
151
|
@container.register("stage_instance") do
|
|
77
152
|
StageInstance.new(auth_header, base_url, user_agent, logger)
|
|
78
153
|
end
|
|
@@ -92,8 +167,43 @@ module LibDiscord
|
|
|
92
167
|
@container.register("webhook") do
|
|
93
168
|
Webhook.new(auth_header, base_url, user_agent, logger)
|
|
94
169
|
end
|
|
170
|
+
rescue Dry::Types::ConstraintError => e
|
|
171
|
+
raise ConstraintError.new(e.message)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
##
|
|
175
|
+
# Get a Resource for making Discord API requests.
|
|
176
|
+
#
|
|
177
|
+
# @param resource [String] Resource key. see {#keys} for available values.
|
|
178
|
+
#
|
|
179
|
+
# @return Resource
|
|
180
|
+
#
|
|
181
|
+
# @raise [KeyError] if no resource exists for a given key
|
|
182
|
+
#
|
|
183
|
+
# @example
|
|
184
|
+
# client["application"]
|
|
185
|
+
# # => #<LibDiscord::Application: ... >
|
|
186
|
+
# @example
|
|
187
|
+
# client["not.a.valid.key"]
|
|
188
|
+
# # => key not found "not.a.valid.key" (LibDiscord::KeyError)
|
|
189
|
+
def [](resource)
|
|
190
|
+
@container[resource]
|
|
191
|
+
rescue Dry::Container::KeyError => e
|
|
192
|
+
raise KeyError.new(e.message)
|
|
95
193
|
end
|
|
96
194
|
|
|
97
|
-
|
|
195
|
+
##
|
|
196
|
+
# Get available Resource keys.
|
|
197
|
+
#
|
|
198
|
+
# @return [Array<String>] a list of resources available
|
|
199
|
+
#
|
|
200
|
+
# @example
|
|
201
|
+
# client.keys
|
|
202
|
+
# # =>
|
|
203
|
+
# # ["application",
|
|
204
|
+
# # "guild",
|
|
205
|
+
# # "channel",
|
|
206
|
+
# # ...]
|
|
207
|
+
def keys = @container.keys
|
|
98
208
|
end
|
|
99
209
|
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lib_discord/resource"
|
|
4
|
+
|
|
5
|
+
module LibDiscord
|
|
6
|
+
##
|
|
7
|
+
# Emoji Resource
|
|
8
|
+
#
|
|
9
|
+
# Do not instantiate an {Emoji} directly. Instead request one from an
|
|
10
|
+
# instance of {Client}.
|
|
11
|
+
#
|
|
12
|
+
# client = LibDiscord::Client.new("Bot auth.token")
|
|
13
|
+
# e = client["emoji"]
|
|
14
|
+
#
|
|
15
|
+
# @see https://discord.com/developers/docs/resources/emoji Discord
|
|
16
|
+
# documentation "Emoji Resource"
|
|
17
|
+
class Emoji < Resource
|
|
18
|
+
##
|
|
19
|
+
# @param guild_id [#to_s]
|
|
20
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
21
|
+
# documentation "Snowflakes"}
|
|
22
|
+
#
|
|
23
|
+
# @return [Response]
|
|
24
|
+
#
|
|
25
|
+
# @raise [TimeoutError] if the HTTP request times out
|
|
26
|
+
#
|
|
27
|
+
# @see https://discord.com/developers/docs/resources/emoji#list-guild-emojis
|
|
28
|
+
# Discord documentation "List Guild Emojis"
|
|
29
|
+
def list_guild_emojis(guild_id:)
|
|
30
|
+
send_request(:get, "/guilds/#{guild_id}/emojis")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# @param guild_id [#to_s]
|
|
35
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
36
|
+
# documentation "Snowflakes"}
|
|
37
|
+
# @param emoji_id [#to_s]
|
|
38
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
39
|
+
# documentation "Snowflakes"}
|
|
40
|
+
#
|
|
41
|
+
# @return [Response]
|
|
42
|
+
#
|
|
43
|
+
# @raise [TimeoutError] if the HTTP request times out
|
|
44
|
+
#
|
|
45
|
+
# @see https://discord.com/developers/docs/resources/emoji#get-guild-emoji
|
|
46
|
+
# Discord documentation "Get Guild Emoji"
|
|
47
|
+
def get_guild_emoji(guild_id:, emoji_id:)
|
|
48
|
+
send_request(:get, "/guilds/#{guild_id}/emojis/#{emoji_id}")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# @param guild_id [#to_s]
|
|
53
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
54
|
+
# documentation "Snowflakes"}
|
|
55
|
+
# @param json [Hash] JSON serializable payload
|
|
56
|
+
#
|
|
57
|
+
# @return [Response]
|
|
58
|
+
#
|
|
59
|
+
# @raise [TimeoutError] if the HTTP request times out
|
|
60
|
+
# @raise [ConstraintError] if +json+ cannot be serialized to JSON
|
|
61
|
+
#
|
|
62
|
+
# @see https://discord.com/developers/docs/resources/emoji#create-guild-emoji
|
|
63
|
+
# Discord documentation "Create Guild Emoji"
|
|
64
|
+
def create_guild_emoji(guild_id:, json:)
|
|
65
|
+
send_request(:post, "/guilds/#{guild_id}/emojis", json:)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# @param guild_id [#to_s]
|
|
70
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
71
|
+
# documentation "Snowflakes"}
|
|
72
|
+
# @param emoji_id [#to_s]
|
|
73
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
74
|
+
# documentation "Snowflakes"}
|
|
75
|
+
# @param json [Hash] JSON serializable payload
|
|
76
|
+
#
|
|
77
|
+
# @return [Response]
|
|
78
|
+
#
|
|
79
|
+
# @raise [TimeoutError] if the HTTP request times out
|
|
80
|
+
# @raise [ConstraintError] if +json+ cannot be serialized to JSON
|
|
81
|
+
#
|
|
82
|
+
# @see https://discord.com/developers/docs/resources/emoji#modify-guild-emoji
|
|
83
|
+
# Discord documentation "Modify Guild Emoji"
|
|
84
|
+
def modify_guild_emoji(guild_id:, emoji_id:, json:)
|
|
85
|
+
send_request(:patch, "/guilds/#{guild_id}/emojis/#{emoji_id}", json:)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
##
|
|
89
|
+
# @param guild_id [#to_s]
|
|
90
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
91
|
+
# documentation "Snowflakes"}
|
|
92
|
+
# @param emoji_id [#to_s]
|
|
93
|
+
# {https://discord.com/developers/docs/reference#snowflakes Discord
|
|
94
|
+
# documentation "Snowflakes"}
|
|
95
|
+
#
|
|
96
|
+
# @return [Response]
|
|
97
|
+
#
|
|
98
|
+
# @raise [TimeoutError] if the HTTP request times out
|
|
99
|
+
#
|
|
100
|
+
# @see https://discord.com/developers/docs/resources/emoji#delete-guild-emoji
|
|
101
|
+
# Discord documentation "Delete Guild Emoji"
|
|
102
|
+
def delete_guild_emoji(guild_id:, emoji_id:)
|
|
103
|
+
send_request(:delete, "/guilds/#{guild_id}/emojis/#{emoji_id}")
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
data/lib/lib_discord/errors.rb
CHANGED
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "dry-container"
|
|
4
|
+
require "dry/types"
|
|
3
5
|
require "http"
|
|
4
6
|
|
|
5
7
|
module LibDiscord
|
|
8
|
+
##
|
|
9
|
+
# Constraint Error
|
|
10
|
+
#
|
|
11
|
+
# This error is thrown when a type-check against LibDiscord's type
|
|
12
|
+
# constraints fails.
|
|
13
|
+
class ConstraintError < Dry::Types::ConstraintError; end
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Key Error
|
|
17
|
+
#
|
|
18
|
+
# This error is thrown when a {Client} instance has no object mapped to the
|
|
19
|
+
# key used.
|
|
20
|
+
#
|
|
21
|
+
# @see Client#[]
|
|
22
|
+
# @see Client#keys
|
|
23
|
+
class KeyError < Dry::Container::KeyError; end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# This error is thrown when an HTTP request made to Discord times out.
|
|
27
|
+
#
|
|
28
|
+
# @see https://github.com/httprb/http/wiki/Errors-and-Exceptions HTTP.rb
|
|
29
|
+
# "Errors and Exceptions"
|
|
6
30
|
class TimeoutError < HTTP::TimeoutError; end
|
|
7
31
|
end
|