2022-09-18 00:01:06 +00:00
require 'dotenv/load'
require 'discordrb'
bot = Discordrb :: Bot . new token : ENV [ 'DISCORD_TOKEN' ]
2022-10-26 09:41:33 +00:00
BOOKMARK_EMOJI = '🔖'
PIN_EMOJI = '📌'
2022-09-18 00:01:54 +00:00
TRIM_MESSAGE_LENGTH = 500
2022-09-18 00:01:06 +00:00
2023-02-11 15:28:31 +00:00
$sentence = { }
2022-09-18 00:01:06 +00:00
bot . reaction_add do | event |
2022-10-26 09:41:33 +00:00
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
2022-12-14 04:21:20 +00:00
if trimmed_msg . empty?
trimmed_msg = " <empty> "
end
2022-10-26 09:41:33 +00:00
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 )
2022-12-14 04:21:20 +00:00
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
2022-10-26 09:41:33 +00:00
embed . timestamp = event . message . timestamp
end
end
if ( event . emoji . name == PIN_EMOJI )
2022-10-26 10:53:33 +00:00
event . message . pin unless event . message . reactions . include? PIN_EMOJI
2022-09-18 00:01:06 +00:00
end
2022-10-26 09:41:33 +00:00
2022-09-18 00:01:06 +00:00
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
2022-10-26 09:41:33 +00:00
bot . reaction_remove do | event |
next unless event . emoji . name == PIN_EMOJI
2022-10-26 11:06:13 +00:00
pin_reactions = event . message . reactions . filter { | el | el . name == PIN_EMOJI }
event . message . unpin if pin_reactions . empty?
2022-10-26 09:41:33 +00:00
nil
end
2023-02-11 15:28:31 +00:00
bot . message ( in : Integer ( ENV [ 'SENTENCE_CHANNEL' ] ) ) do | event |
2023-02-13 11:17:47 +00:00
if [ '?' , '!' , '.' , '...' ] . include? event . message . content
2023-02-11 15:28:31 +00:00
if $sentence . empty?
next
end
2023-02-13 11:36:25 +00:00
event << " Congratulations, your sentence is: #{ $sentence . values . join ( " " ) . gsub ( / \ s, / , " , " ) } #{ event . message . content } "
2023-02-11 15:28:31 +00:00
$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
2022-10-26 09:41:33 +00:00
bot . run