mij-discord 1.0.7 → 1.0.8
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/mij-discord.rb +5 -10
- data/lib/mij-discord/bot.rb +32 -20
- data/lib/mij-discord/cache.rb +23 -8
- data/lib/mij-discord/core/api.rb +15 -4
- data/lib/mij-discord/core/api/channel.rb +0 -6
- data/lib/mij-discord/core/api/invite.rb +3 -2
- data/lib/mij-discord/core/api/webhook.rb +94 -0
- data/lib/mij-discord/data.rb +5 -1
- data/lib/mij-discord/data/application.rb +4 -0
- data/lib/mij-discord/data/channel.rb +34 -6
- data/lib/mij-discord/data/embed.rb +112 -0
- data/lib/mij-discord/data/emoji.rb +15 -2
- data/lib/mij-discord/data/invite.rb +20 -0
- data/lib/mij-discord/data/member.rb +10 -0
- data/lib/mij-discord/data/message.rb +25 -4
- data/lib/mij-discord/data/permissions.rb +16 -0
- data/lib/mij-discord/data/role.rb +5 -0
- data/lib/mij-discord/data/server.rb +22 -3
- data/lib/mij-discord/data/user.rb +43 -22
- data/lib/mij-discord/data/voice.rb +11 -0
- data/lib/mij-discord/data/webhook.rb +121 -0
- data/lib/mij-discord/errors.rb +44 -0
- data/lib/mij-discord/events.rb +4 -0
- data/lib/mij-discord/events/channel.rb +2 -0
- data/lib/mij-discord/extensions.rb +16 -0
- data/lib/mij-discord/logger.rb +9 -0
- data/lib/mij-discord/version.rb +1 -1
- metadata +6 -3
- data/lib/mij-discord/core/errors.rb +0 -106
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 79f209e5e6420da2007626aae908544d05da9121
         | 
| 4 | 
            +
              data.tar.gz: a3ced104cc02f533b5ba05641112685823a9f382
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ae684e032ccb55100cd23faf439039f7a2c0f8bc352b8b890307c9270e78b0c724fc0f334fcf6579c4a70b232a2ab55a79b45eeb52146fa3211c15fd71a5c19f
         | 
| 7 | 
            +
              data.tar.gz: 933eacfede575e90b795bf7b023260f4964e9d0fb08b8d455a68635a7f2324b8f6abb3b498b1ee2748f5ab0c2ec69c44c961b0e00837f5c43760e87d0d61d744
         | 
    
        data/lib/mij-discord.rb
    CHANGED
    
    | @@ -13,17 +13,19 @@ require 'websocket-client-simple' | |
| 13 13 | 
             
            require 'rest-client'
         | 
| 14 14 |  | 
| 15 15 | 
             
            require_relative 'mij-discord/version'
         | 
| 16 | 
            +
            require_relative 'mij-discord/extensions'
         | 
| 16 17 | 
             
            require_relative 'mij-discord/logger'
         | 
| 17 18 | 
             
            require_relative 'mij-discord/cache'
         | 
| 18 19 | 
             
            require_relative 'mij-discord/events'
         | 
| 20 | 
            +
            require_relative 'mij-discord/errors'
         | 
| 19 21 |  | 
| 20 22 | 
             
            require_relative 'mij-discord/core/gateway'
         | 
| 21 | 
            -
            require_relative 'mij-discord/core/errors'
         | 
| 22 23 | 
             
            require_relative 'mij-discord/core/api'
         | 
| 23 24 | 
             
            require_relative 'mij-discord/core/api/channel'
         | 
| 24 25 | 
             
            require_relative 'mij-discord/core/api/invite'
         | 
| 25 26 | 
             
            require_relative 'mij-discord/core/api/server'
         | 
| 26 27 | 
             
            require_relative 'mij-discord/core/api/user'
         | 
| 28 | 
            +
            require_relative 'mij-discord/core/api/webhook'
         | 
| 27 29 |  | 
| 28 30 | 
             
            require_relative 'mij-discord/data'
         | 
| 29 31 | 
             
            require_relative 'mij-discord/data/invite'
         | 
| @@ -38,6 +40,7 @@ require_relative 'mij-discord/data/server' | |
| 38 40 | 
             
            require_relative 'mij-discord/data/embed'
         | 
| 39 41 | 
             
            require_relative 'mij-discord/data/emoji'
         | 
| 40 42 | 
             
            require_relative 'mij-discord/data/message'
         | 
| 43 | 
            +
            require_relative 'mij-discord/data/webhook'
         | 
| 41 44 |  | 
| 42 45 | 
             
            require_relative 'mij-discord/events/basic'
         | 
| 43 46 | 
             
            require_relative 'mij-discord/events/server'
         | 
| @@ -45,12 +48,4 @@ require_relative 'mij-discord/events/member' | |
| 45 48 | 
             
            require_relative 'mij-discord/events/channel'
         | 
| 46 49 | 
             
            require_relative 'mij-discord/events/message'
         | 
| 47 50 |  | 
| 48 | 
            -
            require_relative 'mij-discord/bot'
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            class Integer
         | 
| 51 | 
            -
              alias_method :to_id, :itself
         | 
| 52 | 
            -
            end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
            class String
         | 
| 55 | 
            -
              alias_method :to_id, :to_i
         | 
| 56 | 
            -
            end
         | 
| 51 | 
            +
            require_relative 'mij-discord/bot'
         | 
    
        data/lib/mij-discord/bot.rb
    CHANGED
    
    | @@ -1,16 +1,18 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            module MijDiscord
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 4 | 
            +
              class Bot
         | 
| 5 | 
            +
                class AuthInfo
         | 
| 6 | 
            +
                  attr_reader :id
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  attr_reader :token
         | 
| 7 9 |  | 
| 8 10 | 
             
                  attr_reader :type
         | 
| 9 11 |  | 
| 10 12 | 
             
                  attr_reader :name
         | 
| 11 13 |  | 
| 12 | 
            -
                  def initialize(token, type, name)
         | 
| 13 | 
            -
                    @type, @name = type, name
         | 
| 14 | 
            +
                  def initialize(id, token, type, name)
         | 
| 15 | 
            +
                    @id, @type, @name = id.to_id, type, name
         | 
| 14 16 |  | 
| 15 17 | 
             
                    @token = case type
         | 
| 16 18 | 
             
                      when :bot then "Bot #{token}"
         | 
| @@ -28,6 +30,10 @@ module MijDiscord | |
| 28 30 | 
             
                  end
         | 
| 29 31 |  | 
| 30 32 | 
             
                  alias_method :to_s, :token
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def inspect
         | 
| 35 | 
            +
                    MijDiscord.make_inspect(self, :id, :type, :name)
         | 
| 36 | 
            +
                  end
         | 
| 31 37 | 
             
                end
         | 
| 32 38 |  | 
| 33 39 | 
             
                EVENTS = {
         | 
| @@ -55,6 +61,7 @@ module MijDiscord | |
| 55 61 | 
             
                  create_channel: MijDiscord::Events::CreateChannel,
         | 
| 56 62 | 
             
                  update_channel: MijDiscord::Events::UpdateChannel,
         | 
| 57 63 | 
             
                  delete_channel: MijDiscord::Events::DeleteChannel,
         | 
| 64 | 
            +
                  update_webhooks: MijDiscord::Events::UpdateWebhooks,
         | 
| 58 65 | 
             
                  add_recipient: MijDiscord::Events::AddRecipient,
         | 
| 59 66 | 
             
                  remove_recipient: MijDiscord::Events::RemoveRecipient,
         | 
| 60 67 |  | 
| @@ -76,10 +83,6 @@ module MijDiscord | |
| 76 83 |  | 
| 77 84 | 
             
                UNAVAILABLE_SERVER_TIMEOUT = 10
         | 
| 78 85 |  | 
| 79 | 
            -
                attr_reader :name
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                attr_reader :client_id
         | 
| 82 | 
            -
             | 
| 83 86 | 
             
                attr_reader :auth
         | 
| 84 87 |  | 
| 85 88 | 
             
                attr_reader :shard_key
         | 
| @@ -92,8 +95,7 @@ module MijDiscord | |
| 92 95 |  | 
| 93 96 | 
             
                def initialize(client_id:, token:, type: :bot, name: nil,
         | 
| 94 97 | 
             
                shard_id: nil, num_shards: nil, ignore_bots: false, ignore_self: true)
         | 
| 95 | 
            -
                  @ | 
| 96 | 
            -
                  @auth = AuthInfo.new(token, type, name)
         | 
| 98 | 
            +
                  @auth = AuthInfo.new(client_id, token, type, name)
         | 
| 97 99 |  | 
| 98 100 | 
             
                  @cache = MijDiscord::Cache::BotCache.new(self)
         | 
| 99 101 |  | 
| @@ -197,7 +199,7 @@ module MijDiscord | |
| 197 199 | 
             
                end
         | 
| 198 200 |  | 
| 199 201 | 
             
                def application
         | 
| 200 | 
            -
                  raise 'Cannot get OAuth application for non-bot user'  | 
| 202 | 
            +
                  raise 'Cannot get OAuth application for non-bot user' unless @auth.bot?
         | 
| 201 203 |  | 
| 202 204 | 
             
                  response = MijDiscord::Core::API.oauth_application(@auth)
         | 
| 203 205 | 
             
                  MijDiscord::Data::Application.new(JSON.parse(response), self)
         | 
| @@ -205,7 +207,7 @@ module MijDiscord | |
| 205 207 |  | 
| 206 208 | 
             
                def invite(invite)
         | 
| 207 209 | 
             
                  code = parse_invite_code(invite)
         | 
| 208 | 
            -
                  response = MijDiscord::Core::API::Invite.resolve(@auth, code)
         | 
| 210 | 
            +
                  response = MijDiscord::Core::API::Invite.resolve(@auth, code, true)
         | 
| 209 211 | 
             
                  MijDiscord::Data::Invite.new(JSON.parse(response), self)
         | 
| 210 212 | 
             
                end
         | 
| 211 213 |  | 
| @@ -216,7 +218,7 @@ module MijDiscord | |
| 216 218 | 
             
                end
         | 
| 217 219 |  | 
| 218 220 | 
             
                def make_invite_url(server: nil, permissions: nil)
         | 
| 219 | 
            -
                  url = "https://discordapp.com/oauth2/authorize?scope=bot&client_id=#{@ | 
| 221 | 
            +
                  url = "https://discordapp.com/oauth2/authorize?scope=bot&client_id=#{@auth.id}".dup
         | 
| 220 222 | 
             
                  url << "&permissions=#{permissions.to_i}" if permissions.respond_to?(:to_i)
         | 
| 221 223 | 
             
                  url << "&guild_id=#{server.to_id}" if server.respond_to?(:to_id)
         | 
| 222 224 | 
             
                  url
         | 
| @@ -258,14 +260,17 @@ module MijDiscord | |
| 258 260 | 
             
                        role = sv.role($1)
         | 
| 259 261 | 
             
                        return role if role
         | 
| 260 262 | 
             
                      end
         | 
| 261 | 
            -
                    when  | 
| 262 | 
            -
                      emoji = emoji(server_id, $ | 
| 263 | 
            +
                    when /^<(a?):(\w+):(\d+)>$/
         | 
| 264 | 
            +
                      emoji = emoji(server_id, $3)
         | 
| 263 265 | 
             
                      return emoji if emoji
         | 
| 264 266 |  | 
| 265 267 | 
             
                      servers.each do |sv|
         | 
| 266 | 
            -
                        emoji = sv.emoji($ | 
| 268 | 
            +
                        emoji = sv.emoji($3)
         | 
| 267 269 | 
             
                        return emoji if emoji
         | 
| 268 270 | 
             
                      end
         | 
| 271 | 
            +
             | 
| 272 | 
            +
                      em_data = { 'id' => $3.to_i, 'name' => $2, 'animated' => !$1.empty? }
         | 
| 273 | 
            +
                      MijDiscord::Data::Emoji.new(em_data, self, nil)
         | 
| 269 274 | 
             
                  end
         | 
| 270 275 | 
             
                end
         | 
| 271 276 |  | 
| @@ -300,7 +305,7 @@ module MijDiscord | |
| 300 305 | 
             
                end
         | 
| 301 306 |  | 
| 302 307 | 
             
                def ignored_user?(user)
         | 
| 303 | 
            -
                  @ignore_self && user.to_id == @ | 
| 308 | 
            +
                  @ignore_self && user.to_id == @auth.id || @ignored_ids.include?(user.to_id)
         | 
| 304 309 | 
             
                end
         | 
| 305 310 |  | 
| 306 311 | 
             
                def update_presence(status: nil, game: nil)
         | 
| @@ -379,7 +384,6 @@ module MijDiscord | |
| 379 384 | 
             
                    when :GUILD_MEMBERS_CHUNK
         | 
| 380 385 | 
             
                      server = @cache.get_server(data['guild_id'])
         | 
| 381 386 | 
             
                      server.update_members_chunk(data['members'])
         | 
| 382 | 
            -
                      puts "Chunk(#{server.id}+#{data['members'].length})"
         | 
| 383 387 |  | 
| 384 388 | 
             
                    when :GUILD_CREATE
         | 
| 385 389 | 
             
                      server = @cache.put_server(data)
         | 
| @@ -424,6 +428,10 @@ module MijDiscord | |
| 424 428 | 
             
                      channel = @cache.remove_channel(data['id'])
         | 
| 425 429 | 
             
                      trigger_event(:delete_channel, self, channel)
         | 
| 426 430 |  | 
| 431 | 
            +
                    when :WEBHOOKS_UPDATE
         | 
| 432 | 
            +
                      channel = @cache.get_channel(data['channel_id'], nil)
         | 
| 433 | 
            +
                      trigger_event(:update_webhooks, self, channel)
         | 
| 434 | 
            +
             | 
| 427 435 | 
             
                    when :CHANNEL_RECIPIENT_ADD
         | 
| 428 436 | 
             
                      channel = @cache.get_channel(data['channel_id'], nil)
         | 
| 429 437 | 
             
                      recipient = channel.update_recipient(add: data['user'])
         | 
| @@ -538,7 +546,7 @@ module MijDiscord | |
| 538 546 | 
             
                    when :TYPING_START
         | 
| 539 547 | 
             
                      begin
         | 
| 540 548 | 
             
                        trigger_event(:start_typing, self, data)
         | 
| 541 | 
            -
                      rescue MijDiscord:: | 
| 549 | 
            +
                      rescue MijDiscord::Errors::Forbidden
         | 
| 542 550 | 
             
                        # Ignoring the channel we can't access
         | 
| 543 551 | 
             
                        # Why is this even sent? :S
         | 
| 544 552 | 
             
                      end
         | 
| @@ -575,6 +583,10 @@ module MijDiscord | |
| 575 583 | 
             
                  MijDiscord::LOGGER.error('Dispatch') { exc }
         | 
| 576 584 | 
             
                end
         | 
| 577 585 |  | 
| 586 | 
            +
                def inspect
         | 
| 587 | 
            +
                  MijDiscord.make_inspect(self, :auth)
         | 
| 588 | 
            +
                end
         | 
| 589 | 
            +
             | 
| 578 590 | 
             
                private
         | 
| 579 591 |  | 
| 580 592 | 
             
                def gateway_check
         | 
    
        data/lib/mij-discord/cache.rb
    CHANGED
    
    | @@ -32,7 +32,7 @@ module MijDiscord::Cache | |
| 32 32 |  | 
| 33 33 | 
             
                  begin
         | 
| 34 34 | 
             
                    response = MijDiscord::Core::API::Server.resolve(@bot.auth, id)
         | 
| 35 | 
            -
                  rescue  | 
| 35 | 
            +
                  rescue MijDiscord::Errors::NotFound
         | 
| 36 36 | 
             
                    return nil
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 |  | 
| @@ -42,14 +42,14 @@ module MijDiscord::Cache | |
| 42 42 | 
             
                def get_channel(key, server, local: false)
         | 
| 43 43 | 
             
                  id = key&.to_id
         | 
| 44 44 | 
             
                  return @channels[id] if @channels.has_key?(id)
         | 
| 45 | 
            -
                  raise MijDiscord::Errors:: | 
| 45 | 
            +
                  raise MijDiscord::Errors::Forbidden if @restricted_channels[id]
         | 
| 46 46 | 
             
                  return nil if local
         | 
| 47 47 |  | 
| 48 48 | 
             
                  begin
         | 
| 49 49 | 
             
                    response = MijDiscord::Core::API::Channel.resolve(@bot.auth, id)
         | 
| 50 | 
            -
                  rescue  | 
| 50 | 
            +
                  rescue MijDiscord::Errors::NotFound
         | 
| 51 51 | 
             
                    return nil
         | 
| 52 | 
            -
                  rescue MijDiscord::Errors:: | 
| 52 | 
            +
                  rescue MijDiscord::Errors::Forbidden
         | 
| 53 53 | 
             
                    @restricted_channels[id] = true
         | 
| 54 54 | 
             
                    raise
         | 
| 55 55 | 
             
                  end
         | 
| @@ -85,7 +85,7 @@ module MijDiscord::Cache | |
| 85 85 | 
             
                      when :bot then MijDiscord::Core::API::User.resolve(@bot.auth, id)
         | 
| 86 86 | 
             
                      when :user then MijDiscord::Core::API::User.resolve2(@bot.auth, id)
         | 
| 87 87 | 
             
                    end
         | 
| 88 | 
            -
                  rescue  | 
| 88 | 
            +
                  rescue MijDiscord::Errors::NotFound
         | 
| 89 89 | 
             
                    return nil
         | 
| 90 90 | 
             
                  end
         | 
| 91 91 |  | 
| @@ -147,6 +147,10 @@ module MijDiscord::Cache | |
| 147 147 | 
             
                def remove_user(key)
         | 
| 148 148 | 
             
                  @users.delete(key&.to_id)
         | 
| 149 149 | 
             
                end
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                def inspect
         | 
| 152 | 
            +
                  MijDiscord.make_inspect(self)
         | 
| 153 | 
            +
                end
         | 
| 150 154 | 
             
              end
         | 
| 151 155 |  | 
| 152 156 | 
             
              class ServerCache
         | 
| @@ -179,7 +183,7 @@ module MijDiscord::Cache | |
| 179 183 |  | 
| 180 184 | 
             
                  begin
         | 
| 181 185 | 
             
                    response = MijDiscord::Core::API::Server.resolve_member(@bot.auth, @server.id, id)
         | 
| 182 | 
            -
                  rescue  | 
| 186 | 
            +
                  rescue MijDiscord::Errors::NotFound
         | 
| 183 187 | 
             
                    return nil
         | 
| 184 188 | 
             
                  end
         | 
| 185 189 |  | 
| @@ -248,6 +252,10 @@ module MijDiscord::Cache | |
| 248 252 |  | 
| 249 253 | 
             
                  channel
         | 
| 250 254 | 
             
                end
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                def inspect
         | 
| 257 | 
            +
                  MijDiscord.make_inspect(self)
         | 
| 258 | 
            +
                end
         | 
| 251 259 | 
             
              end
         | 
| 252 260 |  | 
| 253 261 | 
             
              class ChannelCache
         | 
| @@ -270,8 +278,11 @@ module MijDiscord::Cache | |
| 270 278 | 
             
                  return nil if local
         | 
| 271 279 |  | 
| 272 280 | 
             
                  begin
         | 
| 273 | 
            -
                    response =  | 
| 274 | 
            -
             | 
| 281 | 
            +
                    response = case @bot.auth.type
         | 
| 282 | 
            +
                      when :bot then MijDiscord::Core::API::Channel.message(@bot.auth, @channel.id, key)
         | 
| 283 | 
            +
                      when :user then MijDiscord::Core::API::Channel.messages(@bot.auth, @channel.id, 1, nil, nil, key)
         | 
| 284 | 
            +
                    end
         | 
| 285 | 
            +
                  rescue MijDiscord::Errors::NotFound
         | 
| 275 286 | 
             
                    return nil
         | 
| 276 287 | 
             
                  end
         | 
| 277 288 |  | 
| @@ -297,5 +308,9 @@ module MijDiscord::Cache | |
| 297 308 | 
             
                def remove_message(key)
         | 
| 298 309 | 
             
                  @messages.delete(key&.to_id)
         | 
| 299 310 | 
             
                end
         | 
| 311 | 
            +
             | 
| 312 | 
            +
                def inspect
         | 
| 313 | 
            +
                  MijDiscord.make_inspect(self)
         | 
| 314 | 
            +
                end
         | 
| 300 315 | 
             
              end
         | 
| 301 316 | 
             
            end
         | 
    
        data/lib/mij-discord/core/api.rb
    CHANGED
    
    | @@ -154,10 +154,21 @@ module MijDiscord::Core::API | |
| 154 154 | 
             
                  )
         | 
| 155 155 | 
             
                end
         | 
| 156 156 |  | 
| 157 | 
            -
                def raw_request(type, attributes)
         | 
| 157 | 
            +
                def raw_request(type, *attributes)
         | 
| 158 158 | 
             
                  RestClient.send(type, *attributes)
         | 
| 159 | 
            -
                rescue RestClient:: | 
| 160 | 
            -
                   | 
| 159 | 
            +
                rescue RestClient::RequestFailed => e
         | 
| 160 | 
            +
                  # Holy fuck, Discord…
         | 
| 161 | 
            +
                  if (klazz = MijDiscord::Errors::HTTP_ERRORS[e.http_code])
         | 
| 162 | 
            +
                    data = JSON.parse(e.response)
         | 
| 163 | 
            +
                    if data['message'] || data['code']
         | 
| 164 | 
            +
                      raise klazz.new(data['code'], data['message'], e.response)
         | 
| 165 | 
            +
                    elsif (error = (data['content'] || data['embed']).join)
         | 
| 166 | 
            +
                      if MijDiscord::Errors::MessageTooLong.match_pattern?(error)
         | 
| 167 | 
            +
                        raise MijDiscord::Errors::MessageTooLong.new(error, e.response)
         | 
| 168 | 
            +
                      end
         | 
| 169 | 
            +
                    end
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
                  raise
         | 
| 161 172 | 
             
                rescue RestClient::BadGateway
         | 
| 162 173 | 
             
                  MijDiscord::LOGGER.warn('HTTP') { 'Received 502 Bad Gateway during API request' }
         | 
| 163 174 | 
             
                  retry
         | 
| @@ -179,7 +190,7 @@ module MijDiscord::Core::API | |
| 179 190 | 
             
                    mutex_wait(key_mutex)
         | 
| 180 191 | 
             
                    mutex_wait(global_mutex) if global_mutex.locked?
         | 
| 181 192 |  | 
| 182 | 
            -
                    response = raw_request(type, attributes)
         | 
| 193 | 
            +
                    response = raw_request(type, *attributes)
         | 
| 183 194 | 
             
                  rescue RestClient::TooManyRequests => e
         | 
| 184 195 | 
             
                    response = e.response
         | 
| 185 196 |  | 
| @@ -83,12 +83,6 @@ module MijDiscord::Core::API::Channel | |
| 83 83 | 
             
                    Authorization: auth,
         | 
| 84 84 | 
             
                    content_type: :json
         | 
| 85 85 | 
             
                  )
         | 
| 86 | 
            -
                rescue RestClient::BadRequest => e
         | 
| 87 | 
            -
                  parsed = JSON.parse(e.response.body)
         | 
| 88 | 
            -
                  if (content = parsed['content']).is_a?(Array) && content.first == 'Must be 2000 or fewer characters long.'
         | 
| 89 | 
            -
                    raise MijDiscord::Core::Errors::MessageTooLong, "Message over the character limit (#{message.length} > 2000)"
         | 
| 90 | 
            -
                  end
         | 
| 91 | 
            -
                  raise
         | 
| 92 86 | 
             
                end
         | 
| 93 87 |  | 
| 94 88 | 
             
                # Send a file as a message to a channel
         | 
| @@ -4,12 +4,13 @@ module MijDiscord::Core::API::Invite | |
| 4 4 | 
             
              class << self
         | 
| 5 5 | 
             
                # Resolve an invite
         | 
| 6 6 | 
             
                # https://discordapp.com/developers/docs/resources/invite#get-invite
         | 
| 7 | 
            -
                def resolve(auth, invite_code)
         | 
| 7 | 
            +
                def resolve(auth, invite_code, with_counts = false)
         | 
| 8 | 
            +
                  counts = with_counts ? '?with_counts=true' : ''
         | 
| 8 9 | 
             
                  MijDiscord::Core::API.request(
         | 
| 9 10 | 
             
                    :invite_code,
         | 
| 10 11 | 
             
                    nil,
         | 
| 11 12 | 
             
                    :get,
         | 
| 12 | 
            -
                    "#{MijDiscord::Core::API::APIBASE_URL}/invites/#{invite_code}",
         | 
| 13 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/invites/#{invite_code}#{counts}",
         | 
| 13 14 | 
             
                    Authorization: auth
         | 
| 14 15 | 
             
                  )
         | 
| 15 16 | 
             
                end
         | 
| @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module MijDiscord::Core::API::Webhook
         | 
| 4 | 
            +
              class << self
         | 
| 5 | 
            +
                # Get a webhook
         | 
| 6 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#get-webhook
         | 
| 7 | 
            +
                def webhook(auth, webhook_id)
         | 
| 8 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 9 | 
            +
                    :webhooks_wid,
         | 
| 10 | 
            +
                    nil,
         | 
| 11 | 
            +
                    :get,
         | 
| 12 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}",
         | 
| 13 | 
            +
                    Authorization: auth
         | 
| 14 | 
            +
                  )
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # Get a webhook via webhook token
         | 
| 18 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#get-webhook-with-token
         | 
| 19 | 
            +
                def token_webhook(webhook_token, webhook_id)
         | 
| 20 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 21 | 
            +
                    :webhooks_wid,
         | 
| 22 | 
            +
                    nil,
         | 
| 23 | 
            +
                    :get,
         | 
| 24 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}/#{webhook_token}",
         | 
| 25 | 
            +
                  )
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                # Update a webhook
         | 
| 29 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#modify-webhook
         | 
| 30 | 
            +
                def update_webhook(auth, webhook_id, data, reason = nil)
         | 
| 31 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 32 | 
            +
                    :webhooks_wid,
         | 
| 33 | 
            +
                    webhook_id,
         | 
| 34 | 
            +
                    :patch,
         | 
| 35 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}",
         | 
| 36 | 
            +
                    data.to_json,
         | 
| 37 | 
            +
                    Authorization: auth,
         | 
| 38 | 
            +
                    content_type: :json,
         | 
| 39 | 
            +
                    'X-Audit-Log-Reason': reason,
         | 
| 40 | 
            +
                  )
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                # Update a webhook via webhook token
         | 
| 44 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#modify-webhook-with-token
         | 
| 45 | 
            +
                def token_update_webhook(webhook_token, webhook_id, data, reason = nil)
         | 
| 46 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 47 | 
            +
                    :webhooks_wid,
         | 
| 48 | 
            +
                    webhook_id,
         | 
| 49 | 
            +
                    :patch,
         | 
| 50 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}/#{webhook_token}",
         | 
| 51 | 
            +
                    data.to_json,
         | 
| 52 | 
            +
                    content_type: :json,
         | 
| 53 | 
            +
                    'X-Audit-Log-Reason': reason,
         | 
| 54 | 
            +
                  )
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                # Deletes a webhook
         | 
| 58 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#delete-webhook
         | 
| 59 | 
            +
                def delete_webhook(auth, webhook_id, reason = nil)
         | 
| 60 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 61 | 
            +
                    :webhooks_wid,
         | 
| 62 | 
            +
                    webhook_id,
         | 
| 63 | 
            +
                    :delete,
         | 
| 64 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}",
         | 
| 65 | 
            +
                    Authorization: auth,
         | 
| 66 | 
            +
                    'X-Audit-Log-Reason': reason,
         | 
| 67 | 
            +
                  )
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                # Deletes a webhook via webhook token
         | 
| 71 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#delete-webhook-with-token
         | 
| 72 | 
            +
                def token_delete_webhook(webhook_token, webhook_id, reason = nil)
         | 
| 73 | 
            +
                  MijDiscord::Core::API.request(
         | 
| 74 | 
            +
                    :webhooks_wid,
         | 
| 75 | 
            +
                    webhook_id,
         | 
| 76 | 
            +
                    :delete,
         | 
| 77 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}/#{webhook_token}",
         | 
| 78 | 
            +
                    'X-Audit-Log-Reason': reason,
         | 
| 79 | 
            +
                  )
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                # Executes a webhook with JSON body
         | 
| 83 | 
            +
                # https://discordapp.com/developers/docs/resources/webhook#execute-webhook
         | 
| 84 | 
            +
                def execute_json(webhook_token, webhook_id, data, wait)
         | 
| 85 | 
            +
                  wait = wait ? '?wait=true' : ''
         | 
| 86 | 
            +
                  MijDiscord::Core::API.raw_request(
         | 
| 87 | 
            +
                    :post,
         | 
| 88 | 
            +
                    "#{MijDiscord::Core::API::APIBASE_URL}/webhooks/#{webhook_id}/#{webhook_token}#{wait}",
         | 
| 89 | 
            +
                    data.to_json,
         | 
| 90 | 
            +
                    content_type: :json,
         | 
| 91 | 
            +
                  )
         | 
| 92 | 
            +
                end
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
            end
         |