Compare commits

...

10 Commits

53
bot.rb
View File

@ -3,11 +3,17 @@ require 'discordrb'
bot = Discordrb::Bot.new token: ENV['DISCORD_TOKEN'] bot = Discordrb::Bot.new token: ENV['DISCORD_TOKEN']
EMOJI = '🔖' BOOKMARK_EMOJI = '🔖'
PIN_EMOJI = '📌'
TRIM_MESSAGE_LENGTH = 500 TRIM_MESSAGE_LENGTH = 500
$sentence = {}
bot.reaction_add do |event| bot.reaction_add do |event|
next unless event.emoji.name == EMOJI next unless [BOOKMARK_EMOJI, PIN_EMOJI].include? event.emoji.name
if(event.emoji.name == BOOKMARK_EMOJI)
# extract data of the message's author # extract data of the message's author
message_author = event.message.author message_author = event.message.author
message_author_pfp = message_author.avatar_url 'png' message_author_pfp = message_author.avatar_url 'png'
@ -17,6 +23,9 @@ bot.reaction_add do |event|
message_author_fname = "#{message_author_nickname} (#{message_author_distinct})" # this is the 'author' field of the embed 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 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 = "<empty>"
end
original_msg_link = event.message.link original_msg_link = event.message.link
pm = event.user.pm pm = event.user.pm
@ -26,9 +35,49 @@ bot.reaction_add do |event|
embed.url = original_msg_link embed.url = original_msg_link
embed.author = Discordrb::Webhooks::EmbedAuthor.new(icon_url: message_author_pfp, name: message_author_fname) 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) 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 embed.timestamp = event.message.timestamp
end 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. 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 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 event.message.content == "."
if $sentence.empty?
next
end
event << "Congratulations, your sentence is: #{$sentence.values.join(" ")}."
$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 bot.run