Merge branch 'master' of http://github.com/topkecleon/otouto
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 libre.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 libre.fm username has been forgotten.') | ||||
| 		else | ||||
| 			lastfm[msg.from.id_str] = input | ||||
| 			sendReply(msg, 'Your libre.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 libre.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 libre.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
	 topkecleon
					topkecleon