lib_discord 0.1.0.pre2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|