require 'dotenv/load' require 'discordrb' bot = Discordrb::Bot.new token: ENV['DISCORD_TOKEN'] BOOKMARK_EMOJI = '🔖' PIN_EMOJI = '📌' TRIM_MESSAGE_LENGTH = 500 $sentence = {} bot.reaction_add do |event| next unless [BOOKMARK_EMOJI, PIN_EMOJI].include? event.emoji.name if(event.emoji.name == BOOKMARK_EMOJI) # extract data of the message's author message_author = event.message.author message_author_pfp = message_author.avatar_url 'png' message_author_nickname = message_author.display_name message_author_distinct = message_author.distinct message_author_fname = "#{message_author_nickname} (#{message_author_distinct})" # this is the 'author' field of the embed trimmed_msg = "#{event.message.content[0..TRIM_MESSAGE_LENGTH]}#{'...' if event.message.content.length > TRIM_MESSAGE_LENGTH}" # trim the string to TRIM_MESSAGE_LENGTH chars max to not make the embed too huge if trimmed_msg.empty? trimmed_msg = "" end original_msg_link = event.message.link pm = event.user.pm pm.send_embed 'Bookmark created!' do |embed| embed.title = 'Go to message' embed.url = original_msg_link embed.author = Discordrb::Webhooks::EmbedAuthor.new(icon_url: message_author_pfp, name: message_author_fname) embed << Discordrb::Webhooks::EmbedField.new(name: 'Message (trimmed)', value: trimmed_msg) if !event.message.attachments.empty? event.message.attachments.each_index do |idx| attachment = event.message.attachments[idx] embed << Discordrb::Webhooks::EmbedField.new(name: "Attachment \##{idx + 1}", value: attachment.url) end end embed.timestamp = event.message.timestamp end end if(event.emoji.name == PIN_EMOJI) event.message.pin unless event.message.reactions.include? PIN_EMOJI end nil # `event` is of type Respondable, so the return line of the block needs to be nil to prevent the bot sending something in the chhannel the reaction occured. end bot.reaction_remove do |event| next unless event.emoji.name == PIN_EMOJI pin_reactions = event.message.reactions.filter {|el| el.name == PIN_EMOJI} event.message.unpin if pin_reactions.empty? nil end bot.message(in: Integer(ENV['SENTENCE_CHANNEL'])) do |event| if ['?', '!', '.', '...', '?!'].include? event.message.content if $sentence.empty? next end event << "Congratulations, your sentence is: #{$sentence.values.join(" ").gsub(/\s([^\w\s])/, '\\\0')}#{event.message.content}" $sentence.clear next end $sentence[event.message.id] = event.message.content end bot.message_delete(in: Integer(ENV['SENTENCE_CHANNEL'])) do |event| $sentence.delete(event.id) end bot.message_edit(in: Integer(ENV['SENTENCE_CHANNEL'])) do |event| $sentence[event.message.id] = event.message.content end bot.run