Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/discordrb/data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,6 @@
require 'discordrb/data/collectibles'
require 'discordrb/data/primary_server'
require 'discordrb/data/server_preview'
require 'discordrb/data/sticker'
require 'discordrb/data/call'
require 'discordrb/data/snapshot'
7 changes: 7 additions & 0 deletions lib/discordrb/data/message.rb
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ class Message
# @return [Array<Embed>] the embed objects contained in this message.
attr_reader :embeds

# @return [Array<Sticker>] the sticker objects contained in this message.
attr_reader :sticker_items
alias_method :stickers, :sticker_items

# @return [Array<Reaction>] the reaction objects contained in this message.
attr_reader :reactions

Expand Down Expand Up @@ -228,6 +232,9 @@ def initialize(data, bot)

@pinned_at = data['pinned_at'] ? Time.parse(data['pinned_at']) : nil

@sticker_items = []
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be preferable if we used the safe navigation operator here and OR logic. It also isn't really necessary to provide the message to the sticker item. Nitpicky though

(data['sticker_items'] || data['stickers'])&.map { |item| Sticker::Item.new(item, @bot) } || []

@sticker_items = data['sticker_items'].map { |e| Sticker::Item.new(e, self, @bot) } if data['sticker_items']

@call = data['call'] ? Call.new(data['call'], @bot) : nil

@snapshots = data['message_snapshots']&.map { |snapshot| Snapshot.new(snapshot['message'], @bot) } || []
Expand Down
58 changes: 58 additions & 0 deletions lib/discordrb/data/sticker.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# frozen_string_literal: true

module Discordrb
# Server sticker
class Sticker
FORMATS = {
png: 1,
apng: 2,
lottie: 3,
gif: 4
}.freeze

class Item
include IDObject

FORMATS.each do |name, value|
define_method("#{name}?") do
@format_type == value
end
end

# @return [Message] the message this sticker belongs to.
attr_reader :message

# @return [String] the sticker name
attr_reader :name

# @return [String] the sticker description
attr_reader :description

# @return [Integer] the sticker type
attr_reader :format_type

# @return [String] the sticker extension
attr_reader :extension

# @!visibility private
def initialize(data, message, bot)
@bot = bot
@message = message

@name = data['name']
@description = data['description']
@id = data['id']&.to_i
@format_type = data['format_type']

case @format_type
when 1, 2
@extension = 'png'
when 3
@extension = 'json'
when 4
@extension = 'gif'
end
end
end
end
end