ツイートの画像を全て表示する Discord Bot 作った

シェアする

Discord で Twitter の URL を貼った際に画像を全て表示する Bot を作成した。以下のような感じに Twitter の URL を投稿したら表示されない残りの画像を Bot が代わりに表示してくれる。

開発の経緯

現在 Discord では URL を投稿するとその内容の一部を表示する機能があり、Twitter の URL を投稿した際にもツイートの内容や添付画像などが表示されるようになっている。

しかし、画像が2枚以上あっても最初の1枚しか表示されず、全ての画像を見てもらえない場合がある。

それを回避するために Twitter の URL が投稿されたら API でツイートの情報を取得し、画像が複数枚あればそれらを表示する Bot を開発する事にした。

実装

以下ソース。言語は ruby version 2.5.0, discordrb と twitter の gem が必須。

require 'discordrb'
require 'twitter'

bot = Discordrb::Bot.new token: DISCORD_BOT_TOKEN, client_id: '449249282688679936'

@client = Twitter::REST::Client.new do |config|
	config.consumer_key        = CONSUMER_KEY
	config.consumer_secret     = CONSUMER_SECRET
	config.access_token        = ACCESS_TOKEN
	config.access_token_secret = ACCESS_TOKEN_SECRET
end

bot.message do |event|
	p event.message.content
	content = event.message.content
	m = content.match(/https:\/\/twitter.com\/([a-zA-Z0-9_]+)\/status\/([0-9]+)/)
	next if m.nil?
	twitter_url = m[0]
	tweet = @client.status(m[2])
	if tweet.media?
		media = tweet.media
		photo_urls = []
		if media[0].type == "photo"
			media.each { |m| photo_urls.push(m.media_url_https.to_s) }
		end
		if photo_urls.length > 1
			photo_urls.shift
			photo_urls.each do |url|
				event.respond url
			end
		end
	end
end
 
bot.run

思いついて15分ぐらいでガッと作ったやつだけど上手く動いてくれた。画像が4枚あるとチャットログが一気に埋まってしまうのが難点か。

利用方法とか

公開状態にしているので誰でも利用できるがいくつか注意点がある。

  • Bot が常に正常に動くという保証はしない
  • Bot の仕様は予告なく変更される
  • Twitter へアクセスする際の認証情報が俺個人(@ryomatsu)のものなので俺が投稿されたツイートのユーザーにブロックされていると表示できない
  • もちろんユーザーが非公開にしている場合も表示されない
  • 何があっても俺は知らん

BOT の追加はサーバー管理者であれば以下の URL から可能だ。

https://discordapp.com/oauth2/authorize?client_id=449249282688679936&scope=bot&permissions=0

というわけでこんな感じに discord bot は簡単に作ることができる。

Sponsored Link

シェアする

フォローする