Class: Discordrb::Webhook

Inherits:
Object
  • Object
show all
Includes:
IDObject
Defined in:
lib/discordrb/data.rb

Overview

A webhook on a server channel

Instance Attribute Summary collapse

Attributes included from IDObject

#id

Instance Method Summary collapse

Methods included from IDObject

#==, #creation_time, synthesise

Constructor Details

#initialize(data, bot) ⇒ Webhook

Returns a new instance of Webhook.


3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
# File 'lib/discordrb/data.rb', line 3736

def initialize(data, bot)
  @bot = bot

  @name = data['name']
  @id = data['id'].to_i
  @channel = bot.channel(data['channel_id'])
  @server = @channel.server
  @token = data['token']
  @avatar = data['avatar']

  # Will not exist if the data was requested through a webhook token
  return unless data['user']
  @owner = @server.member(data['user']['id'].to_i)
  return if @owner
  Discordrb::LOGGER.debug("Member with ID #{data['user']['id']} not cached (possibly left the server).")
  @owner = @bot.ensure_user(data['user'])
end

Instance Attribute Details

#avatarString

Returns the webhook's avatar id.

Returns:

  • (String)

    the webhook's avatar id.


3729
3730
3731
# File 'lib/discordrb/data.rb', line 3729

def avatar
  @avatar
end

#channelChannel

Returns the channel that the webhook is currently connected to.

Returns:

  • (Channel)

    the channel that the webhook is currently connected to.


3720
3721
3722
# File 'lib/discordrb/data.rb', line 3720

def channel
  @channel
end

#nameString

Returns the webhook name.

Returns:

  • (String)

    the webhook name.


3717
3718
3719
# File 'lib/discordrb/data.rb', line 3717

def name
  @name
end

#ownerMember, ... (readonly)

Gets the user object of the creator of the webhook. May be limited to username, discriminator, ID and avatar if the bot cannot reach the owner

Returns:

  • (Member, User, nil)

    the user object of the owner or nil if the webhook was requested using the token.


3734
3735
3736
# File 'lib/discordrb/data.rb', line 3734

def owner
  @owner
end

#serverServer (readonly)

Returns the server that the webhook is currently connected to.

Returns:

  • (Server)

    the server that the webhook is currently connected to.


3723
3724
3725
# File 'lib/discordrb/data.rb', line 3723

def server
  @server
end

#tokenString (readonly)

Returns the webhook's token.

Returns:

  • (String)

    the webhook's token.


3726
3727
3728
# File 'lib/discordrb/data.rb', line 3726

def token
  @token
end

Instance Method Details

#avatar_urlString

Utility function to get a webhook's avatar URL.

Returns:

  • (String)

    the URL to the avatar image


3803
3804
3805
3806
# File 'lib/discordrb/data.rb', line 3803

def avatar_url
  return API::User.default_avatar unless @avatar
  API::User.avatar_url(@id, @avatar)
end

#delete(reason = nil) ⇒ Object

Deletes the webhook.

Parameters:

  • reason (String) (defaults to: nil)

    The reason the invite is being deleted.


3793
3794
3795
3796
3797
3798
3799
# File 'lib/discordrb/data.rb', line 3793

def delete(reason = nil)
  if token?
    API::Webhook.token_delete_webhook(@token, @id, reason)
  else
    API::Webhook.delete_webhook(@bot.token, @id, reason)
  end
end

#delete_avatarObject

Deletes the webhook's avatar.


3761
3762
3763
# File 'lib/discordrb/data.rb', line 3761

def delete_avatar
  update_webhook(avatar: nil)
end

#inspectObject

The inspect method is overwritten to give more useful output.


3809
3810
3811
# File 'lib/discordrb/data.rb', line 3809

def inspect
  "<Webhook name=#{@name} id=#{@id}>"
end

#token?true, false

Utility function to know if the webhook was requested through a webhook token, rather than auth.

Returns:

  • (true, false)

    whether the webhook was requested by token or not.


3815
3816
3817
# File 'lib/discordrb/data.rb', line 3815

def token?
  @owner.nil?
end

#update(data) ⇒ Object

Updates the webhook if you need to edit more than 1 attribute.

Parameters:

  • data (Hash)

    the data to update.

Options Hash (data):

  • :avatar (String, #read, nil)

    The new avatar, in base64-encoded JPG format, or nil to delete the avatar.

  • :channel (Channel, String, Integer, #resolve_id)

    The channel the webhook should use.

  • :name (String)

    The webhook's new name.

  • :reason (String)

    The reason for the webhook changes.


3783
3784
3785
3786
3787
3788
3789
# File 'lib/discordrb/data.rb', line 3783

def update(data)
  # Only pass a value for avatar if the key is defined as sending nil will delete the
  data[:avatar] = avatarise(data[:avatar]) if data.key?(:avatar)
  data[:channel_id] = data[:channel].resolve_id
  data.delete(:channel)
  update_webhook(data)
end