From b861d943a6ae0fa9b29c9f759a501b18e990f172 Mon Sep 17 00:00:00 2001
From: SileNce5k <ozzynexus@gmail.com>
Date: Mon, 4 Mar 2024 12:40:33 +0100
Subject: [PATCH] fm command defaults to displaying the current scrobble

---
 commands/misc/fm.js                   |  4 +++
 package-lock.json                     | 17 ++++++++++
 package.json                          |  1 +
 util/lastfm/displayCurrentScrobble.js | 48 +++++++++++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 util/lastfm/displayCurrentScrobble.js

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 <lastfm_username>` to set it.";
+    }
+    return sendText;
+}
\ No newline at end of file