Merge branch 'devbot' into discordjs-v14-upgrade
This commit is contained in:
commit
de27168908
10 changed files with 230 additions and 31 deletions
25
commands/misc/fm.js
Normal file
25
commands/misc/fm.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
const fmlogin = require("../../util/lastfm/fmlogin");
|
||||
const displayCurrentScrobble = require("../../util/lastfm/displayCurrentScrobble");
|
||||
|
||||
module.exports = {
|
||||
name: 'fm',
|
||||
description: 'Last fm commands. See `<prefix>help fm` for more info.',
|
||||
moreHelp: ["Set username: `<prefix>fm set <lastfm_username>`",],
|
||||
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;
|
||||
}
|
||||
if(args.length < 1){
|
||||
sendText = await displayCurrentScrobble(message.author.id);
|
||||
}
|
||||
message.channel.send(sendText);
|
||||
}
|
||||
};
|
|
@ -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`);
|
||||
}
|
||||
}
|
||||
};
|
38
package-lock.json
generated
38
package-lock.json
generated
|
@ -10,7 +10,8 @@
|
|||
"license": "UNLICENSE",
|
||||
"dependencies": {
|
||||
"@zuzak/owo": "^1.14.1",
|
||||
"discord.js": "^14.4.0",
|
||||
"discord.js": "^13.6.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.18.2",
|
||||
"mysql": "^2.18.1",
|
||||
"parse-ms": "^2.1.0",
|
||||
|
@ -640,7 +641,30 @@
|
|||
"ws": "8.14.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
"node": ">=16.11.0",
|
||||
"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/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": {
|
||||
|
@ -2691,6 +2715,16 @@
|
|||
"ws": "8.14.2"
|
||||
}
|
||||
},
|
||||
"dotenv": {
|
||||
"version": "16.4.5",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
||||
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg=="
|
||||
},
|
||||
"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",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"dependencies": {
|
||||
"@zuzak/owo": "^1.14.1",
|
||||
"discord.js": "^14.4.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.18.2",
|
||||
"mysql": "^2.18.1",
|
||||
"parse-ms": "^2.1.0",
|
||||
|
|
|
@ -17,6 +17,8 @@ async function checkAndConvertJSONToSQL(){
|
|||
}
|
||||
}
|
||||
const createDatabaseTables = require('./server/createDatabaseTables');
|
||||
const createLastfmTable = require('./server/createLastfmTable');
|
||||
createLastfmTable();
|
||||
checkAndConvertJSONToSQL();
|
||||
const { Collection, Client, GatewayIntentBits, Partials } = require('discord.js');
|
||||
const client = new Client({ intents: [GatewayIntentBits.Guilds ,GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent], partials: [Partials.Channel] });
|
||||
|
|
21
server/createLastfmTable.js
Normal file
21
server/createLastfmTable.js
Normal file
|
@ -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();
|
||||
}
|
||||
);
|
||||
})
|
||||
}
|
|
@ -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();
|
||||
|
|
48
util/lastfm/displayCurrentScrobble.js
Normal file
48
util/lastfm/displayCurrentScrobble.js
Normal file
|
@ -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;
|
||||
}
|
65
util/lastfm/fmlogin.js
Normal file
65
util/lastfm/fmlogin.js
Normal file
|
@ -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;
|
||||
}
|
|
@ -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}"`);
|
||||
}
|
Loading…
Add table
Reference in a new issue