Add librefm plugin
copypasta of drews lastfm
This commit is contained in:
		
							
								
								
									
										101
									
								
								plugins/librefm.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								plugins/librefm.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | local command = 'librefm' | ||||||
|  | local doc = [[``` | ||||||
|  | /lnp [username] | ||||||
|  | Returns what you are or were last listening to. If you specify a username, info will be returned for that username. | ||||||
|  |  | ||||||
|  | /lfmset <username> | ||||||
|  | Sets your last.fm username. Otherwise, /np will use your Telegram username. Use "/fmset -" to delete it. | ||||||
|  | ```]] | ||||||
|  |  | ||||||
|  | local triggers = { | ||||||
|  | 	'^/libre[@'..bot.username..']*', | ||||||
|  | 	'^/lnp[@'..bot.username..']*', | ||||||
|  | 	'^/lfmset[@'..bot.username..']*' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | local action = function(msg) | ||||||
|  |  | ||||||
|  | 	lastfm = load_data('librefm.json') | ||||||
|  | 	local input = msg.text:input() | ||||||
|  |  | ||||||
|  | 	if string.match(msg.text, '^/librefm') then | ||||||
|  | 		sendMessage(msg.chat.id, doc, true, msg.message_id, true) | ||||||
|  | 		return | ||||||
|  | 	elseif string.match(msg.text, '^/lfmset') then | ||||||
|  | 		if not input then | ||||||
|  | 			sendMessage(msg.chat.id, doc, true, msg.message_id, true) | ||||||
|  | 		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('librefm.json', lastfm) | ||||||
|  | 		return | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local url = 'http://alpha.libre.fm/2.0/?method=user.getrecenttracks&format=json&limit=1&api_key=0&user=' | ||||||
|  |  | ||||||
|  | 	local username | ||||||
|  | 	local output = '' | ||||||
|  | 	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 | ||||||
|  | 		output = '\n\nYour username has been set to ' .. username .. '.\nTo change it, use /lfmset <username>.' | ||||||
|  | 		lastfm[msg.from.id_str] = username | ||||||
|  | 		save_data('lastfm.json', lastfm) | ||||||
|  | 	else | ||||||
|  | 		sendReply(msg, 'Please specify your last.fm username or set it with /lfmset.') | ||||||
|  | 		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, 'Please specify your last.fm username or set it with /lfmset.') | ||||||
|  | 		return | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local jdat = jdat.recenttracks.track[1] or jdat.recenttracks.track | ||||||
|  | 	if not jdat then | ||||||
|  | 		sendReply(msg, 'No history for this user.' .. output) | ||||||
|  | 		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 .. output | ||||||
|  | 	sendMessage(msg.chat.id, message) | ||||||
|  |  | ||||||
|  | end | ||||||
|  |  | ||||||
|  | return { | ||||||
|  | 	action = action, | ||||||
|  | 	triggers = triggers, | ||||||
|  | 	doc = doc, | ||||||
|  | 	command = command | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Tommy Jans
					Tommy Jans