5d26c4289c
+ Reddit_post + Eindeutschung von Reddit + Site_header + Soundcloud + Speedtest + Spotify + Surrogate + Tex + Xkcd + Yourls - Plugin-Name wird nun angezeigt, wenn Bot getriggert wird - Wie immer: kleine Änderungen
53 lines
1.5 KiB
Lua
53 lines
1.5 KiB
Lua
local spotify = {}
|
|
|
|
local https = require('ssl.https')
|
|
local json = require('dkjson')
|
|
local utilities = require('otouto.utilities')
|
|
|
|
spotify.triggers = {
|
|
"open.spotify.com/track/([A-Za-z0-9-]+)",
|
|
"play.spotify.com/track/([A-Za-z0-9-]+)"
|
|
}
|
|
|
|
local BASE_URL = 'https://api.spotify.com/v1'
|
|
|
|
function spotify:get_track_data(track)
|
|
local url = BASE_URL..'/tracks/'..track
|
|
local res,code = https.request(url)
|
|
if code ~= 200 then return nil end
|
|
local data = json.decode(res)
|
|
return data
|
|
end
|
|
|
|
function spotify:send_track_data(data, self, msg)
|
|
local name = data.name
|
|
local album = data.album.name
|
|
local artist = data.artists[1].name
|
|
local preview = data.preview_url
|
|
local milliseconds = data.duration_ms
|
|
|
|
-- convert s to mm:ss
|
|
local totalseconds = math.floor(milliseconds / 1000)
|
|
local duration = makeHumanTime(totalseconds)
|
|
|
|
local text = '*'..name..'* von *'..artist..'* aus dem Album *'..album..'* _('..duration..')_'
|
|
if preview then
|
|
utilities.send_typing(self, msg.chat.id, 'upload_audio')
|
|
local file = download_to_file(preview, name..'.mp3')
|
|
utilities.send_audio(self, msg.chat.id, file, msg.message_id, totalseconds, artist, name)
|
|
return
|
|
else
|
|
utilities.send_reply(self, msg, text, true)
|
|
return
|
|
end
|
|
end
|
|
|
|
function spotify:action(msg, config, matches)
|
|
local data = spotify:get_track_data(matches[1])
|
|
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
|
|
spotify:send_track_data(data, self, msg)
|
|
return
|
|
end
|
|
|
|
return spotify
|