From 482fc2a1e7fef115be68a4dbc9e78fe9a788fd0d Mon Sep 17 00:00:00 2001 From: SileNce5k Date: Sun, 3 Mar 2024 15:04:35 +0100 Subject: [PATCH 1/5] Add mentioning the bot as a valid prefix --- server/message.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/message.js b/server/message.js index 0740a41..5065a5f 100644 --- a/server/message.js +++ b/server/message.js @@ -7,7 +7,10 @@ module.exports = function(client, owners, message, globalPrefix){ if (serverPrefix) { prefix = serverPrefix; } - + if(message.content.startsWith(`<@${client.user.id}>`)){ + let regex = new RegExp("(<@" + client.user.id + ">) *") + message.content = message.content.replace(regex, prefix); + } let args = message.content.slice(prefix.length).split(" ") const commandName = args.shift().toLowerCase(); From 6ca291136f71ae6ea1e5136f9dc5d4eb1cfcc966 Mon Sep 17 00:00:00 2001 From: SileNce5k Date: Sun, 3 Mar 2024 15:07:27 +0100 Subject: [PATCH 2/5] Add a tip to mention the bot if the new prefix doesn't work --- commands/misc/prefix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commands/misc/prefix.js b/commands/misc/prefix.js index 0e33320..19ec7d1 100644 --- a/commands/misc/prefix.js +++ b/commands/misc/prefix.js @@ -13,7 +13,7 @@ module.exports = { return; }else{ setServerPrefix(client, args[0], message.guild.id) - message.channel.send(`The prefix for this server is now set to ${args[0]}`) + message.channel.send(`The prefix for this server is now set to ${args[0]}\nIf for some reason you are unable to use the new prefix, you can mention the bot as a prefix instead`); } } }; \ No newline at end of file From bdc08b3153284abf9789299daafecaa78e6cb1f9 Mon Sep 17 00:00:00 2001 From: SileNce5k Date: Sun, 3 Mar 2024 19:07:45 +0100 Subject: [PATCH 3/5] Improve the timer reminder message --- util/timer/sendTimerReminder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/timer/sendTimerReminder.js b/util/timer/sendTimerReminder.js index 717c0d4..2f571d2 100644 --- a/util/timer/sendTimerReminder.js +++ b/util/timer/sendTimerReminder.js @@ -1,3 +1,3 @@ module.exports = function (client, timer) { - client.channels.cache.get(timer.channel).send(`<@${timer.user}>, ${timer.customMessage}`); + client.channels.cache.get(timer.channel).send(`<@${timer.user}>, your timer (ID: ${timer.ID}) is up!\nCustom message:\n"${timer.customMessage}"`); } \ No newline at end of file From 8c02dc5517a966cc6ded80e1a537c8f82c6664d3 Mon Sep 17 00:00:00 2001 From: SileNce5k Date: Mon, 4 Mar 2024 12:01:11 +0100 Subject: [PATCH 4/5] Add fm set username command Beginning of the command. Can't do anything other than setting and updating your lastfm username. --- commands/misc/fm.js | 21 ++++++++++++ server.js | 2 ++ server/createLastfmTable.js | 21 ++++++++++++ util/lastfm/fmlogin.js | 65 +++++++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 commands/misc/fm.js create mode 100644 server/createLastfmTable.js create mode 100644 util/lastfm/fmlogin.js diff --git a/commands/misc/fm.js b/commands/misc/fm.js new file mode 100644 index 0000000..5a53fa2 --- /dev/null +++ b/commands/misc/fm.js @@ -0,0 +1,21 @@ +const fmlogin = require("../../util/lastfm/fmlogin"); + +module.exports = { + name: 'fm', + description: 'Last fm commands. See `help fm` for more info.', + moreHelp: ["Set username: `fm set `",], + async execute({ message, args }) { + let sendText = "Something went wrong."; + switch (args[0]) { + case "help": + sendText = this.moreHelp; + break; + case "set": + sendText = await fmlogin(message.author.id, args[1]); + break; + default: + break; + } + message.channel.send(sendText); + } +}; \ No newline at end of file diff --git a/server.js b/server.js index 9057a0d..43bbb81 100644 --- a/server.js +++ b/server.js @@ -17,6 +17,8 @@ async function checkAndConvertJSONToSQL(){ } } const createDatabaseTables = require('./server/createDatabaseTables'); +const createLastfmTable = require('./server/createLastfmTable'); +createLastfmTable(); checkAndConvertJSONToSQL(); const Discord = require('discord.js'); const client = new Discord.Client({ intents: [Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES, Discord.Intents.FLAGS.GUILD_PRESENCES] }); diff --git a/server/createLastfmTable.js b/server/createLastfmTable.js new file mode 100644 index 0000000..6b3c71b --- /dev/null +++ b/server/createLastfmTable.js @@ -0,0 +1,21 @@ +const sqlite3 = require('sqlite3').verbose(); +module.exports = async function () { + const db = new sqlite3.Database('data/database.db'); + return new Promise ((resolve, reject)=>{ + db.run( + `CREATE TABLE IF NOT EXISTS lastfm ( + userID INTEGER PRIMARY KEY, + lastfmUsername TEXT)`, + (err) => { + if (err) { + console.error(`Error while creating table 'lastfm': ${err}`); + reject(err); + } else { + console.log("Table 'lastfm' created successfully."); + resolve(); + } + db.close(); + } + ); + }) +} \ No newline at end of file diff --git a/util/lastfm/fmlogin.js b/util/lastfm/fmlogin.js new file mode 100644 index 0000000..9700bb4 --- /dev/null +++ b/util/lastfm/fmlogin.js @@ -0,0 +1,65 @@ +const sqlite3 = require('sqlite3').verbose(); +module.exports = async function(userID, lastfmUsername) { + let sendText = ""; + // If the user already has a last.fm username set, just update it. + let entryExists = await new Promise((resolve, reject)=>{ + 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 { + resolve(row); + } + db.close(); + } + ); + }); + if (!entryExists) { + + sendText = await new Promise((resolve, reject)=>{ + const db = new sqlite3.Database('data/database.db'); + + db.run( + `INSERT INTO lastfm (userID, lastfmUsername) VALUES (?, ?)`, + [userID, lastfmUsername], + function (error) { + if (error) { + console.error(error); + let sendText = "Error while adding last.fm username. Check console."; + reject(sendText); + } else { + let sendText = `Your last.fm username has been set to '${lastfmUsername}'.`; + console.log(sendText); + resolve(sendText); + } + db.close(); + } + ); + }); + }else { + sendText = await new Promise((resolve, reject)=>{ + const db = new sqlite3.Database('data/database.db'); + db.run( + `UPDATE lastfm SET lastfmUsername = ? WHERE userID = ?`, + [lastfmUsername, userID], + function (error) { + if (error) { + console.error(error); + let sendText = "Error while updating last.fm username. Check console."; + reject(sendText); + } else { + let sendText = `Your last.fm username has been updated to '${lastfmUsername}'.`; + console.log(sendText); + resolve(sendText); + } + db.close(); + } + ); + }); + } + return sendText; +} \ No newline at end of file From b861d943a6ae0fa9b29c9f759a501b18e990f172 Mon Sep 17 00:00:00 2001 From: SileNce5k Date: Mon, 4 Mar 2024 12:40:33 +0100 Subject: [PATCH 5/5] 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 ` to set it."; + } + return sendText; +} \ No newline at end of file