diff --git a/commands/misc/fm.js b/commands/misc/fm.js index 5a53fa2..9b0d0f4 100644 --- a/commands/misc/fm.js +++ b/commands/misc/fm.js @@ -1,4 +1,5 @@ const fmlogin = require("../../util/lastfm/fmlogin"); +const displayCurrentScrobble = require("../../util/lastfm/displayCurrentScrobble"); module.exports = { name: 'fm', @@ -16,6 +17,9 @@ module.exports = { default: break; } + if(args.length < 1){ + sendText = await displayCurrentScrobble(message.author.id); + } message.channel.send(sendText); } }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 812df3c..cc76593 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@zuzak/owo": "^1.14.1", "discord.js": "^13.6.0", + "dotenv": "^16.4.5", "express": "^4.18.2", "mysql": "^2.18.1", "parse-ms": "^2.1.0", @@ -588,6 +589,17 @@ "npm": ">=7.0.0" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2585,6 +2597,11 @@ "ws": "^8.9.0" } }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index a50d5c5..06681ce 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dependencies": { "@zuzak/owo": "^1.14.1", "discord.js": "^13.6.0", + "dotenv": "^16.4.5", "express": "^4.18.2", "mysql": "^2.18.1", "parse-ms": "^2.1.0", diff --git a/util/lastfm/displayCurrentScrobble.js b/util/lastfm/displayCurrentScrobble.js new file mode 100644 index 0000000..456a512 --- /dev/null +++ b/util/lastfm/displayCurrentScrobble.js @@ -0,0 +1,48 @@ +require("dotenv").config(); +module.exports = async function(userID) { + let sendText = ""; + let scrobble = {}; + const apiKey = process.env.LAST_FM_API_KEY; + let lastfmUsername = await new Promise((resolve, reject)=>{ + const sqlite3 = require('sqlite3').verbose(); + const db = new sqlite3.Database('data/database.db'); + db.get( + `SELECT * FROM lastfm WHERE userID = ?`, + [userID], + (error, row) => { + if (error) { + console.error(error); + reject(error); + } else { + if (row == undefined) { + resolve(undefined); + } + resolve(row.lastfmUsername); + } + db.close(); + } + ); + }); + if(lastfmUsername != undefined){ + scrobble = await new Promise ((resolve, reject) => { + fetch(`https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=${lastfmUsername}&api_key=${apiKey}&format=json`) + .then(response => response.json()) + .then(data => { + let scrobble = {}; + let track = data.recenttracks.track[0]; + scrobble.artist = track.artist["#text"]; + scrobble.song = track.name; + scrobble.album = track.album["#text"]; + resolve(scrobble); + }) + .catch(error => { + console.error(error); + reject(error); + }); + }); + sendText = `Currently scrobbling:\n${scrobble.artist} - ${scrobble.song}\nAlbum: ${scrobble.album}`; + } else { + sendText = "You haven't set your last.fm username yet. Use `fm set ` to set it."; + } + return sendText; +} \ No newline at end of file