Merge branch 'devbot' into discordjs-v14-upgrade

This commit is contained in:
SileNce5k 2024-03-04 13:07:20 +01:00
commit de27168908
No known key found for this signature in database
GPG key ID: 961132EB78C8915F
10 changed files with 230 additions and 31 deletions

25
commands/misc/fm.js Normal file
View 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);
}
};

View file

@ -13,7 +13,7 @@ module.exports = {
return; return;
}else{ }else{
setServerPrefix(client, args[0], message.guild.id) 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
View file

@ -10,7 +10,8 @@
"license": "UNLICENSE", "license": "UNLICENSE",
"dependencies": { "dependencies": {
"@zuzak/owo": "^1.14.1", "@zuzak/owo": "^1.14.1",
"discord.js": "^14.4.0", "discord.js": "^13.6.0",
"dotenv": "^16.4.5",
"express": "^4.18.2", "express": "^4.18.2",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"parse-ms": "^2.1.0", "parse-ms": "^2.1.0",
@ -640,7 +641,30 @@
"ws": "8.14.2" "ws": "8.14.2"
}, },
"engines": { "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": { "node_modules/ee-first": {
@ -2691,6 +2715,16 @@
"ws": "8.14.2" "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": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",

View file

@ -1,26 +1,27 @@
{ {
"name": "discord_bot", "name": "discord_bot",
"version": "1.0.0", "version": "1.0.0",
"description": "My second attempt at making a bot in javascript", "description": "My second attempt at making a bot in javascript",
"main": "server.js", "main": "server.js",
"dependencies": { "dependencies": {
"@zuzak/owo": "^1.14.1", "@zuzak/owo": "^1.14.1",
"discord.js": "^14.4.0", "discord.js": "^14.4.0",
"express": "^4.18.2", "dotenv": "^16.4.5",
"mysql": "^2.18.1", "express": "^4.18.2",
"parse-ms": "^2.1.0", "mysql": "^2.18.1",
"prompt-sync": "^4.2.0", "parse-ms": "^2.1.0",
"seedrandom": "^3.0.5", "prompt-sync": "^4.2.0",
"sqlite3": "^5.1.6", "seedrandom": "^3.0.5",
"valid-url": "^1.0.9" "sqlite3": "^5.1.6",
}, "valid-url": "^1.0.9"
"scripts": { },
"test": "echo \"Error: no test specified\" && exit 1" "scripts": {
}, "test": "echo \"Error: no test specified\" && exit 1"
"repository": { },
"type": "git", "repository": {
"url": "git+https://github.com/SileNce5k/discord_bot.git" "type": "git",
}, "url": "git+https://github.com/SileNce5k/discord_bot.git"
"author": "SileNce5k", },
"license": "UNLICENSE" "author": "SileNce5k",
} "license": "UNLICENSE"
}

View file

@ -17,6 +17,8 @@ async function checkAndConvertJSONToSQL(){
} }
} }
const createDatabaseTables = require('./server/createDatabaseTables'); const createDatabaseTables = require('./server/createDatabaseTables');
const createLastfmTable = require('./server/createLastfmTable');
createLastfmTable();
checkAndConvertJSONToSQL(); checkAndConvertJSONToSQL();
const { Collection, Client, GatewayIntentBits, Partials } = require('discord.js'); const { Collection, Client, GatewayIntentBits, Partials } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds ,GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent], partials: [Partials.Channel] }); const client = new Client({ intents: [GatewayIntentBits.Guilds ,GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent], partials: [Partials.Channel] });

View 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();
}
);
})
}

View file

@ -7,7 +7,10 @@ module.exports = function(client, owners, message, globalPrefix){
if (serverPrefix) { if (serverPrefix) {
prefix = 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(" ") let args = message.content.slice(prefix.length).split(" ")
const commandName = args.shift().toLowerCase(); const commandName = args.shift().toLowerCase();

View 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
View 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;
}

View file

@ -1,3 +1,3 @@
module.exports = function (client, timer) { 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}"`);
} }