GithubHelp home page GithubHelp logo

wtfnotavailable / discord-musicbot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sudhanplayz/discord-musicbot

159.0 159.0 75.0 8.17 MB

Discord Music Bot Source Tree

License: Other

Shell 2.90% JavaScript 55.95% TypeScript 38.09% Dockerfile 0.06% Makefile 0.13% SCSS 2.87%

discord-musicbot's People

Contributors

aryantah2005 avatar assassin654 avatar biocla avatar cloweeee avatar cobianic avatar colonel-ltd avatar darrenofficial avatar dascanard avatar dependabot[bot] avatar devamiyo avatar gazorhuman avatar gspxrk avatar joeyk710 avatar jotarokujo0525 avatar kiyoshikuncool avatar lewdhutao avatar neko-life avatar renovate-bot avatar renovate[bot] avatar rj1002 avatar saud-97 avatar shubhtoy avatar sprucecellodev125 avatar sudhanplayz avatar techgenius7777 avatar themystiq avatar topjor avatar uotlaf avatar yekaranfil avatar zexxx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

discord-musicbot's Issues

Cannot read properties of undefined (reading 'logger')

Frequent:

djs-bot    | [27:9:2023 - 20:49] [ERROR] | [FATAL] Possibly Unhandled Rejection
djs-bot    |    Reason: TypeError: Cannot read properties of undefined (reading 'logger')
djs-bot    |
djs-bot    | Promise {
djs-bot    |   <rejected> TypeError: Cannot read properties of undefined (reading 'logger')
djs-bot    |       at warn (/djs-bot/lib/Bot.js:72:8)
djs-bot    |       at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
djs-bot    |       at async /djs-bot/util/controlChannel.js:146:22
djs-bot    | }

Cause:

.catch(client.warn);

Verify correct export in:

const Bot = require('./lib/Bot');
const client = new Bot();
module.exports.getClient = () => client;

Error is referring to:

warn(...data) {
this.logger.warn(data);
}

`playlists` subcommand not working

Please describe the problem you are having in as much detail as possible:

/playlists add-remove subcommand's autocomplete is broken:

        /**
         * Autocomplete handler, takes autocomplete options specified in the command properties
         * and shows them to the user
         * node_modules\discord.js\src\structures\AutocompleteInteraction.js
         * @param {import("discord.js").Interaction} interaction 
         * @returns 
         */
        static async checkAutocomplete(interaction) {
                if (!interaction.isAutocomplete()) return;

                const client = getClient();

                // Getting input from user
                /** @type {string} */
                let input = interaction.options.getFocused() || " ";
                // Gets the index of the option in which the user is currently typing
                /** @type {number} */
                const index = interaction.options._hoistedOptions
                        .map((option) => option.focused)
                        .indexOf(true);
                // Gets the autocomplete options provided by the command
                /** @type {{name:string, value:string}[]} */
                let targets = interaction.options._subcommand ?
                        await client.slash
                                .get(interaction.commandName)
                                ?.options.find(
                                        (option) => option.name === interaction.options._subcommand)
                                .autocompleteOptions(input, index, interaction, client) :
                        await client.slash
                                .get(interaction.commandName)
                                ?.autocompleteOptions?.(input, index, interaction, client);

                // guards for outdated/ex other bot command,
                // simply don't respond to render error loading message in the discord client
                if (!targets) return;

                // This should make the algorithm faster by pre preparing the array, but no noticable changes
                targets.forEach((option) => (option.filePrepared = fuzzysort.prepare(option.name)));
                targets.map((option) => option.filePrepared);

                fuzzysort.go(input, targets, {
                        threshold: -10000, // Don't return matches worse than this (higher is faster)
                        limit: 30, // Don't return more results than this (lower is faster)
                        all: false, // If true, returns all results for an empty search

                        key: "name", // For when targets are objects
                });

                // Avoiding calculating levenshteing distances if it's not needed
                if (targets.length > 1) {
                        // Assigns Levenshtein distances for each option based on what the user is currently typing
                        for (let option of targets) {
                                option.levenshteinDistance = levDistance(option.name, input);
                        }
                        // Sorts the array of targets and displays it according to the Levenshtein distance from the typed value
                        targets.sort((a, b) => a.levenshteinDistance - b.levenshteinDistance);
                }
                return interaction.respond(targets.slice(0, 24));
        }

specifically:

let targets = interaction.options._subcommand ?
                        await client.slash
                                .get(interaction.commandName)
                                ?.options.find(
                                        (option) => option.name === interaction.options._subcommand)
                                .autocompleteOptions(input, index, interaction, client) :
                        await client.slash
                                .get(interaction.commandName)
                                ?.autocompleteOptions?.(input, index, interaction, client);

basically this might not be accurate for subcommand groups:

const index = interaction.options._hoistedOptions
                        .map((option) => option.focused)
                        .indexOf(true);

The indexing from the autocomplete options in the subcommands never trigger as the index is never referred to correctly for the specific subcommand objects

[DJS-BOT] - Switching DJ from user boolean property to Server Role property

https://github.com/wtfnotavailable/Discord-MusicBot/blob/199396490b81ce0e08be2ee2ba76dd20751c82b8/djs-bot/prisma/schema.prisma#L42C39-L42C39

As the title implies, further development and analysis has brought this issue to light.
I had mistakenly opted to save if a user was a DJ to the DB by flagging a boolean property, which isn't really ideal.
The proposed solution is to create a new Guild model within the current prisma schema which has a DJRole property of type String? which will be the ID of the role which be used to give special permissions to users using the bot.

Multi-language support and interface buttons

1: Multi-language support

  • If you consider adding multilingual support to your bot, please inform me for "Turkish, French and Azerbaijani" language translations. I will complete them for you with pleasure.

2: Play, NowPlaying, Settings etc. interface buttons

  • Use buttons in the bot interface for faster and easier use. I am adding an example image for this.

discord_music_bot_play_interface

3: General admin commands

  • Add simple commands without needing a different bot. For example; mute, unmute, ban, unban, kick, move and etc.

Thanks andR egards...

[Dashboard] - TypeError: param {data} is undefined on get commands api call

Please describe the problem you are having in as much detail as possible:

          I seem to have mine working somewhat :). The bot works, loads and plays music. 

But when I go to my dashboard, it gives me this error:
Unhandled Runtime Error

TypeError: param is undefined

Source:
utils/data.ts (21:30) @ getData/</commands<

  19 | let commands = await (apiCall("GET", "/commands", {
  20 |     method: "GET"
> 21 | })).then(async ({data}) => {
     |                      ^
  22 |     return await data;
  23 | });
  24 | resolve(await commands)

Image of the error:
https://i.imgur.com/Of58v5I.png

Docker Compose, with stuff redacted:
https://paste.ec/paste/5baGzWAl#u-i6fk4vyuBB7B9r33+8WesZnqLaDsYIyexCeEgflFr

Also, on an unrelated note..
There seems to be a few settings missing from config.js, that the v5.0 had in their config.js. Specifically missing the autoQueue, 247 features 😄 .

And the v5.0 also had some auto cleaning feature, where it removed the last few messages in the channel. Not sure if that ever was toggleable or just default. E.g. SudhanPlayz#1023 & SudhanPlayz#936

Originally posted by @vp-en in SudhanPlayz#1227 (comment)

  • Priority this issue should have – please be realistic and elaborate if possible: Mid-High

ТЫ ЕБАНЫЙ ДОЛБАЕБ ИДИ НАХУЙ С ЭТОЙ ЖИЗНИ УЕБИЩЕ ЕБАНОЕ

Please describe the problem you are having in as much detail as possible:

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

// Place your code here

If you have your own setup, without the original docker configuration, please provide:

Further details:

  • discord.js version:
  • Node.js version:
  • Operating system:
  • Priority this issue should have – please be realistic and elaborate if possible:

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

irrelevant stats information

In case the bot were to be connected to more than one lavalink the relevant stats shown with the /stats command would only show the first node (which is a bit misleading)

{
name: `Lavalink stats`,
value: `\`\`\`yml\nUptime: ${ lavauptime }\nRAM: ${ lavaram } MB\nPlaying: ${
client.manager.Engine.nodes.values().next().value.stats.playingPlayers
} out of ${
client.manager.Engine.nodes.values().next().value.stats.players
}\nWrapper: ${
client.config.musicEngine
}\`\`\``,
inline: true,
},

The lines above should be removed or changed to show an aggregate info of all the nodes that are connected

Commit NPM lock file into source control

Is your feature request related to a problem? Please describe.

The package-lock.json file generated by NPM during install is currently being ignored under .gitignore.

This is specifically discouraged by NPM's documentation found here. The relevant extract is shown below:

This file is intended to be committed into source repositories, and serves various purposes:

  • Describe a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies.
  • Provide a facility for users to "time-travel" to previous states of node_modules without having to commit the directory itself.
  • Facilitate greater visibility of tree changes through readable source control diffs.
  • Optimize the installation process by allowing npm to skip repeated metadata resolutions for previously-installed packages.
  • As of npm v7, lockfiles include enough information to gain a complete picture of the package tree, reducing the need to read package.json files, and allowing for significant performance improvements.

Most significantly, adding the package-lock.json allows for reproducibility in both testing and production deployments. For example, it would become possible to easily distinguish between a regression introduced by developer code, versus some dependency that just so happened to change versions. Furthermore, it will reduce confusion among end-users, who may be annoyed that newer deployments don't share the same behavior to older deployments.

Describe the ideal solution

Describe alternatives you've considered

None considered.

Additional context

This issue is copy of #1266 on the SudhanPlayz repo, since I'm not exactly sure which is being actively developed.

#40 Docs implementation

PR #40 has been merged and thus v5.2 has gone up in beta development, Docs need to be updated accordingly

[Context] - DC and Make script rebuild bug

Please describe the problem you are having in as much detail as possible:

since #21 the make command presented a bug on the rebuild script:
image
image

rebuild accept no* arguments, so like exclude which image to rebuild make rebuild noll nofe nodb so i think i should have added a check to shift the argument

As analysed, the probable solution is:

if [[ "$1" == "rebuild" ]]; then
    shift
done

[DJS-BOT] - Player control buttons

Is your feature request related to a problem? Please describe.

@BioCla One of the reasons I liked v5 is because it had buttons. It would be pointless to create a v5.1 without buttons

The player needs the buttons for they simplified the work in addition to the pause, play, stop, and volume commands

Originally posted by @C-EO in SudhanPlayz#1227 (comment)

Describe the ideal solution

I'll take that as a suggestion. I was already planning on reimplementing them under a different dress:
Instead of having it be on the player message itself it would be in a dedicated channel (kinda like hydra).

I'll try to reimplement it as you suggested as well

Originally posted by @BioCla in SudhanPlayz#1227 (comment)

Describe alternatives you've considered

None

Additional context

Can't access them

MODULE_NOT_FOUND

Please describe the problem you are having in as much detail as possible:

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

// Place your code here
up to date, audited 385 packages in 4s
45 packages are looking for funding
  run `npm fund` for details
10 moderate severity vulnerabilities
To address all issues possible (including breaking changes), run:
  npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
node:internal/modules/cjs/loader:1147
  throw err;
  ^
Error: Cannot find module '../api/v1/dist'
Require stack:
- /home/container/lib/Bot.js
- /home/container/bot.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (/home/container/lib/Bot.js:7:24)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/home/container/lib/Bot.js', '/home/container/bot.js' ]
}
Node.js v20.10.0

If you have your own setup, without the original docker configuration, please provide:

Further details:

  • discord.js version: 14.14.1
  • Node.js version: v20.10.0
  • Operating system: Ubuntu 22.04 (Pterodactyl image ghcr.io/pterodactyl/yolks:nodejs_20)
  • Priority this issue should have – please be realistic and elaborate if possible:

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

401 error in /api/v1/dashboard while logging through discord OAuth causing a loop while logging

When I try to log into the web dashboard the OAuth process loops and the /api/v1/dashboard endpoint gives a 404 causing that the logging process to loop. I'm using the 5.1/2 repo and deploying using docker. Here are my logs, they don't show any errors. https://gist.github.com/NereaCassian/117674bf44a2238b76a31994aa346713

I have already notified this issue in the discord server, I'm just creating this issue to keep track. The web dashboard is public, you can check the error by yourself https://judy.nereacassian.com

What I have already tried:

  • Resetting both bot token and client secret
  • Rebuild the bot
  • Create a new discord application and try using the new one
  • Checked the gateway intents and granted all of them
    image
  • Resetting my JWT secret
  • Using different devices and browsers
  • Checked the redirection URIs
    image

The 401 error

image

This is my NGINX config

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;
}
location /api {
    proxy_pass http://127.0.0.1:1023;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;
}
  • Operating system: Ubuntu 22.04.03
  • Priority this issue should have : Low

Refactor playlist command

Currently the playlist command uses a lot of intricate steps to perform it's functions, taking many parameters from hooks and querying DBs in different ways depending on the input. While it's functional it's not very maintainable.

This feature request proposes to refactor the playlist command to become a super set of commands which will have it's own subset of commands, using the newly implemented sub commands dynamic parser (See config commands in Utility category)

Dashboard fails to compile

Please describe the problem you are having in as much detail as possible:

The latest release causes the dashboard container to loop due to failed compilation.

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

Linting and checking validity of types  ..Failed to compile.
2024-01-06 20:54:49 
2024-01-06 20:54:49 ./src/libs/kbdsrct.ts:101:17
2024-01-06 20:54:49 Type error: Type 'string | undefined' is not assignable to type 'string'.
2024-01-06 20:54:49   Type 'undefined' is not assignable to type 'string'.
2024-01-06 20:54:49 
2024-01-06 20:54:49    99 |         if (!ref) {
2024-01-06 20:54:49   100 |             allShortcuts.push({
2024-01-06 20:54:49 > 101 |                 category: k.category,
2024-01-06 20:54:49       |                 ^
2024-01-06 20:54:49   102 |                 shorcuts: [k],
2024-01-06 20:54:49   103 |             });
2024-01-06 20:54:49   104 |

I was able to make it compile by changing category to category? in the following snippet of code from file dashboard/src/interfaces/kbdsrct.ts

export interface IShorcutGroup {
   category: string;
   shorcuts: IKbdsrct[];

Error: Cannot find module '../api/v1/dist

Please describe the problem you are having in as much detail as possible:

In djs-bot/lib/Bot.js, there seems to be a problem, app and wsApp are being called from api/v1/dist, except that the dist folder isn't actually there I've checked this git branch and it doesn't seem to be a problem that is on my end because the folder is not on git either.

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

image

const { app, wsApp } = require("../api/v1/dist");

If you have your own setup, without the original docker configuration, please provide:

Further details:

  • discord.js version: 14.8.0
  • Node.js version: v18.19.0
  • Operating system: don't know, using ptero
  • Priority this issue should have – please be realistic and elaborate if possible:

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

[DJS-BOT] - Update the code to djs v14 format

While @BioCla is busy making the dashboard, I will update the whole slash commands code to djs v14 support. I noticed that the code is still using djs v13 format. Unfortunately i cant do it anytime soon, I would say in 2 weeks as i will have long school holiday during that time.

Add shuffle button to player control embed

Is your feature request related to a problem? Please describe.

You can't send slash commands to the control-channel, so you need to send the shuffle command in another channel, its not a big deal but a little bit annoying.

Describe the ideal solution

Either adding a shuffle button in the embed, allowing to turn on shuffle sending "shuffle" in the control-channel or allowing slash commands in the control-channel.

[Feature] Pterodactyl Egg Support

Is your feature request related to a problem? Please describe.

Pterodactyl Panel running on 8080 port and it's conflict between bot and panel. Pterodactyl uses a docker and is easy to use so it's a great alternative

Playlists play command

.setChoices(
{ name: "View", value: "view" },
{ name: "Create", value: "create" },
{ name: "Delete", value: "delete" },
{ name: "Add", value: "add" },
{ name: "Remove", value: "remove" },
)

I forgot to implement the play function for the playlists.
The playlists command should have a new option called play which, once a playlist is selected, should add all the songs in that playlist into the queue of bot.

Alternatively, since sub commands are now supported, the command could be refactored to have various sub commands instead of options

Ability to use Spotify

Is your feature request related to a problem? Please describe.

One of the challenges I have faced when using the bot to play music is the censorship of explicit words in songs sourced from YouTube. Many Spotify links I have sent always have played a clean version of it from YouTube. This censorship can significantly impact the quality and authenticity of the listening experience, especially when a user requests a certain song and it plays something completely different.

Describe the ideal solution

I would like to suggest a feature that allows the bot to play songs directly from Spotify. This functionality would ensure the preservation of unaltered content, allowing users to experience the music they requested exactly as intended, free from any censorship or modification of explicit lyrics.

Additional context

The ability to play songs directly from Spotify would be a valuable addition to the bot, addressing the issue of censorship while offering a more enjoyable music listening experience. This feature would align with the desire for unaltered music playback and would be a significant improvement for users who value the song how it was suppose to be heard (unless they requested for the clean version)

Control Channel

Is your feature request related to a problem? Please describe.

Doing this command creates a new channel this could disturb users

Describe the ideal solution

Ask the user to select which channel they want to initialize it to. with a discord drop-down menu in the command

or another command ex: set-control-channel

[Lite version] "No database configured" error when trying to play song.

Please describe the problem you are having in as much detail as possible:

When I run the lite version with "make lite" I get a "Error: No database configured" message despite me not running it with the 'db' option.

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

[13:11:2023 - 23:12] [ERROR] | [FATAL] Possibly Uncaught Exception
        Reason: Error: No database configured

uncaughtException

If you have your own setup, without the original docker configuration, please provide:

I have both DATABASE and DATABASE_URL set to "" in the .env file
Running the latest master branch with Node.js v21.4.0 on Arch Linux.

Multisesion/channel Bot

Is your feature request related to a problem?
No, its just a feature request.

A clear and concise description of what the problem is.
If I need more than 1 bot, people will have to choose wich bot they wanna use... and thats kinda annoying.

Describe the ideal solution
Idk if this is possible, but I would like a system like the Jockie Music. Basically, you just type the command, and the bots will automatically organise to play the music.

Example: Some people are listening music in channel A with bot A while theyre playing, and a second group of people want to study and they want music too... obviously they will not join channel A because there are people there, so they just join channel B and they have to write the command and select the bot B, instead of this I suggest to make it automatically... so the Bot A recognises they are in a different channel, so Bot A calls to Bot B and it joins automatically and plays the music group B wants.

Describe alternatives you've considered
Alternative 1: Make a "host" bot that manages all the other bots
Alternative 2: Make all bots "listen" and they organise themselves (this way, if bot "host" is offline, the other bots will be able to play).

Additional context
If I were the developer, I would implement a option to enable/disable this feature (although that depends on how it is implemented, it would not really be necessary either).

[Feature] Lite install without docker/db

Hello 👋

Is your feature request related to a problem? Please describe.

I have just installed this version from v5. It runs pretty well for me right now.
I launched the bot without docker/database and it was pretty sketchy, i will call this kind of installation as a "lite version"

here are the "problems" i had to deal with :

  1. No information in the readme file (at project root) to setup a lite bot for poor hardware (like raspberry pi for me)
  2. Editing the file config.js is prone to syntax error

Describe the ideal solution

  1. To me, lite version should be the default one as i think this is more a start&go kind of bot and should be more documented in the root readme.md
  2. One or two file .env / .env.lite in root folder with key=value would be much more convenient to edit and an example file would be appreciated

Describe alternatives you've considered

Maybe a sh script to help setup with inputs for a lite deploy ?
In fact we dont need a lot to run, like bot name + token + client id&secret + lavalink address
It could help a lot of users who have trouble to launch the bot

Error (canvas)? unable to "lite up" or "make up"

I'm on arm, might be the issue?
Getting this error:

    OS: Linux
    ARCHITECURE: aarch64
    PROJECT_NAME: discord-musicbot
    PROJECT_PATH: /home/ubuntu/DOCKERS/musicbot/Discord-MusicBot

WARN[0000] The "JWT_SECRET_KEY" variable is not set. Defaulting to a blank string. 
WARN[0000] The "JWT_SECRET_KEY" variable is not set. Defaulting to a blank string. 

> [email protected] start
> npm i && npm run bot

npm ERR! code 1
npm ERR! path /home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas
npm ERR! command failed
npm ERR! command sh -c node-pre-gyp install --fallback-to-build --update-binary
npm ERR! Failed to execute '/root/.nvm/versions/node/v20.8.0/bin/node /root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --update-binary --module=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release --napi_version=9 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v115' (1)
npm ERR! node-pre-gyp info it worked if it ends with ok
npm ERR! node-pre-gyp info using [email protected]
npm ERR! node-pre-gyp info using [email protected] | linux | arm64
npm ERR! node-pre-gyp http GET https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v115-linux-glibc-arm64.tar.gz
npm ERR! node-pre-gyp ERR! install response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v115-linux-glibc-arm64.tar.gz 
npm ERR! node-pre-gyp WARN Pre-built binaries not installable for [email protected] and [email protected] (node-v115 ABI, glibc) (falling back to source compile with node-gyp) 
npm ERR! node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v115-linux-glibc-arm64.tar.gz 
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using [email protected]
npm ERR! gyp info using [email protected] | linux | arm64
npm ERR! gyp info ok 
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using [email protected]
npm ERR! gyp info using [email protected] | linux | arm64
npm ERR! gyp info find Python using Python version 3.10.12 found at "/usr/bin/python3"
npm ERR! gyp http GET https://nodejs.org/download/release/v20.8.0/node-v20.8.0-headers.tar.gz
npm ERR! gyp http 200 https://nodejs.org/download/release/v20.8.0/node-v20.8.0-headers.tar.gz
npm ERR! gyp http GET https://nodejs.org/download/release/v20.8.0/SHASUMS256.txt
npm ERR! gyp http 200 https://nodejs.org/download/release/v20.8.0/SHASUMS256.txt
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/root/.cache/node-gyp/20.8.0/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/root/.cache/node-gyp/20.8.0',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/root/.cache/node-gyp/20.8.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! /bin/sh: 1: pkg-config: not found
npm ERR! gyp: Call to 'pkg-config pixman-1 --libs' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
npm ERR! gyp ERR! configure error 
npm ERR! gyp ERR! stack Error: `gyp` failed with exit code: 1
npm ERR! gyp ERR! stack     at ChildProcess.onCpExit (/root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:325:16)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:514:28)
npm ERR! gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:294:12)
npm ERR! gyp ERR! System Linux 5.15.0-1040-oracle
npm ERR! gyp ERR! command "/root/.nvm/versions/node/v20.8.0/bin/node" "/root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--update-binary" "--module=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release/canvas.node" "--module_name=canvas" "--module_path=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release" "--napi_version=9" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v115"
npm ERR! gyp ERR! cwd /home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas
npm ERR! gyp ERR! node -v v20.8.0
npm ERR! gyp ERR! node-gyp -v v9.4.0
npm ERR! gyp ERR! not ok 
npm ERR! node-pre-gyp ERR! build error 
npm ERR! node-pre-gyp ERR! stack Error: Failed to execute '/root/.nvm/versions/node/v20.8.0/bin/node /root/.nvm/versions/node/v20.8.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --update-binary --module=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas/build/Release --napi_version=9 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v115' (1)
npm ERR! node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23)
npm ERR! node-pre-gyp ERR! stack     at ChildProcess.emit (node:events:514:28)
npm ERR! node-pre-gyp ERR! stack     at maybeClose (node:internal/child_process:1105:16)
npm ERR! node-pre-gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:305:5)
npm ERR! node-pre-gyp ERR! System Linux 5.15.0-1040-oracle
npm ERR! node-pre-gyp ERR! command "/root/.nvm/versions/node/v20.8.0/bin/node" "/home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" "--update-binary"
npm ERR! node-pre-gyp ERR! cwd /home/ubuntu/DOCKERS/musicbot/Discord-MusicBot/djs-bot/node_modules/canvas
npm ERR! node-pre-gyp ERR! node -v v20.8.0
npm ERR! node-pre-gyp ERR! node-pre-gyp -v v1.0.11
npm ERR! node-pre-gyp ERR! not ok

npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2023-10-01T13_06_04_924Z-debug-0.log
Exiting gracefully with code 130
make: *** [Makefile:27: lite] Error 130

Add as a service

i was wondering if you can add this a service when linux reboots?

Error: connect ETIMEDOUT 2606:4700:3036::ac43:b2c7:2333

[29:7:2023 - 13:54] [ERROR] | Error: connect ETIMEDOUT 2606:4700:3036::ac43:b2c7:2333
[29:7:2023 - 13:54] [ERROR] | [FATAL] Possibly Uncaught Exception
        Reason: ReferenceError: player is not defined

uncaughtException
[29:7:2023 - 13:57] [ERROR] | [FATAL] Possibly Unhandled Rejection
        Reason: RangeError: No available nodes.

Promise {
  <rejected> RangeError: No available nodes.
      at new Player (/Discord-MusicBot/djs-bot/node_modules/erela.js/dist/structures/Player.js:102:19)
      at new <anonymous> (/Discord-MusicBot/djs-bot/lib/clients/Erela.js:21:4)
      at ErelaExtended.create (/Discord-MusicBot/djs-bot/node_modules/erela.js/dist/structures/Manager.js:213:16)
      at ErelaExtended.createPlayer (/Discord-MusicBot/djs-bot/lib/clients/Erela.js:87:15)
      at SlashCommand.run (/Discord-MusicBot/djs-bot/commands/music/play.js:64:38)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
}
[29:7:2023 - 13:57] [ERROR] | [FATAL] Possibly Unhandled Rejection
        Reason: RangeError: No available nodes.

Promise {
  <rejected> RangeError: No available nodes.
      at new Player (/Discord-MusicBot/djs-bot/node_modules/erela.js/dist/structures/Player.js:102:19)
      at new <anonymous> (/Discord-MusicBot/djs-bot/lib/clients/Erela.js:21:4)
      at ErelaExtended.create (/Discord-MusicBot/djs-bot/node_modules/erela.js/dist/structures/Manager.js:213:16)
      at ErelaExtended.createPlayer (/Discord-MusicBot/djs-bot/lib/clients/Erela.js:87:15)
      at SlashCommand.run (/Discord-MusicBot/djs-bot/commands/music/play.js:64:38)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      ```

[Dashboard] - Nextui 2.x.x crash the whole dashboard

Please describe the problem you are having in as much detail as possible:

Impossible to build or run the dashboard. nextui got updated to 2.0.0 in this commit 8e1b7f6 and the code is not up to date to match nextui 2.0.0 so it crash.

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

// Place your code here

If you have your own setup, without the original docker configuration, please provide:

Further details:

  • discord.js version:
  • Node.js version: 20.5.0
  • Operating system: Windows 11
  • Priority this issue should have – please be realistic and elaborate if possible: A good priority given that in this case the dashboard is not functional.

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

[DJS-BOT] - Updating Documentation

Given the recent development and implementations of the lite version, some minor fixes here and there in the startup script and other miscellaneous components the documentation and READMEs have been left outdated. As a note this issue is to remind us that the documentation needs to be updated and expanded in the future minor versions.

Allow /play command in the control channel

Is your feature request related to a problem? Please describe.

The /play command shows search results, which is very convenient and helpful to find the right song. Since the control channel doesn't allow commands, you have to switch channels to use the command or copy the text from the search results, which is inconvenient.

Describe the ideal solution

Allow the /play command to be used in the control channel.

Describe alternatives you've considered

It's just a QOL thing. You can use the command in another channel but that's just inconvenient when the control channel is there to, well, control the music.

Additional context

Same for the queue, would be nice to be allowed to see it in the control channel. Perhaps add it to the permanent/pinned message so it's always there. Should I open a separate issue/feature request for the queue suggestion?

Issue with fastify v4.26.0

Please describe the problem you are having in as much detail as possible:

so I grabbed the latest version(5.5.0) and ran the npm run update and it ran fine. but every time you try to start it gives the following error after > tsc -p api/v1/tsconfig.json:

image
image

I'm able to fix it by setting fastify to 4.25.0 in package.json:
image

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

so maybe a change to fastify broke something or it an issue with my nodejs/windows 10.
it seems to be related to deploying the slash commands since it also throws an error when running npm run deploy
it seems to start in djs-bot/api/v1/src/index.ts

If you have your own setup, without the original docker configuration, please provide:

Further details:

  • discord.js version: 14.14.1
  • Node.js version: 18.15.0
  • Operating system: windows 10
  • Priority this issue should have – please be realistic and elaborate if possible: low since the bot will still work if I set fastify to 4.25.0.

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

the create playlist command does not work.

Please describe the problem you are having in as much detail as possible:

the playlist create commands is not working. it looks to be an issue with the user id.

image

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

in create.js:

	const playlist = await client.db.playlist.create({
		data: {
			name: playlistName,
			user: {
				connectOrCreate: {
					where: {
						id: interaction.user.id,
					},
					create: {
						id: interaction.user.id,
						username: interaction.user.username,
					},
				},
			},
		},
	});

If you have your own setup, without the original docker configuration, please provide:

just running in windows 10 using node.js

Further details:

  • discord.js version: 14.13.0
  • Node.js version: 18.15.0
  • Operating system: windows
  • Priority this issue should have – please be realistic and elaborate if possible:

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

Cannot seem to start Develop Branch

Please describe the problem you are having in as much detail as possible:

Simply using make up on the development branch, should I be using master instead?
First issue is that oddly it's skipping djs-bot. Then the table parsing issue, which I'm not sure which table it is trying to parse.

user@SERVER:~/Docker/Discord-MusicBot-v5-1/Discord-MusicBot$ sudo make up
    OS: Linux
    ARCHITECURE: x86_64
    PROJECT_NAME: discord-musicbot
    PROJECT_PATH: /home/nate/Docker/Discord-MusicBot-v5-1/Discord-MusicBot

format value "table" could not be parsed: parsing failed
format value "table" could not be parsed: parsing failed
Pulling images for: djs-bot dashboard postgres-db lavalink
WARN[0000] The "JWT_SECRET_KEY" variable is not set. Defaulting to a blank string. 
[+] Running 4/4
 ⠿ djs-bot Skipped                                                         0.0s
 ⠿ lavalink Pulled                                                         4.4s
 ⠿ dashboard Pulled                                                        5.0s
 ⠿ postgres-db Pulled                                                      4.8s

Creating container for: djs-bot dashboard postgres-db lavalink
unknown flag: --pull

Starting djs-bot dashboard postgres-db lavalink
no container found for project "discord-musicbot": not found

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

Env has the following defined

POSTGRES=root
POSTGRES_USER=root
POSTGRES_PASSWORD=root
TOKEN={redacted}
CLIENTID={redacted}
CLIENTSECRET={redacted}
DEVUID={redacted}
DATABASE_URL="postgres://root:root@localhost:5432/base"

If you have your own setup, without the original docker configuration, please provide:

I do not, I copied my .env from the old repo for this to this new one.

Further details:

Full development branch, whatever is in there unmodified other than my .env

  • discord.js version:
  • Node.js version:
  • Operating system:
  • Priority this issue should have – please be realistic and elaborate if possible:

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

Figma design for v5.x dashboard

Given the rapid development of the latest v5.1/2 a new necessity has risen: A Figma Design

The design should aim to make producing the front end easier and more trackable.

Check out the progress on Figma. If you wish to contribute to the figma please contact staff on the official discord support server

This is my initial ideas currently I have in mind, feel free to change and suggest whatever:

  • Music Player page: /players/:id

    • I think glassmorphism design would look very good with album image as its background
    • Include control at the bottom side with buttons (play, pause, stop, skip track, autoplay toggle, repeat-mode toggle) with track duration and progress
    • Track title sticky at the top of the screen with scroll-able lyrics below it
    • Probably with effect presets dropdown button? I think the bot support presets?
    • A toggle-able sidebar for track queue on the right side of the screen
    • A toggle-able sidebar for searching music on the right side of the screen, a text input at the top and search results under it
    • Make the design as visual as possible with icons, hover colors, shadow whatever looks nice
    • Probably also need to make current navigation sidebar toggle-able
    • This page will make use of all endpoint and socket events we planned to create
    • add something here ...
  • Bot Setting: /servers/:id

    • Should be in the server page, the current server page is very messy and need a figma design too
    • Probably with tabs? Info and Bot Setting
    • Make use of server banner and splash screen
    • Button to access music player page
    • add something here ...
  • Maybe a player list? /players that lists active players but ig it's essentially the same as server list, so no need a design for this, or no need a player list page at all

  • add more here ...

Unimportant and out of scope:

  • Discovery: /discovery
    • This might sounds crazy but a list of every server the bot is in and user can search and filter server based on real-time voice and stage channel activity, for the MUSIC
    • Join-able for easy engagement, bot will need create invite permission

Error when deploying via npm

Please describe the problem you are having in as much detail as possible:

Error when running the command npm run deploy.

It seems like the repo is missing some files/modules when npm trying to call it, in this case it's anything on the /djs-bot/api/v1/dist.
I've run npm run update sucessfully before invoking the deploy command.

Further details:

  • Branch: develop (latest source)
  • discord.js version: (derived from repo)
  • Node.js version: v21.5
  • Operating system: Ubuntu 22.04
  • Priority this issue should have – please be realistic and elaborate if possible: moderate

Screenshot

image

Dashboard login loop

Please describe the problem you are having in as much detail as possible:

image

This is running behind a reverse proxy:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name musicbot.domain.com;

    underscores_in_headers on;

    ssl_certificate /certificates/musicbot/fullchain.pem;
    ssl_certificate_key /certificates/musicbot/privkey.pem;

    location / {
      proxy_pass http://127.0.0.1:8000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass_request_headers on;
    }
    
    location /api {
      proxy_pass http://127.0.0.1:8010;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass_request_headers on;
    }
    
    location /ws {
      proxy_pass http://127.0.0.1:8001;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass_request_headers on;
    }

image

image

logs:

[06.02.2024 - 09:23]         | Spawned shard 0
[06.02.2024 - 09:23] [WARN ] | Bot running on OPLevel: 1
[06.02.2024 - 09:23] [WARN ] | Debug mode is [ENABLED]!
[06.02.2024 - 09:23] [WARN ] | Booting up the bot...
                               [REDACTED]/v5.5.0 (ID: [REDACTED])
[06.02.2024 - 09:23] [WARN ] | Loading error handlers...
[06.02.2024 - 09:23] [INFO ] | Loaded debug error handlers!
[06.02.2024 - 09:23] [DEBUG] | Music engine "Erela" has been loaded
[06.02.2024 - 09:23] [ERROR] | Prisma ORM failed to load
[06.02.2024 - 09:23] [ERROR] | Error: @prisma/client did not initialize yet. Please run "prisma generate" and try to import it again.
In case this error is unexpected for you, please report it in https://github.com/prisma/prisma/issues
[06.02.2024 - 09:23] [INFO ] | Slash commands have been loaded. Waiting for bot to finish initializing...
[06.02.2024 - 09:23] [INFO ] | Schedules have been loaded.
[06.02.2024 - 09:23] [INFO ] | Event listeners have been loaded.
[06.02.2024 - 09:23] [INFO ] | WS is now listening on port 8001
[06.02.2024 - 09:23] [INFO ] | Successfully logged in as [REDACTED]
[06.02.2024 - 09:23] [INFO ] | API is now listening on port 8010
[06.02.2024 - 09:23] [INFO ] | Slash commands have been pushed to application
[06.02.2024 - 09:23] [SILLY] | [REDACTED]/v5.5.0 (ID: [REDACTED]) is online!
[06.02.2024 - 09:23] [DEBUG] | Node: DockerNode | Lavalink node is connected.
prisma generate
[06.02.2024 - 09:26] [ERROR] | Unhandled server error:
[06.02.2024 - 09:26] [ERROR] | TypeError: Cannot read properties of null (reading 'userAuth')
TypeError: Cannot read properties of null (reading 'userAuth')
    at Object.updateUserAuth (/djs-bot/api/v1/dist/lib/db.js:28:30)
    at Object.handler (/djs-bot/api/v1/dist/routes/v1/routesHandler/login.js:72:22)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Further details:

  • discord.js version: Provided with the bot
  • Node.js version: Provided in docker
  • Operating system: ubuntu-server (latest)

Relevant client options:

idk

  • partials: none
  • gateway intents: none
  • other: none

[ERROR] | [FATAL] Possibly Unhandled Rejection

Got this error when the song started playing on the newest git update
djs-bot | [24:7:2023 - 13:43] [ERROR] | [FATAL] Possibly Unhandled Rejection
djs-bot | Reason: TypeError: Cannot read properties of undefined (reading 'send')
djs-bot |
djs-bot | Promise {
djs-bot | TypeError: Cannot read properties of undefined (reading 'send')
djs-bot | at /djs-bot/util/controlChannel.js:315:4
djs-bot | at runIfNotControlChannel (/djs-bot/util/controlChannel.js:299:10)
djs-bot | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
djs-bot | }

issue with queue.js and embeds.js in the embed messages. "Requested by" section

Please describe the problem you are having in as much detail as possible:

I noticed that some of the embeds have an issue where there extra text that is not needed in the "Requested by" section of the embed.
They are in queue.js and embeds.js
I was going to make a Poll request but I was not sure if it was just a Windows issue or not.

Include a reproducible code sample here, if possible, the snippet of code which is throwing the error or which you presume is giving issues:

queue.js:
Between 78-84:

				.setFields([
					{
						name: "Requested by",
						value: `<@${song.requester}>`,
						inline: true,
					},
				])

The fix that I did:

				.setFields([
					{
						name: "Requested by",
						value: `${song.requester}`,
						inline: true,
					},
				])

Between 115-121:

			.setFields([
				{
					name: "Requested by",
					value: `<@${song.requester}>`,
					inline: true,
				},
			])

The fix I did:

			.setFields([
				{
					name: "Requested by",
					value: `${song.requester}`,
					inline: true,
				},
			])

embeds.js:
Between 78-84:

      .addFields([
        {
          name: "Requested by",
          value: `<@${track.requester}>`,
          inline: true,
        },
        {

The fix I did:

      .addFields([
        {
          name: "Requested by",
          value: `${track.requester}`,
          inline: true,
        },
        {

If you have your own setup, without the original docker configuration, please provide:

running it in Windows 10 in node.js.

Further details:

  • discord.js version: 14.13.0
  • Node.js version: 18.15.0
  • Operating system: windows 10
  • Priority this issue should have – please be realistic and elaborate if possible: LOW (not a big deal just a cosmetic issue)

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.