This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot-2/plugins/lastfm.lua
topkecleon 80f363de44 markdown support in messages
other changes & improvements
2015-12-05 09:30:52 -05:00

102 lines
2.4 KiB
Lua
Executable File

if not config.lastfm_api_key then
print('Missing config value: lastfm_api_key.')
print('lastfm.lua will not be enabled.')
return
end
local doc = [[
/lastfm
/np [username]
Returns what you are or were last listening to. If you specify a username, info will be returned for that username.
/fmset <username>
Sets your last.fm username. Otherwise, /np will use your Telegram username. Use "/fmset -" to delete it.
]]
local triggers = {
'^/lastfm[@'..bot.username..']*',
'^/np[@'..bot.username..']*',
'^/fmset[@'..bot.username..']*'
}
local action = function(msg)
lastfm = load_data('lastfm.json')
local input = msg.text:input()
if string.match(msg.text, '^/lastfm') then
sendReply(msg, doc:sub(10))
return
elseif string.match(msg.text, '^/fmset') then
if not input then
sendReply(msg, doc)
elseif input == '-' then
lastfm[msg.from.id_str] = nil
sendReply(msg, 'Your last.fm username has been forgotten.')
else
lastfm[msg.from.id_str] = input
sendReply(msg, 'Your last.fm username has been set to "' .. input .. '".')
end
save_data('lastfm.json', lastfm)
return
end
local url = 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&format=json&limit=1&api_key=' .. config.lastfm_api_key .. '&user='
local username
if input then
username = input
elseif lastfm[msg.from.id_str] then
username = lastfm[msg.from.id_str]
elseif msg.from.username then
username = msg.from.username
else
sendReply(msg, 'Please specify your last.fm username or set it with /fmset.')
return
end
url = url .. URL.escape(username)
jstr, res = HTTPS.request(url)
if res ~= 200 then
sendReply(msg, config.errors.connection)
return
end
local jdat = JSON.decode(jstr)
if jdat.error then
sendReply(msg, jdat.error)
return
end
local jdat = jdat.recenttracks.track[1] or jdat.recenttracks.track
if not jdat then
sendReply(msg, 'No history for this user.')
return
end
local message = input or msg.from.first_name
message = '🎵 ' .. message
if jdat['@attr'] and jdat['@attr'].nowplaying then
message = message .. ' is currently listening to:\n'
else
message = message .. ' last listened to:\n'
end
local title = jdat.name or 'Unknown'
local artist = 'Unknown'
if jdat.artist then
artist = jdat.artist['#text']
end
message = message .. title .. ' - ' .. artist
sendMessage(msg.chat.id, message)
end
return {
action = action,
triggers = triggers,
doc = doc
}