Class: Dispander::Core
- Inherits:
-
Object
- Object
- Dispander::Core
- Includes:
- Discorb::Extension
- Defined in:
- lib/dispander/extension.rb
Constant Summary collapse
- @@discord_url_pattern =
/(?!<)https:\/\/(ptb.|canary.)?discord(app)?.com\/channels\/(?<guild>[0-9]{17,})\/(?<channel>[0-9]{17,})\/(?<message>[0-9]{17,})(?!>)/
Instance Attribute Summary collapse
-
#delete_emoji ⇒ Discorb::Emoji
削除リアクションとして使う絵文字。.
Instance Method Summary collapse
-
#create_embed_from_attachment(attachment) ⇒ Discorb::Embed
添付ファイルから埋め込みを作成します。.
-
#create_embed_from_message(message) ⇒ Discorb::Embed
メッセージから埋め込みを作成します。.
-
#delete_message(event) ⇒ Object
埋め込みを削除します。.
-
#dispand(base_message) ⇒ Array<Discorb::Message>
メッセージを解析して、埋め込みを送信します。.
-
#initialize(client, delete_emoji: Discorb::UnicodeEmoji["wastebasket"]) ⇒ Core
constructor
A new instance of Core.
-
#should_expand?(base_message, ids) ⇒ Boolean
メッセージを展開するかどうか。 デフォルトでは同じサーバーのみ展開されます。 このメソッドをオーバーライドすることにより、条件を変更することができます。.
Constructor Details
#initialize(client, delete_emoji: Discorb::UnicodeEmoji["wastebasket"]) ⇒ Core
Returns a new instance of Core.
9 10 11 12 |
# File 'lib/dispander/extension.rb', line 9 def initialize(client, delete_emoji: Discorb::UnicodeEmoji["wastebasket"]) @delete_emoji = delete_emoji super(client) end |
Instance Attribute Details
#delete_emoji ⇒ Discorb::Emoji
Returns 削除リアクションとして使う絵文字。.
25 26 27 |
# File 'lib/dispander/extension.rb', line 25 def delete_emoji @delete_emoji end |
Instance Method Details
#create_embed_from_attachment(attachment) ⇒ Discorb::Embed
添付ファイルから埋め込みを作成します。
100 101 102 103 104 105 |
# File 'lib/dispander/extension.rb', line 100 def () = Discorb::Embed.new( image: .proxy_url, ) end |
#create_embed_from_message(message) ⇒ Discorb::Embed
メッセージから埋め込みを作成します。
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/dispander/extension.rb', line 76 def () = Discorb::Embed.new .description = .content . = . . = Discorb::Embed::Author.new( ..to_s, icon: ..avatar.url, ) . = Discorb::Embed::Footer.new( "#" + .channel.name ) if ( = .[0]) && .image? .image = .proxy_url end end |
#delete_message(event) ⇒ Object
埋め込みを削除します。
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/dispander/extension.rb', line 112 def (event) return unless event.emoji == @delete_emoji return if event.user_id == @client.user.id = event..wait return if ..empty? return unless . == @client.user _, , operator_id, = *..url.match(/^http:\/\/a.io\/([0-9]+)-([0-9]+)-([0-9,]+)$/) return unless == event.user_id || operator_id == event.user_id .split(",").each do || event.channel.().wait end end |
#dispand(base_message) ⇒ Array<Discorb::Message>
メッセージを解析して、埋め込みを送信します。
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dispander/extension.rb', line 34 def dispand() = [] .content.scan(@@discord_url_pattern).each do |match| guild_id, channel_id, = *match next unless (, [guild_id, channel_id, ]) = [] = [] begin next unless guild = @client.guilds[guild_id] next unless channel = guild.channels[channel_id] || @client.fetch_channel(channel_id).wait next unless = channel.().wait rescue Discorb::NotFoundError, NoMethodError next else = () << += . += .[1..]&.filter(&:image?)&.map { || () }.to_a until ( = .slice!(..10)).empty? << .channel.post(embeds: ).wait end .url = "http://a.io/#{..id}-#{..id}-#{.map(&:id).join(",")}" = [0]. [0] = [0].add_reaction(@delete_emoji) [0].edit(embeds: ).wait += end end end |
#should_expand?(base_message, ids) ⇒ Boolean
メッセージを展開するかどうか。 デフォルトでは同じサーバーのみ展開されます。 このメソッドをオーバーライドすることにより、条件を変更することができます。
139 140 141 |
# File 'lib/dispander/extension.rb', line 139 def (, ids) .guild.id == ids[0] end |