Class: Discordrb::Webhook

Inherits:
Object
  • Object
show all
Includes:
IDObject
Defined in:
lib/discordrb/data/webhook.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.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/discordrb/data/webhook.rb', line 31

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']
  @type = data['type']

  # 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.



21
22
23
# File 'lib/discordrb/data/webhook.rb', line 21

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.



12
13
14
# File 'lib/discordrb/data/webhook.rb', line 12

def channel
  @channel
end

#nameString

Returns the webhook name.

Returns:

  • (String)

    the webhook name.



9
10
11
# File 'lib/discordrb/data/webhook.rb', line 9

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.



29
30
31
# File 'lib/discordrb/data/webhook.rb', line 29

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.



15
16
17
# File 'lib/discordrb/data/webhook.rb', line 15

def server
  @server
end

#tokenString? (readonly)

Returns the webhook's token, if this is an Incoming Webhook.

Returns:

  • (String, nil)

    the webhook's token, if this is an Incoming Webhook.



18
19
20
# File 'lib/discordrb/data/webhook.rb', line 18

def token
  @token
end

#typeInteger (readonly)

Returns the webhook's type (1: Incoming, 2: Channel Follower).

Returns:

  • (Integer)

    the webhook's type (1: Incoming, 2: Channel Follower)



24
25
26
# File 'lib/discordrb/data/webhook.rb', line 24

def type
  @type
end

Instance Method Details

#avatar_urlString

Utility function to get a webhook's avatar URL.

Returns:

  • (String)

    the URL to the avatar image



101
102
103
104
105
# File 'lib/discordrb/data/webhook.rb', line 101

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.



91
92
93
94
95
96
97
# File 'lib/discordrb/data/webhook.rb', line 91

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.



59
60
61
# File 'lib/discordrb/data/webhook.rb', line 59

def delete_avatar
  update_webhook(avatar: nil)
end

#inspectObject

The inspect method is overwritten to give more useful output.



108
109
110
# File 'lib/discordrb/data/webhook.rb', line 108

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.



114
115
116
# File 'lib/discordrb/data/webhook.rb', line 114

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)

    The channel the webhook should use.

  • :name (String)

    The webhook's new name.

  • :reason (String)

    The reason for the webhook changes.



81
82
83
84
85
86
87
# File 'lib/discordrb/data/webhook.rb', line 81

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